QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6070|回复: 2
打印 上一主题 下一主题

python发送多人邮件没有展示收件人问题的解决方法

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-3-30 11:14 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    python发送多人邮件没有展示收件人问题的解决方法
    ( b+ {+ _9 y" `) c6 A9 ]这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2 G! n6 \" m# H* |: s3 C7 t
    背景:
    / f5 c  T7 u  f! Z* P
    5 d2 m; B$ m2 n工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人" Z' T6 N8 C' d; a. }# C
    : I0 z! i# J" [0 i8 K5 R& z
    问题:0 a7 x7 P' n1 A

    4 W$ O$ h+ M0 c& J3 g" z$ M- E( O使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    $ R) n9 W4 N  `" [0 g! g) M) e$ j0 m
    问题代码示例:/ p( P  w: s& C4 S9 v  @
    # -*- coding:utf-8 -*-, d7 T5 S0 P' i9 ]8 d) ?
    import smtplib! |/ B/ ]( d* |  ~/ V6 m
    from email.mime.multipart import MIMEMultipart
    * C4 U; k5 A+ x5 ~* Y* Pfrom email.mime.text import MIMEText+ d0 t  Z. u4 D; k  j5 Y, s2 ?+ g  [
      i  h3 ~: x) j5 X4 }
    def send_email_to(fromAdd, toAdd, subject, html_text, filename):
    % O& m! Y0 l% h2 } server = 'mail.****.com'
    . p/ t! Z8 ?4 Y5 d& b user = '*****'* B9 s2 f$ B+ }( W
    password = '********'
    % I, d  _% q5 b% }' F) ]$ a' R- D$ A  R% b0 I0 S' K4 `0 Z  R9 [6 j1 \
    strFrom = fromAdd9 D: ]# a" `6 I. t" [
    strTo = toAdd9 b, C! p; {, B9 |- ~5 a
    3 n/ ?( x- f) s+ k; J: b+ }# w; B
    msgRoot = MIMEMultipart('related')3 E% q0 G5 c0 P+ `9 C- C. Y8 F
    msgRoot['Subject'] = subject
    . l3 {+ F& h1 P7 H msgRoot.preamble = 'This is a multi-part message in MIME format.'' T) M' Z4 U- v: u
    ; Z3 e0 b3 Y' k. U: X( c1 |8 W5 N
    msgAlternative = MIMEMultipart('alternative')  T( H$ C) g$ F) f
    msgRoot.attach(msgAlternative)
    1 k! S0 F# K# \+ h, E% o: v% W# p: ]2 b2 k8 H
    msgText = MIMEText(html_text, 'html', 'utf-8')
      u6 y% y4 U5 S7 `+ ? msgAlternative.attach(msgText)
    5 z( X+ D+ w/ @4 x) L3 _2 M# y7 |, C, p# w8 \
    smtp = smtplib.SMTP()* ^2 N6 D3 M+ |3 x3 a; z( x0 H2 |  j
    smtp.connect(server)
    3 K: a6 s. L; I( z smtp.login(user, passwd)
    0 N  v4 L  R  r" n) _: N5 v, w+ D% E) S3 w( s7 j( q" [7 w/ C1 O3 f
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
    " v, v- b! ?; Q* E/ l att5["Content-Type"] = 'application/octet-stream'
    % T+ g- \4 j. ]! w6 r  \3 U; w att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'
    6 A" H) g; t' k5 } msgRoot.attach(att5)
    ) n% n3 ?+ e! @! t5 H, f7 w" U
    , q0 b: u$ l$ t* e9 g  z smtp.sendmail(strFrom, strTo, msgRoot.as_string())
    ) V" I1 y+ Y# B% F; B2 z) D/ G. ?6 _ smtp.quit()% z1 J+ Q3 Q4 w/ z4 q5 V
    return
    . h7 ]' U- l. |9 Z0 a
    $ l" X, ~' J  i; j( i+ c7 ?0 G- C1 y% |* T
    成功代码:. e7 o  }4 C( b4 k( M& d5 ?6 J  z
    #!/usr/bin/env python& M, G, k, R9 X) C, Q
    # -*- coding: utf-8 -*-/ X' n) _% y4 `
    + S) W! ^% g8 |
    import smtplib
    - j/ C8 G9 d8 x& Y  k/ hfrom email.mime.multipart import MIMEMultipart) x( U* [; K' U2 E
    from email.mime.text import MIMEText
    : t6 ?; I% D* qfrom email.utils import parseaddr# u/ j0 ~' l$ d
    from email.utils import formataddr% r/ C8 x: F3 {, t, p( P
    from email.header import Header
    & D/ z; u; Z, W9 W+ a: m
    4 Y+ h3 B! S$ E1 F, J7 l3 U- h( h) j7 t, b# y+ t( ]5 c6 H
    def __format_addr__(addr):
    ( @- I2 v6 J8 U& P* y/ y # 解析邮件地址,以保证邮有别名可以显示
    / Q! D' _( F4 ~7 Z5 N- W4 p$ T alias_name, addr = parseaddr(addr)0 y/ G+ t3 V7 A: h$ g1 c- U/ y
    # 防止中文问题,进行转码处理,并格式化为str返回5 M, i3 o0 ^& `; W
    return formataddr((Header(alias_name,charset="utf-8").encode(),
    2 f1 K% B+ k7 ~( ^      addr.encode("uft-8") if isinstance(addr, unicode) else addr))6 H! o# K9 G" u- e/ ~& y% o, L2 Z
    ) Y9 g) I) c9 W# z( ]  ?/ N/ b
    ! n& m$ B1 F5 A/ Q
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):& d3 o8 |2 I: X9 \; q9 Q

    - U; X$ n) D# E- c SERVER = 'mail.***.com'2 y$ t% r8 Z7 c! g( t
    USER = '******'3 |3 o' B/ N  u2 I' ]1 q9 q
    PASSWD = '***'
    2 e6 Y3 o5 n: H! w( q' K, k* }9 o2 X) s2 j
    strFrom = __format_addr(fromAdd)
    0 l$ I* |4 }; T$ z
    . q/ V) @# ^6 h# t3 E$ g  A- t# k strTo = list()4 g, G, `7 T) d; g0 o' ]3 V
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化
    . k* o( c+ ?" ]5 s* P1 R6 L6 f try:" t- J/ V. L( @- K. j9 s9 r3 G
      for a in toAdd:
    0 Q0 {# Z  x% _! O1 W   strTo.append(__format_addr(a)); f& }/ r$ ^: ~0 j
    except Exception as e:: b  e: c+ r4 D7 Z, [0 G/ P
      # 没有对a和toadd进行type判断,出错就直接还原
    % B3 K- I& y, R' h5 J) d4 F  strTo = toAdd0 E! g! }' \, O+ s0 G' p- B, o

    ; J# H; W( n  `) d9 w msgRoot = MIMEMultipart('related')
    3 s% m" w0 E# @" n: K9 G msgRoot.preamble = 'This is a multi-part message in MIME format.'
    % c" [& t) Q5 o- \9 E( O& U3 R1 T" b" U" i
    msgAlternative = MIMEMultipart('alternative')) u2 E8 K  Y3 J1 n5 n) i
    msgRoot.attach(msgAlternative)3 k' o) F* B& J# J8 h
    * c/ Z% v6 `( i; }- _! b) C
    # 邮件对象
    - c" @; q( N8 b  _0 F msgText = MIMEText(html_text, 'html', 'utf-8')
    6 \' a" j8 T' z/ a msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    ' c7 t) U2 K( b+ O9 ` msgRoot['From'] = strFrom  # 发件人也是被格式化过的" g) D. i2 e3 H& f# T0 ~6 |
    msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”
    ! {2 f0 ~( E% d/ u0 ^% v msgAlternative.attach(msgText)$ x' w, r" }, B' h( P% R  V
    / O% C# I* q9 i$ a# O8 ?8 ~- V
    smtp = smtplib.SMTP(SERVER, 11), `8 b" o) m- `1 Z( f# h+ V
    smtp.set_debuglevel(0)
    8 [8 ~7 Z# {# e7 {; [0 ? # smtp.connect(SERVER), d) \3 g3 u1 a4 P! j9 \" W2 c! {( j
    smtp.login(USER, PASSWD)1 B) r8 r3 h6 d
    # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别2 _" W6 a% ?: S$ C* |2 y
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    9 r$ ]/ U. g* o, n smtp.quit(): a3 V5 h0 v8 J8 b' w% t
    总结:" h( O: b: p6 c4 h- ]
    / ~5 r# |( ]) C1 X
    看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo7 }% O3 ~" s$ V% G4 K/ G3 C
    . \& P0 A: Y, b, C* Q
    实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”
    6 t6 Y5 k9 T$ o% k
    & Q, z' r% Z% K+ z同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型* ?2 t' g, N- f$ v/ \1 G7 M; `

    , y5 C2 Y/ E1 e! F2 H还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。- H0 b: t$ I; \( }! k  x! H
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    . b8 `6 v; P3 V4 ?; }6 R! e( z' Q) D. i3 K- p
    ,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员
    % ~" I5 B! L) Y; k, l9 [' j$ z. }/ Q/ d" O. I
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节
    ) U* q  `# a! O0 D+ A6 y————————————————/ B7 p# b3 e; }  a# q
    原文链接:https://blog.csdn.net/haoxun12/article/details/105162947  g( F4 Q' S/ L& s' \: U# ^

    0 U$ U% k* o5 O' f2 z) R
    / u1 R, D  K; Q9 R- k9 A
    + _, F7 `9 m1 W, K% c
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    0

    主题

    3

    听众

    92

    积分

    升级  91.58%

  • TA的每日心情
    慵懒
    2020-5-25 19:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    群组2019美赛冲刺课程

    回复

    使用道具 举报

    0

    主题

    3

    听众

    92

    积分

    升级  91.58%

  • TA的每日心情
    慵懒
    2020-5-25 19:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    群组2019美赛冲刺课程

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-24 15:06 , Processed in 2.130131 second(s), 61 queries .

    回顶部