QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6081|回复: 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& ]9 R) t$ s8 o; z* }
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    7 ^9 s) C% a7 v. |+ Z背景:
    3 ^" D9 k# ?0 _" O* S$ b% [8 B# I  A* Z; t7 P
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    - t) |" a0 c6 |  A' M
    : ]) |+ G+ u2 q& G1 v问题:5 F+ _, I2 ?* x) ^* \' q
    0 ]5 I: f; q* U) B
    使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容! w% q. J& Q  M3 M3 {& z
    * Y4 Z; b/ `- z$ e* G
    问题代码示例:
    . f6 K8 h' z6 }; ~5 ^* ~# -*- coding:utf-8 -*-1 E9 I  U: n# f  J
    import smtplib
    # a% y1 s, F! H. b  Vfrom email.mime.multipart import MIMEMultipart* L3 H) y$ O/ h! F& D( f; r
    from email.mime.text import MIMEText
    7 L* _6 L- o' s, q4 F( }7 K/ Z% f* _5 J" o4 i$ `; q1 o9 P
    def send_email_to(fromAdd, toAdd, subject, html_text, filename):8 P  ]; O1 U" H# @) [& o' [7 Q
    server = 'mail.****.com') U$ P9 L) V7 z) t- C- {2 h
    user = '*****') [2 J% }) i; W5 P0 F" Q
    password = '********'1 p' w0 |* |& |# F! M. ^
    , _5 b. i8 P7 R/ j8 e$ D& x
    strFrom = fromAdd
    5 y+ G5 z8 o" U. `, H strTo = toAdd. @0 f. m5 g  Z' E0 X1 A

    4 r# H9 }/ u) S- S- d( K msgRoot = MIMEMultipart('related')
    ( r) Z- p& X- w" D8 i, N- q msgRoot['Subject'] = subject/ j9 `; |6 g2 P- }7 s
    msgRoot.preamble = 'This is a multi-part message in MIME format.'
    * V) b! a, \$ [% N+ q1 R$ b, A+ ]2 l" x9 x) s) \- b: O
    msgAlternative = MIMEMultipart('alternative')
    ! a% X! e9 p9 q8 F" m msgRoot.attach(msgAlternative)
    # i/ ]( V. A; N; b2 D8 h9 g
    . R4 P% c& q4 z* t, g msgText = MIMEText(html_text, 'html', 'utf-8')/ Q( j' d& c- [9 t
    msgAlternative.attach(msgText)% Z: w+ {) Z7 q0 ~8 K; O, S  o

    - N6 w; @: V0 g smtp = smtplib.SMTP()7 ^. L4 S- I, \# o
    smtp.connect(server)( t4 S0 d) E/ E: ^$ d9 Y, U: e
    smtp.login(user, passwd)% B7 z% D8 d* K( J/ j% n

    2 C( B* S$ F, z8 z0 D att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
    , C  s( |8 s3 E( g# @$ u: {( z att5["Content-Type"] = 'application/octet-stream'
    2 b. T; [5 Q) y  Q7 h att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'6 a  ], y0 \1 q0 f" K$ o  e
    msgRoot.attach(att5)& `* @8 z, H) o& T/ z

    5 A0 h7 E4 W  Z" ], | smtp.sendmail(strFrom, strTo, msgRoot.as_string())
    % y. ^$ h7 R% i4 ~8 I smtp.quit()  O4 ?+ O5 Z. n/ Q
    return
      d& m% U# b& ~1 K' x9 B0 \3 F4 E) z- z# V$ X) W3 M

    ) ^" t8 J- S1 h) ~9 z* ^5 g0 h成功代码:4 M2 ]( u6 Y  c# ]# t" |, d  c$ K
    #!/usr/bin/env python
    5 `, M/ s- E. {! b0 A+ l3 ~  ?# -*- coding: utf-8 -*-( t4 \# f" `7 ]) b3 c- O" K' ]! L/ k

    ! S9 i) m5 O) w& {" N$ c' Ximport smtplib- y- g5 H6 p; Y0 E* l
    from email.mime.multipart import MIMEMultipart, j$ f( L3 A6 ?2 N+ d
    from email.mime.text import MIMEText
    7 E% p' ]' t* Qfrom email.utils import parseaddr
    ) h$ a+ U3 d5 q) D, \0 H" ?2 _from email.utils import formataddr0 g" Z3 s6 @" {  }
    from email.header import Header
    / u! p/ ^0 N8 I3 Z- H: S" k8 I' g: H% }" V* b/ ^4 b

    8 D% n: x. ~; X/ X( }' Bdef __format_addr__(addr):( ], E2 ?  G( X
    # 解析邮件地址,以保证邮有别名可以显示
    0 E. i9 b1 U7 D( b2 N3 J, j alias_name, addr = parseaddr(addr)5 e) H' e9 L* O
    # 防止中文问题,进行转码处理,并格式化为str返回( A- i$ ~7 d' e1 t
    return formataddr((Header(alias_name,charset="utf-8").encode(),
    ( M8 |, Y' k5 [5 x, }5 z: X1 j      addr.encode("uft-8") if isinstance(addr, unicode) else addr))0 m- Q: d, K, W- A! a
    $ N% [4 C% a  W8 y3 V* N. V

    - A" R4 j: u/ ^8 w$ q7 Fdef send_email_to(fromAdd, toAdd, subject, html_text, filename=None):+ o, {% A5 g; p4 |
    / O5 [6 {6 p% t7 E+ y
    SERVER = 'mail.***.com'
    % j$ q1 {, ]2 o+ Q6 ^ USER = '******'
    7 s% G, L" c2 e PASSWD = '***'! `, E& C) }; [! Z

    0 Z. a) V0 {) n6 \% O- Q strFrom = __format_addr(fromAdd)
    ' M& p9 e- z1 W$ o' P
    & q+ b& ]. {, T& [! ? strTo = list()1 c$ p9 P0 c* _( O. O0 i. X
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化
    $ w0 C2 r! `1 a+ |/ b! N3 r try:
      m; I' K: j' @. f. N# m3 |/ I  for a in toAdd:
    9 Q3 R( `( h% \) D2 O   strTo.append(__format_addr(a))' o' k2 ~' w/ \" A  J' B
    except Exception as e:
    8 \2 |4 l8 O/ ]0 G0 j/ s- ^0 u) ]/ \4 _  # 没有对a和toadd进行type判断,出错就直接还原7 }- {) l% Y7 c' M, J
      strTo = toAdd7 q8 _2 N& q2 B0 ]
    0 s& A8 G7 H/ N2 o
    msgRoot = MIMEMultipart('related')
    - C- ]7 k' }2 B1 w msgRoot.preamble = 'This is a multi-part message in MIME format.'
    : m4 b: a, I! I7 Y1 X. R) b% O& b, g4 y: Y
    msgAlternative = MIMEMultipart('alternative')# s$ N4 w% y7 J# w0 o
    msgRoot.attach(msgAlternative)
    * }+ T9 ]- T4 V- l9 p- \( O, e/ F" E1 i  a0 n
    # 邮件对象
      h" u, r) }9 i' J8 B msgText = MIMEText(html_text, 'html', 'utf-8')3 j3 v6 z1 Z6 K" Q3 Y
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化- k3 J4 M' |/ t+ m: ?& Z
    msgRoot['From'] = strFrom  # 发件人也是被格式化过的  Y1 E) F: z" P" t! w. ~+ R
    msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”  U) x* C+ k0 u% y
    msgAlternative.attach(msgText)
    1 Z$ s0 `7 y# S8 a; E6 J2 a" r) J- X7 p4 y
    smtp = smtplib.SMTP(SERVER, 11)& G7 K. P: c1 w) _
    smtp.set_debuglevel(0)
    6 h8 E  v* K; v' R5 c/ J7 _; L # smtp.connect(SERVER)# t2 J5 k& s+ `$ I
    smtp.login(USER, PASSWD)
    + h. W8 ?) H- g # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别
    3 h' v1 M( g0 S  y9 F2 f smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    * l% `) I8 N% o  v0 r. j' I' ? smtp.quit()  ]# S! N" q4 R. T- R8 ?
    总结:
    8 P% B2 d$ H8 W0 l& N1 t
    6 s& A6 }2 L, Q, J) x看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    5 V: C# C, }) k8 }2 W& {
    ! q2 H# K9 W, I4 z3 r: Z7 V实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”4 Y/ ^+ }9 t* j9 Q' `- U- K
    % s% ~3 b6 W; p- D; Y" _3 ?
    同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    : z. u7 F9 ?+ ?# {4 r' e8 e. F
    7 Q, \8 ~, V, c还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。" u, D0 g( x2 [' B& P: x: B$ k
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    9 Z  k$ d9 ^2 g
    4 ?/ s; W( E# P( J) ^5 Q; t,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员
    4 L+ f% Z& d1 S/ n( }0 r$ k2 {
    ; L5 ]- _( G) U; P8 C% B定时讲解Python技术,分享一些学习的方法和需要留意的小细节
    ' B$ \8 x1 {' _4 t1 p————————————————* ~7 h$ R* B2 H, N2 N
    原文链接:https://blog.csdn.net/haoxun12/article/details/1051629479 h  S. k+ P5 H& E/ C

    0 ?% y# }- N0 L, e5 Z5 w* T! g: y# o4 q7 q, b3 [* x9 ~; b, ~

    6 n! |- R- a& ^
    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-6-3 01:45 , Processed in 0.342693 second(s), 61 queries .

    回顶部