QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5392|回复: 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发送多人邮件没有展示收件人问题的解决方法
    $ g* L" v+ p4 j5 S* ~  o这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    ) i" X( l& \' G+ }2 V) _% e背景:
    0 u4 g9 `0 v$ S1 D# B+ k
    5 m; X% _/ y8 v1 o; L* ^. @6 F& Z) T4 U工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    , A" S, M2 q* d# U& _9 E; x. `# h* {4 o3 v/ h6 y
    问题:
    & Q5 A2 R" \0 d6 S/ k) `6 J9 @/ ~. ~: Y5 |2 A
    使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容  R5 E8 y8 P- z9 B8 O" }
    0 M2 Q( Y+ d, K, y
    问题代码示例:
    : H5 v. g1 ^: p7 o# -*- coding:utf-8 -*-: a' u3 p# S  Y, _5 E+ V
    import smtplib8 b9 i1 U* Y; s& t5 o8 k: s( y
    from email.mime.multipart import MIMEMultipart4 O) D/ r" b# l. r# W) J
    from email.mime.text import MIMEText' i$ [" [( P: T* S! E1 i

    : [( y9 X) A" c( z- M. K' @8 S2 cdef send_email_to(fromAdd, toAdd, subject, html_text, filename):
    + Z+ H. }) E2 _! c! m server = 'mail.****.com'* l1 r# G- K4 J0 ]4 s2 R
    user = '*****'3 t* _3 n% g8 y7 I) m
    password = '********'7 L+ o5 G/ H3 U  W6 k9 y

    ; p0 j6 S' L# j( {$ f0 C strFrom = fromAdd
    & e- J9 Y5 C& J* i) H, U strTo = toAdd( W# G4 i+ D8 m' k% V  G
    1 d# i# ~+ q7 A  \% l* j
    msgRoot = MIMEMultipart('related')
    # m+ Q& U6 S/ M2 W$ h3 K# I msgRoot['Subject'] = subject
    & z0 R, y8 ?  J+ }& m msgRoot.preamble = 'This is a multi-part message in MIME format.'; z) s: y  ]! _0 v" Y

    + [" u1 N4 k* b8 Q2 D msgAlternative = MIMEMultipart('alternative')6 L' V/ ?' b4 m; Z" J4 @  C
    msgRoot.attach(msgAlternative)
    5 Y  l, Z  }/ q2 k2 k2 m: [; B7 J8 k- ^+ }. J8 j
    msgText = MIMEText(html_text, 'html', 'utf-8')
    : Y# R- ?; A4 u1 e msgAlternative.attach(msgText)
    8 g% p* `# C, A; }5 [
    6 c9 D( H6 g5 E- R smtp = smtplib.SMTP()0 @/ p4 [1 I4 h# N
    smtp.connect(server)
    - W- b5 Y1 t, \ smtp.login(user, passwd)/ _6 k$ d/ @  g+ p2 w* K8 D
    0 i/ `* G$ N6 o3 M0 j9 H
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')6 Z  V3 p: d7 d# G' @
    att5["Content-Type"] = 'application/octet-stream'8 z3 m/ t% O1 g7 {' n
    att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'
    - d/ a- u" m" K3 ^" b; j msgRoot.attach(att5)
    ) l" F: s) Z" f9 a# B6 j3 Z
    ( V* q7 q( ^7 F# }9 p0 q" I* N smtp.sendmail(strFrom, strTo, msgRoot.as_string())* G' e/ E8 [/ b/ R5 z
    smtp.quit()
    $ e8 c) {6 t  c return6 n' R8 M0 l# v; T

    & K5 h+ h- E# Z1 h4 y* N! e3 n& y
    2 }8 @! W4 x5 o6 e5 R成功代码:! |9 M& {' J4 W* Q  W
    #!/usr/bin/env python+ }3 o* j9 \  ?. c% F) |3 c
    # -*- coding: utf-8 -*-# A" V3 L9 ]+ Q6 S$ K
    / M' `/ x/ T( j: K1 a% g5 F1 O7 |
    import smtplib1 ~9 F% X2 k! H% Z5 C
    from email.mime.multipart import MIMEMultipart
    & o) V" ]) B0 m, v% Dfrom email.mime.text import MIMEText
    $ f; q7 @% j. K! q$ \. Cfrom email.utils import parseaddr! Y4 e! e+ W6 }6 J2 ~& S5 r; X
    from email.utils import formataddr
    ' X; [. ^# H1 G2 c# A! ~from email.header import Header
    4 A1 N* R$ B% t+ ]" d: g# U" V2 l9 k) w6 ~9 @( M
    / r' [) F( P6 z) b. G  l. P; B. h! L
    def __format_addr__(addr):
    # O. j' `% U9 d! s, G1 H # 解析邮件地址,以保证邮有别名可以显示4 g$ \4 U, ^5 {6 }5 \; Y
    alias_name, addr = parseaddr(addr)9 L' k9 g+ W5 d  H, J
    # 防止中文问题,进行转码处理,并格式化为str返回6 w7 C$ K+ A6 f* _4 K! L
    return formataddr((Header(alias_name,charset="utf-8").encode(),
    9 ~& E. b- P* D" C7 S, I! C      addr.encode("uft-8") if isinstance(addr, unicode) else addr))& d# p* j# f2 Y, O* c

    * K3 l6 Q6 Q8 z/ q$ h* s
    " X% k: m6 L/ v, Cdef send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    ' e3 ?+ N3 P/ [. p1 n3 y/ {( H1 ?8 i  r+ M& M" K) }; n; K, w0 C% E% Z
    SERVER = 'mail.***.com'
    , ^# V" y+ ]/ Q( o" [/ q' D- y USER = '******'% k4 t# W- ]% e; J$ p# L! u
    PASSWD = '***'$ V/ j+ [- l5 R% b8 J- y7 T
    0 D0 f. |+ i! q5 b
    strFrom = __format_addr(fromAdd)
    / [- o" S: ~9 S: j: y- W$ Y! D! W2 S* X. l& N) J
    strTo = list()
    , i! @8 R8 K% N+ D+ r- w. T) D% M # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化; K  s, D4 x4 x1 r7 @7 O" s
    try:* n" s5 O6 Z+ J4 m
      for a in toAdd:+ f1 V$ G  z" u; O. {. o. Q
       strTo.append(__format_addr(a))1 h+ d" }3 p' l. q; O
    except Exception as e:3 Q4 z) B1 E# r
      # 没有对a和toadd进行type判断,出错就直接还原
    , G1 U+ Q; w& z1 Q  strTo = toAdd
    $ U% k% G# i/ j
    6 i: c; ]  H$ Z( y4 l8 q" ] msgRoot = MIMEMultipart('related')
    5 c8 P  ]7 N9 k$ [1 \  J! B msgRoot.preamble = 'This is a multi-part message in MIME format.'2 w, d' Y+ L7 B. X

    & `1 f# r7 F1 ?0 W  p5 W msgAlternative = MIMEMultipart('alternative')( O; p- N$ ^0 @7 s' U4 z; O# ~8 }
    msgRoot.attach(msgAlternative); _9 t  ]( y5 [% v3 J$ v

    - V5 ?. c2 r5 F3 W6 j  f # 邮件对象 1 a3 ]; k" v) {- L6 j2 }
    msgText = MIMEText(html_text, 'html', 'utf-8')
    ' V5 c" |' E% ~$ ? msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化8 e; s* }1 ?% @# r6 Z0 S7 T! z
    msgRoot['From'] = strFrom  # 发件人也是被格式化过的4 _2 n4 T( Y- }: f1 s# S5 U+ T' \
    msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”* W  {- T5 n' _6 x+ Y7 N* L( @
    msgAlternative.attach(msgText)
    ! Z! W- Z8 c' N) a
    " }$ e) a# p- H0 J$ t) {4 Q' u$ H smtp = smtplib.SMTP(SERVER, 11)% d7 h/ i/ m6 d$ F( \# Y; B. Z5 b1 G
    smtp.set_debuglevel(0)
    / ]/ o2 w+ E" w0 ~* A) T' n # smtp.connect(SERVER)
    8 c4 a- f( }$ J0 n- A) X2 r smtp.login(USER, PASSWD)
    $ z2 ]# l. S; k$ ]' k8 E0 z # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别9 S% G1 k$ s9 a% ~9 d0 J  G
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    * A4 q* m& f+ n) f smtp.quit()$ _7 ~! Z. D# k0 [. q
    总结:$ S" M& @' `, e0 B1 @6 N% Q3 u
    0 _! `  q" E# S, Q
    看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo, S' v  Y" v7 U- f, _4 U
    . _* e' n1 D$ q+ S
    实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”
    8 m; F1 ^# l0 e" K9 d: u" Y
    , e7 n3 L  x$ l/ A8 B% C' M同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    ! }8 O" ^2 H6 Q# h" [
    + P' j2 @8 {6 ]/ @  n还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。1 a  d# D5 t6 D5 o0 @
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得, P& R0 x7 T: @/ o" Z

    % W' x+ |7 k: L: {' b2 f  k,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员
    / u$ A5 m; y  u9 Q) b7 E6 x' Q6 s: k$ `( J" Z8 T
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节% \) q! v. @% c/ Y: R: E
    ————————————————2 p9 j, o! j/ t, B) t0 K
    原文链接:https://blog.csdn.net/haoxun12/article/details/105162947
    - }# ?$ C- a% P/ I
    : ^# l" j1 y3 J+ \# W5 r5 m2 r* |8 L, f( X( J7 n, ~! S4 Q8 f
    5 k' F, J2 f( C2 {! `$ y
    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, 2025-8-19 03:34 , Processed in 0.599918 second(s), 60 queries .

    回顶部