QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6135|回复: 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发送多人邮件没有展示收件人问题的解决方法* n8 x; f& @8 s. P- f+ h& n: h& n
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2 H- p0 f. T1 j3 k, E
    背景:
    $ I& x# N) ~2 ^/ s
    5 r! c7 {0 H! M' L工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    % E. m( x) R( x# A, }/ Z/ M" z( v3 G+ o
    问题:
    5 ^9 E2 d  }* m6 ]2 @
    & i, s6 o3 D: A* D2 t6 E使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    1 e/ j5 F0 M8 f% p) A4 P4 s2 {9 R! ~& [* y% @3 R
    问题代码示例:
    * E6 ~$ }/ \5 R1 P! @& D. |# -*- coding:utf-8 -*-' ?) }( }3 X- ?. u, M$ n
    import smtplib" B# k* [& d" }9 x3 r2 c3 }
    from email.mime.multipart import MIMEMultipart
    * k7 a; H; [6 |! r, lfrom email.mime.text import MIMEText7 m% J5 K- r1 O, I

    " {9 \: W1 O( F% g: P: Z) Kdef send_email_to(fromAdd, toAdd, subject, html_text, filename):/ R: s* ~+ G3 n0 }; H; l
    server = 'mail.****.com'% I+ H+ I7 a' J0 E! ?. e& f* w
    user = '*****'8 _0 I) X0 w' ~9 N3 j
    password = '********'
    6 h5 t7 U7 j' W
    * O% G9 [5 \; D; {' M# I* A7 u strFrom = fromAdd
    ! m1 B3 @! t2 g& w0 H4 G* |5 o strTo = toAdd
    - y4 ^  _$ D4 W1 N
    / T" b. r: w/ @8 v  k: X8 o  z msgRoot = MIMEMultipart('related')
    2 P8 E7 H5 V6 O2 z$ }! i msgRoot['Subject'] = subject
    . Y% m  F: ~/ b# B2 p, f" `) W' \# G msgRoot.preamble = 'This is a multi-part message in MIME format.'
    ' L9 j1 p7 ^, ~6 |/ w
    / M6 T$ T. _$ `" v msgAlternative = MIMEMultipart('alternative')
    : T* v2 g% X0 T+ z2 h. T# h msgRoot.attach(msgAlternative)7 q" m/ L! u/ _

    " g+ M8 r0 ?( n msgText = MIMEText(html_text, 'html', 'utf-8')2 d* g( V: Y  D
    msgAlternative.attach(msgText)
    ! x6 P/ e: B/ e) C# Z9 V' p2 Z( @5 ^3 a" O: P
    smtp = smtplib.SMTP()
    $ s8 ?1 f* P# l5 c# I' `9 y smtp.connect(server)4 Q. A- x8 J( @' `
    smtp.login(user, passwd)
    0 S5 P& w) D2 p; M; D( T$ k3 U$ A$ {
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')" j7 P. b0 t0 d, _( S6 B
    att5["Content-Type"] = 'application/octet-stream'! U' n/ ~8 Q* E/ x! o# Q
    att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'
    7 V) _" B0 o$ U0 j% D msgRoot.attach(att5)7 x2 n$ t/ ~5 [/ Z, R) X
    # }9 A( Q$ m9 ?
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())
    & B; \, a3 @  o( k smtp.quit()4 o- E, M9 w0 F+ `
    return
    5 K, r+ e8 t4 w6 V5 y, \! R: f. B: ^& N/ _4 O- B
    ! i& S! k: E' P* {! Z* q0 s( T
    成功代码:. M0 d3 B% t6 K4 L/ d1 I8 s( V
    #!/usr/bin/env python, q; k5 B) v( m
    # -*- coding: utf-8 -*-7 c2 ?8 K. \( }5 w% m$ A0 n2 e
    4 B. p% i/ N/ h+ c$ L( ?
    import smtplib! f0 l. a4 a$ m  v6 Q  g
    from email.mime.multipart import MIMEMultipart; }/ G1 u  X0 o" \" ?- q. z6 r% H
    from email.mime.text import MIMEText8 c: e# Y) N* S5 ]7 q
    from email.utils import parseaddr6 p  e7 S3 x& Q6 W0 G/ B; C
    from email.utils import formataddr
    ; p9 u2 Q3 L- Q$ wfrom email.header import Header; O3 a4 G/ s! ?, @2 _( s  Z- o8 h

    6 C; g: O# u5 Z  n2 M7 _+ `+ \3 L7 U3 d
    def __format_addr__(addr):
    " j2 a8 v0 F; S& u! i # 解析邮件地址,以保证邮有别名可以显示" e8 X0 X( `4 o, d
    alias_name, addr = parseaddr(addr)$ C  [8 |" v. ]1 f+ I
    # 防止中文问题,进行转码处理,并格式化为str返回
    ) J9 g* ], R# M3 ~% |! \ return formataddr((Header(alias_name,charset="utf-8").encode(),6 x3 ^  H6 A5 b
          addr.encode("uft-8") if isinstance(addr, unicode) else addr)); |) h0 j' L. ]: O
    . T* {4 l- f" A1 q( d

    + g' e% r% J9 ~9 ^! i% [def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    9 A( t7 J: v$ {0 h1 V1 u- a. k0 x& M' ?' ?: k
    SERVER = 'mail.***.com'
    4 X" X* _8 ^: Y; {) R8 ?: ^7 o USER = '******'
    1 H8 L1 D* d4 n& c( v PASSWD = '***'
    0 g& W# @0 R, }" K) l. B: @6 @9 u0 e
    strFrom = __format_addr(fromAdd)
    2 F; T* A5 z6 B/ q+ ^6 {# M; T9 Z1 P& C9 F& i
    strTo = list()
    4 k: Z! w9 E+ F; s # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化% A6 V) e2 `  F6 W
    try:# t1 L* D' R4 d
      for a in toAdd:3 D: Y; g  Z# j6 E& d! b
       strTo.append(__format_addr(a))
    7 U4 Q/ Y/ ~1 @! V+ a except Exception as e:( k8 ]* A5 L. ^( `4 K2 U/ P
      # 没有对a和toadd进行type判断,出错就直接还原
    " d5 {; ^: d1 V2 y7 |- g# w( B  strTo = toAdd
    % \7 L  w0 \2 X9 b3 |" k$ I
      i- l, |1 G, b5 _* P msgRoot = MIMEMultipart('related')3 t( n5 i4 `4 t, V4 q, |: ^
    msgRoot.preamble = 'This is a multi-part message in MIME format.'1 z% C/ N) m1 Y  U$ }3 u' @

    4 d+ m( ~& W# o: e" F0 B msgAlternative = MIMEMultipart('alternative')
    1 j' n8 U; ~$ {3 v% O msgRoot.attach(msgAlternative)3 x0 U6 n8 _/ H2 {* Z, M' k

    * o8 C& l8 C* d6 @$ s3 N # 邮件对象 8 f6 `! d& Z: V# t. a' F6 P8 r
    msgText = MIMEText(html_text, 'html', 'utf-8')9 g9 D" j. w* R3 @: @- m
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    , {1 v- L$ ~7 H2 V% ?" d+ P msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    ' h) m* I( u% a; A4 s' M/ J msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”# b  ^6 Z& B$ S; V: b) [
    msgAlternative.attach(msgText)
    : o; C5 W* i/ @5 Z  k/ q7 _* v2 Y
    8 w3 Y/ s1 d4 m4 o; |) |5 f% B# D: Z smtp = smtplib.SMTP(SERVER, 11)
    4 g: s' R9 W) @5 e0 w8 j. X3 V' ~ smtp.set_debuglevel(0)% V$ z% o) h6 \# ^; \' @! e
    # smtp.connect(SERVER)
    * P( i# N) q. @! o! | smtp.login(USER, PASSWD)
    4 E* W. A' y5 P% j7 ?/ T. | # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别
    , A; `. {/ {5 v7 @5 I! [1 D& T; C smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    , x3 b2 G4 p8 R* R3 g/ F smtp.quit()' e) C. M$ k0 z) Y5 h) {
    总结:7 Q" [8 x, Y! V* Z: }& T2 C0 B0 A
    + c; h  d4 R& }2 u
    看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo9 F) R; N$ s- T7 R: }  B

    5 X5 Z7 E( N4 h8 J. C实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”  P  u* i- M- Q4 `; n9 A
    3 y' [7 d6 ?: Y( o9 K, P
    同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    3 L) e  j6 ?3 L8 j* Z# B
    3 K2 w8 b- s6 ~还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。
    # b  a6 Z( i: M' d7 r  X最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    ) X/ K+ M; C4 Y1 j$ A/ d% `
    1 W6 ?9 d0 ^' V' W" Z6 g1 q,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员/ ?5 h8 F+ Z6 y" z/ R/ o6 ^. K

    1 u+ v# b$ r8 Y0 d# b/ c2 k定时讲解Python技术,分享一些学习的方法和需要留意的小细节
    / {5 g& B* n2 j# R————————————————0 g' n: w+ W' p  o7 ~
    原文链接:https://blog.csdn.net/haoxun12/article/details/1051629473 I" S! [9 m, U
    / g! P. V6 y3 G% E

    7 n4 P& Q8 @' q* C. T/ \  y' g% [2 R4 u5 N7 d+ |. f, ?. g4 B
    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-9-1 14:26 , Processed in 0.308466 second(s), 60 queries .

    回顶部