QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5395|回复: 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发送多人邮件没有展示收件人问题的解决方法
    ( {+ I. x3 y3 H2 b这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下; o# ?* q5 o% N0 E0 ^% F* B* z& \
    背景:/ Q' U4 W: v% j7 B
    $ F7 M) J- Y  Y/ p6 d  O! C
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    * T" X5 O, r2 g/ {  Z" C
    / X/ n1 ^  ~. z* e问题:
    * d7 k4 o- |& q
    $ g/ \" b$ a+ W! O, h使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容4 y+ U, y) }0 S: I8 \
    " g/ ?4 I  l1 @( d  t
    问题代码示例:
    3 l# W! t& I6 @; S4 t# -*- coding:utf-8 -*-6 ~) ~/ B' K& U( O
    import smtplib
    / o" p* ?3 B+ q" Q9 M7 gfrom email.mime.multipart import MIMEMultipart7 Q# L; B0 Q+ W2 o6 J
    from email.mime.text import MIMEText1 [* }" f' R% r( V2 E$ R" c
    7 f0 f6 j2 |1 k( ^- G# I/ Z$ t
    def send_email_to(fromAdd, toAdd, subject, html_text, filename):
    3 P# n& o  {1 |2 J" W) ~) j server = 'mail.****.com'
    $ l, n: B* t/ f. L" O user = '*****'2 A; m4 {0 W/ ~  ?) [
    password = '********'4 u; }7 a5 m5 Z
    ) u3 J+ F! S8 f2 Q8 S+ X) H
    strFrom = fromAdd* l, X+ J& y% M) u( }) ^# u
    strTo = toAdd, W: t" e2 u# O" @

    9 B; P# F2 ?7 l+ h msgRoot = MIMEMultipart('related'): |. x+ n) U( V! s8 ]
    msgRoot['Subject'] = subject/ Z  g( S  W7 s* i' S1 j
    msgRoot.preamble = 'This is a multi-part message in MIME format.'8 G2 E0 `5 m! q6 k1 Z$ Z' v5 q

    3 J6 ~/ K1 p* S& K+ F+ {( [2 o msgAlternative = MIMEMultipart('alternative')
    8 W$ u3 H$ \& l# E msgRoot.attach(msgAlternative)5 a+ I8 F* \( Q

    2 b& P* f2 k- }! v* _' ^ msgText = MIMEText(html_text, 'html', 'utf-8')
    ! }8 n6 l& A) W- R% C" y: l' h msgAlternative.attach(msgText)
    $ M' s: h4 {! \7 J. _) Z7 e
    ; c. q* E4 i: b7 w8 _+ ] smtp = smtplib.SMTP()
    " u# |  Y& w% @2 B smtp.connect(server); e* a5 x& t* n, O+ o) I- ?" k
    smtp.login(user, passwd)0 @2 c- O; M% Z' V
    # T+ S8 g0 Z+ F' p6 `" L
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')* r$ \5 S: J( l+ P
    att5["Content-Type"] = 'application/octet-stream'
      }( w) A( ^9 X% H9 i6 y att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'
    % R/ _2 x' P  v- } msgRoot.attach(att5)
    " T& G9 k! k! _# G3 C3 G% f; j$ j' V( r% D
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())( x- t6 d& D; I* Y1 s
    smtp.quit()" h0 v# K9 T# I9 W: m' ^8 b
    return
    - ~4 X) n0 I4 [$ N$ e# k/ y
    & v' U: b) n7 G4 C" E8 ~( k* N
    " K3 d$ O7 H" a) H9 M( [- ^成功代码:& i& y6 D9 C4 @5 t
    #!/usr/bin/env python" `- c' h4 F4 m3 d6 T, ?# V
    # -*- coding: utf-8 -*-6 B+ W. y! n* {, W) h
    , X$ Y5 v" t9 Z( f* B3 ^
    import smtplib
    ; ~: K) g+ K' ?- U7 Efrom email.mime.multipart import MIMEMultipart
    $ k$ _( Z9 D; e5 r" t& f+ M, |from email.mime.text import MIMEText
    % B- D3 P. @. {; [. d' dfrom email.utils import parseaddr: I. o# z( G+ m7 \
    from email.utils import formataddr
    4 O2 r4 d# Y5 D% G$ Gfrom email.header import Header. a) A* y- W) [- @' _) l
    - r6 }+ t* v1 a
    $ A9 ?5 M. G, ?) }
    def __format_addr__(addr):
    + V/ m/ H7 N- r( f3 P4 H # 解析邮件地址,以保证邮有别名可以显示' a$ C& @2 C9 G. H  l; }, e9 e
    alias_name, addr = parseaddr(addr)1 k  h/ G, ^+ N5 k7 _1 k  w
    # 防止中文问题,进行转码处理,并格式化为str返回( i* ^$ i& S$ ~
    return formataddr((Header(alias_name,charset="utf-8").encode(),
    ) Y2 \. \! y: ^5 i8 v      addr.encode("uft-8") if isinstance(addr, unicode) else addr))- [% f7 L& f4 H) Q$ c" V

    , L3 ~. z: G' D( n  K7 K8 J5 E# J# g1 g( `
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):1 N9 _- }/ q6 s/ P: i

    # o' Y' q, c2 q1 H SERVER = 'mail.***.com'  m4 l, E+ M" @: H
    USER = '******'" k" f0 ]$ P/ _6 u, ^8 m8 K) ^* I
    PASSWD = '***'/ I: `" A! [8 H' E
      W1 a) a! o) p8 X. L' ]
    strFrom = __format_addr(fromAdd)
    5 ]7 D  }4 I' s8 L# f
    % D- o2 S  E/ m2 \' a; Q strTo = list(): P$ x( _/ }, Z+ E# |
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化" u5 G/ G* N) k+ T; T! F% b" f
    try:
    - ?% p3 ]  d0 C  F% ]: I% u7 h) e- s$ s  for a in toAdd:
    + J/ I8 n/ d7 @! q6 B3 |: [% m. f   strTo.append(__format_addr(a))
    ! f" k8 a- a# U  E, b  k except Exception as e:
    : I/ W7 P+ P4 S( I8 B" ~3 {+ Z  # 没有对a和toadd进行type判断,出错就直接还原4 m, E4 ]6 }$ N8 w. u! r+ J, y
      strTo = toAdd
    & d0 o$ S+ ]9 K" {- K0 ?' y4 [; h/ A9 n! ^! [' Q( p. c& Y
    msgRoot = MIMEMultipart('related')
    . y' Y( [& @6 k: ?" s6 H3 V msgRoot.preamble = 'This is a multi-part message in MIME format.'/ [3 G* N3 I9 q5 G; J

    1 M7 q1 t9 ]9 ^8 z$ X6 i msgAlternative = MIMEMultipart('alternative')
    8 e' c6 u8 d" M. i" h. o2 h) D msgRoot.attach(msgAlternative): R8 w6 P7 V8 B3 x

    9 P* n; Y) w7 Q9 @ # 邮件对象
    # T; B: @5 C! O( v! t msgText = MIMEText(html_text, 'html', 'utf-8')
      O$ d1 v# ?$ d2 T msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    9 y3 c9 w0 s* X4 p( U msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    , C( L- U5 T$ B9 i  g6 ~: } msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”# F% y% j% W% `7 ?' Y  i
    msgAlternative.attach(msgText)
      m- ]6 W; r# W3 t' p
    # g, O& o, n( m4 I smtp = smtplib.SMTP(SERVER, 11)
    ! C3 c5 ?7 Z& S smtp.set_debuglevel(0)
    / h# n# \# o& s- J2 Y # smtp.connect(SERVER)
    ( N" }1 }; f# w+ P$ K! ?  q smtp.login(USER, PASSWD)+ R2 l% g9 ]" \
    # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别! A. T: I4 c0 j7 {9 j0 E! A
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())0 e1 t# N1 Q+ s6 u% q& ^  G
    smtp.quit()
    5 q3 w1 K( Y8 Y, Z1 O8 ~0 A总结:
    9 a% f2 [7 }- x% _8 j
    6 D; o+ E, h: f$ h' ~# `* ~% }看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    ( G. [% B0 `0 d2 h' Z
    ! D7 L) o0 a% O实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”
    4 `9 y) }4 Q+ D9 y6 b9 R5 u* j" u# x1 q- J4 q6 K) g; {* R4 t- B# ^  `
    同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    / H* Z" L0 u* l4 U1 ]
    , y8 A" V/ c1 Y0 R. b& Y1 c还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。$ z1 e. m( ], o1 j) t
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    9 V3 Q  I5 n4 B1 }1 n: d6 b9 P6 O- q6 }2 D( d! k! W
    ,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员6 O' I- A- F* {3 ?* a) W
    ' Q( [  x* o6 g( e1 Q1 V
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节
    : d, {! z1 ]; K- u# u————————————————
    & ~( W3 r7 O  f: U; t原文链接:https://blog.csdn.net/haoxun12/article/details/105162947
    , l7 i; K6 i" X/ w! }
    7 Z- a9 P( P4 x# J0 E
    ' y$ N! g0 ~# z/ G5 H9 e5 x: Q: ~( O8 I) y3 S0 U( R/ [" `7 i
    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 21:40 , Processed in 0.531270 second(s), 60 queries .

    回顶部