QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6056|回复: 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发送多人邮件没有展示收件人问题的解决方法  r% b0 T4 h. X( W, N
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    * e) W# V9 o+ l2 o背景:) P+ x3 W5 s4 \. F2 _
    / x+ t/ X" B9 ?% s4 z* v
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人% X/ h7 `7 [; ?  W
    4 M7 S& k# L  c/ ~5 V# Y
    问题:
    . v, a$ t' |1 N$ O* k9 S1 G) V7 m4 @) F
    使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    1 @! B3 q: F& V( S
    + i3 Z& H$ r/ Q; q# @5 F问题代码示例:% z  f" ]; c: e' f1 h
    # -*- coding:utf-8 -*-" q; F5 F* T5 M2 \+ y; ?
    import smtplib) |- n! G- y! o5 R: v; s
    from email.mime.multipart import MIMEMultipart
    . p# ?) E" F0 R1 R* g4 N! cfrom email.mime.text import MIMEText
    . h# ^0 ^2 d) k7 G/ K3 p1 }; }
    def send_email_to(fromAdd, toAdd, subject, html_text, filename):- Q5 k1 w9 e4 G# b5 K2 R7 y6 D
    server = 'mail.****.com'
    8 G; M2 Y$ {) r* ~* p0 j& h5 J9 P user = '*****'
    8 v% p0 n1 J- C6 e password = '********'
    ' N- Y! g% W1 E$ G0 t. m0 R  a& r2 i0 _. Y
    strFrom = fromAdd5 k  K9 E4 L! |& L
    strTo = toAdd- ~7 ]( B7 a9 t: g4 {3 s" r
    6 d: q- b( s$ B3 {
    msgRoot = MIMEMultipart('related')
    7 s7 C% P% P; Q8 p. d4 N) r msgRoot['Subject'] = subject
    6 [( P1 f: B6 F6 A) p msgRoot.preamble = 'This is a multi-part message in MIME format.'! I+ O. I3 E8 ]1 |! s: X

    ' I0 V. O5 a9 p" c! n1 k; F msgAlternative = MIMEMultipart('alternative'); Z5 H7 N& k( d8 A+ B
    msgRoot.attach(msgAlternative)) M; {! \6 }2 B7 ~- y1 \% ?) _

    0 }. O) M) f' \. E" Z( K( m msgText = MIMEText(html_text, 'html', 'utf-8')
    3 y  [# F5 }5 [7 B% | msgAlternative.attach(msgText)6 e; E3 C: t) A+ i0 l& R

    3 Y0 e3 V( Z! y0 U5 j2 }; t smtp = smtplib.SMTP()
    ; [4 g% q) e6 N' P smtp.connect(server)
    ) d0 t6 c, g( e% v; t$ {/ y3 t smtp.login(user, passwd)) Z- P9 Q/ s4 Q8 g( n- g

    ' N' U+ ~. h9 L' L  a/ f* i! u2 b att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')1 N+ s1 D1 I! |' q6 @( k0 g
    att5["Content-Type"] = 'application/octet-stream'
    0 {! z+ ]  n) s& i4 L% U/ x+ l att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'+ R8 g) |& t# L% W7 Z
    msgRoot.attach(att5)& r7 R3 f4 |' e! J. N9 W& p
    6 K( n4 R. N8 w, Q) U
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())2 [+ X/ {) C1 z4 P+ s) j0 U
    smtp.quit()
    % E4 w- _% ^0 S9 u( w% k5 Z return
    8 k6 d; a3 [8 D0 u0 B: o9 g; I" W8 Q0 y! g( Z3 ~
      _- H  p9 m' |
    成功代码:  a* ~7 T9 g  c0 l1 Q
    #!/usr/bin/env python
    5 y5 h8 Y4 E+ S5 F  f  J# -*- coding: utf-8 -*-+ A+ @* [# p/ |
      F; H# Z5 P' I& I+ I
    import smtplib
    ! o, ~# x- z: r" X& Tfrom email.mime.multipart import MIMEMultipart
    & t% `% E& p1 G: u$ g% I5 {8 \from email.mime.text import MIMEText, R+ @$ j: P3 V9 ?
    from email.utils import parseaddr: `. K9 |( s  I; S
    from email.utils import formataddr
    1 N* Y. Z. ]9 L# F6 Q0 Afrom email.header import Header/ n+ P6 u8 E2 y" F' X
    & k# W' {3 R" K8 |

    9 P4 D6 a/ {; W+ Q9 Mdef __format_addr__(addr):
    $ ^. a5 ]4 O$ z9 @4 t$ Y # 解析邮件地址,以保证邮有别名可以显示4 R5 z- I6 \7 D8 k$ l
    alias_name, addr = parseaddr(addr)5 p+ D+ h' G* f% E) m
    # 防止中文问题,进行转码处理,并格式化为str返回
    + O9 Z( I3 |! A return formataddr((Header(alias_name,charset="utf-8").encode(),# I* w  I# X: A2 Q  o
          addr.encode("uft-8") if isinstance(addr, unicode) else addr))
    - x# w* \) L0 x2 G/ q: E5 [
    / V5 i$ k* e0 j# E4 |0 I
    0 I) B$ Y/ `+ q; ~  ?& k! ?1 ^" ^def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    2 C' f6 M5 n( P5 z
    & D8 y( y* y2 e2 [1 \& M% s SERVER = 'mail.***.com'& q8 V- G! b" f0 u
    USER = '******'
    3 o- s" }- ?, ?  d+ x PASSWD = '***'" o  B, }9 U' T! X% q* a
    6 x* t! t' L. I3 U
    strFrom = __format_addr(fromAdd)
    6 r1 i8 ~3 J. V
    8 T1 Z2 B% c0 W; J. A$ \: |! ?; x strTo = list()$ f, q$ _4 O0 B" w0 h' Q3 c
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化; Y3 L* j, E' [1 k; t8 B+ T
    try:
    ' ^& U6 f; ?5 Y/ t) Z- q7 p& x: j  for a in toAdd:
    & b7 [7 d) e) ?- w   strTo.append(__format_addr(a))* A6 M9 s% l; {2 V; e- T3 G
    except Exception as e:/ t. r' R2 Y: D' v& Z" Z
      # 没有对a和toadd进行type判断,出错就直接还原8 D/ E  }; O; l# X9 C$ o, }" T
      strTo = toAdd, }' j2 A! y2 v0 N' r5 ]
    $ C* O7 X+ w- s0 s- n+ I
    msgRoot = MIMEMultipart('related')
    1 {: C: P4 G; L; P2 H5 N) Y0 P8 M msgRoot.preamble = 'This is a multi-part message in MIME format.'2 [7 Y0 w# D3 j' R' m9 v* I: z
    / ~; W" m+ z; I2 X
    msgAlternative = MIMEMultipart('alternative')9 k9 F/ N3 O) ^4 G
    msgRoot.attach(msgAlternative)
    4 y. n  S! @) @; p. I5 y: c
    ; w; t% y  g" [4 R* X2 H) c # 邮件对象 ( n1 n( t+ a( Q, d2 y* h. D+ |
    msgText = MIMEText(html_text, 'html', 'utf-8')2 J) c& J2 B$ q. G0 e
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化- M" P7 c. b$ {. r) y
    msgRoot['From'] = strFrom  # 发件人也是被格式化过的' h7 X% p8 B7 L' J% ^, {: _
    msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”; k! S. C/ }( W# x# G; x3 Q
    msgAlternative.attach(msgText)
    ' ~! ^0 W' q' g! E0 \7 L% h& r! w7 w3 z
    smtp = smtplib.SMTP(SERVER, 11)
    $ h0 z6 B( p6 U$ _ smtp.set_debuglevel(0)
    1 @! g( B% g0 G) @ # smtp.connect(SERVER)
    7 W0 B: F  Z# |0 l" W/ y( n smtp.login(USER, PASSWD)
    5 q2 U6 z  g0 ^1 C4 ` # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别0 b7 ^& j, Q& {& {" m1 t! Y
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    3 A; r/ r3 K; l& G. x smtp.quit()/ s% a9 u' r7 O0 _
    总结:9 P# G3 L- B6 [/ {' k, Q
    9 G) `6 l/ T% \+ A& z9 a; g0 f9 I: ^- e
    看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    5 o$ X$ w  Z  i3 O+ G# x) Z
    & k  L/ z: d9 b实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”& e  Q5 A" [% J) J

    - Q0 w' p+ I' R* h3 J同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    3 q5 S) p' f$ D" q: z8 o& {! H9 E% R% o# f# z2 s: E
    还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。0 {2 u9 ]7 \, Z  D9 t# j! ?3 j6 l
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    9 W" p8 o/ R! v
    : M# Z3 l( W$ W& N,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员
    ; P& y$ `1 l7 U4 j7 {# L9 f
    9 k0 B5 J8 [0 t$ d' [( i. x定时讲解Python技术,分享一些学习的方法和需要留意的小细节% W" `2 m! w. D1 [5 b
    ————————————————, {9 t' Q4 \- S, b: ~1 \
    原文链接:https://blog.csdn.net/haoxun12/article/details/1051629470 G# C' m( T6 N3 v( ]

    9 q" \+ G- b, ~; S6 W( w
    , x$ X* e" _. U8 j/ A
    6 J% ~) o6 X/ R
    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-18 12:38 , Processed in 0.331251 second(s), 61 queries .

    回顶部