QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6143|回复: 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发送多人邮件没有展示收件人问题的解决方法+ H5 R# U0 _; y8 e( a
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    5 g8 v% n; O( n背景:
    $ j  W: u/ \- K0 m) n" ]/ h9 E# G9 L* K) t2 j' X; R7 Y
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    & U$ \* n0 x8 Q# F2 Q$ U% N# K+ _) L5 a9 A1 t
    问题:3 B/ n* Y% o5 O$ W

    7 ]0 {3 J$ V" ~5 a: W: }使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    * H+ V) ]$ m% v5 Q. U0 ^, F" F* _4 _' L" X
    问题代码示例:  C! l$ [1 W; d: d! {4 ~4 ^* J1 a" ]  N
    # -*- coding:utf-8 -*-) l3 O: u# B% L; l
    import smtplib
    . @+ `3 c: B  G- D; `9 P* Hfrom email.mime.multipart import MIMEMultipart
    $ f# m6 m& k/ h1 {+ F+ Y$ O& xfrom email.mime.text import MIMEText# X+ S* V5 Q) K

    7 P3 Q  j6 x, |5 k3 n$ Ndef send_email_to(fromAdd, toAdd, subject, html_text, filename):
    ' O- Q# U+ q. ^. `0 G& g7 \8 s server = 'mail.****.com'
    $ Y' o% c; a# Q user = '*****'7 r1 q7 b4 A* ]$ s3 w# |' M$ z3 P
    password = '********'
    5 Y% b8 d: E5 O/ y1 h
    6 C% q# C. g- s" p strFrom = fromAdd6 G' X- {1 P/ z) }
    strTo = toAdd% O$ i5 W% E1 j, s2 \

    5 F8 ]3 ?% x; e+ h msgRoot = MIMEMultipart('related')
    - l; T3 J7 G! v  Z; ]6 s msgRoot['Subject'] = subject- C, c6 O5 r' ?1 [" Q8 B
    msgRoot.preamble = 'This is a multi-part message in MIME format.'
    - |7 L4 u& M  \4 m* ^3 ~- O& T" K! x  M* o# d1 H
    msgAlternative = MIMEMultipart('alternative')
    % n+ m9 ~0 Z' b5 p6 ]# j  K0 i msgRoot.attach(msgAlternative)/ N. `6 L: S+ |. p3 P4 D# N

    8 Y  j' g( {6 f. V msgText = MIMEText(html_text, 'html', 'utf-8')# y+ d: I0 D6 s5 [1 P
    msgAlternative.attach(msgText)4 V" d1 h* R/ J1 [, w" D1 H
    3 c! J  K/ N$ m
    smtp = smtplib.SMTP()
    / L1 x8 t# f' {3 z: o( d; T( i smtp.connect(server)
    . ^9 N# {/ J! t7 Q; v smtp.login(user, passwd)
    ! k+ o0 H7 x+ i: ]! z. d0 i7 \. B3 n
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
    . H  M: M0 K& c3 n4 i att5["Content-Type"] = 'application/octet-stream'
    , B4 j5 i7 E) l' P7 B/ r att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"') a7 Z& P" |# m. ]
    msgRoot.attach(att5)
    % G) h4 L: n" E+ `8 m; h# F0 ~& E+ H7 ^  U: C! s5 B) i9 d
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())2 X5 _( O/ O& i9 Z3 {. N
    smtp.quit()3 d9 Z" z3 s* m3 D' b3 ]% O
    return& n# v& W' ?# ~5 J- @

    0 A( w( \8 n9 r
    9 g4 p9 W2 Q5 u- `: x3 w成功代码:
      s- X3 Y1 |. \8 G( G#!/usr/bin/env python$ b: t% u3 w& ~
    # -*- coding: utf-8 -*-
    ' f* Y9 u! w. b' m% {" k6 h+ n" F6 L- G0 N$ c* i* s
    import smtplib
    . J+ D/ y4 V5 X0 ~" C9 O2 Sfrom email.mime.multipart import MIMEMultipart
    9 x$ Z3 {& c2 `9 C# l% Nfrom email.mime.text import MIMEText& C( p5 ?! l7 Q: S0 y( h
    from email.utils import parseaddr! t5 f; Q' X: Z$ H
    from email.utils import formataddr
    . n6 `0 ~' \7 L6 G0 j6 Hfrom email.header import Header
      `# b. ]( p1 |2 O. |$ c+ a% F' o3 w
    ; a! n9 U- f( g4 D5 ]: ~+ D! B
    def __format_addr__(addr):+ {+ a/ ~6 S8 X" `' a
    # 解析邮件地址,以保证邮有别名可以显示
    ) a2 w- `0 q' \. U) }0 y- W# @ alias_name, addr = parseaddr(addr)
    8 m# D4 R; @9 d$ r- t # 防止中文问题,进行转码处理,并格式化为str返回% b/ h3 P. `# X; R
    return formataddr((Header(alias_name,charset="utf-8").encode(),/ v" ?7 b7 d/ k
          addr.encode("uft-8") if isinstance(addr, unicode) else addr))8 w$ r0 [% O9 y  @# v

    ! P9 {+ Q( J( t2 A; d8 P  ]! f( h7 d/ }& ]
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    2 p4 t' a2 u" g* z4 W! D! C) w  i% C$ ]8 `6 S# y$ t
    SERVER = 'mail.***.com'
    " q6 T  q8 O) [( u! @: s USER = '******'
    & }0 t" Q1 ^2 [- M/ N& O/ f; q' \ PASSWD = '***'- R+ s) u8 B7 c' [  v: S

    - k; n0 O0 A8 W strFrom = __format_addr(fromAdd)0 A- k, \/ f, O0 E
    6 |2 |2 g  T$ _$ e6 c
    strTo = list()
    + Z- o6 T5 ^  H" O$ h # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化
    & e3 u- X5 j, c- P* S6 H+ Q try:" M6 _& L4 `' T3 E! U, c, g' f
      for a in toAdd:8 o( _/ T4 r* s+ p2 |: \6 E5 K6 Z% a
       strTo.append(__format_addr(a))( @/ f7 y+ N' b3 g" g
    except Exception as e:
      ]0 ~' p9 E0 L& T  # 没有对a和toadd进行type判断,出错就直接还原
    3 o6 b0 I" T% {* e! I  strTo = toAdd
    ' U9 w# ~) P  f$ G4 W0 v! O  j& |! t/ O6 y4 X
    msgRoot = MIMEMultipart('related')
    6 s- d6 _- Y  r4 ` msgRoot.preamble = 'This is a multi-part message in MIME format.'( u3 \6 L: t" V$ n4 k' h

    8 I0 t# }/ f1 O" S' i, q msgAlternative = MIMEMultipart('alternative')
    1 s' b# D; x! C6 N( Y2 Y: q msgRoot.attach(msgAlternative)
    ) e+ X8 ~+ l- v! p' y
    # @* W7 `4 u7 p+ G  }$ a" P # 邮件对象 " }% b% {/ k, D' ^. @) B
    msgText = MIMEText(html_text, 'html', 'utf-8')
    ' r# }# \3 F% X* @8 E) ^% e msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化; \0 n' w5 K- M$ Z& h( J
    msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    ; l7 ]* w1 N* _& M2 `7 w8 G msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”% m. V& E+ E1 ?/ y. e: Y$ a
    msgAlternative.attach(msgText)1 L% T, {. v' H  r& C
    2 m+ g2 C* {  [; P
    smtp = smtplib.SMTP(SERVER, 11)7 o+ ~- x8 M  ^
    smtp.set_debuglevel(0)
    + {( q9 J# _/ ~" l # smtp.connect(SERVER)6 i* o/ w1 `  ~9 q& `2 h9 a; P
    smtp.login(USER, PASSWD)2 j- B1 u/ f9 p
    # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别, _' x( Z% |. l% X+ W
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())" ^, z- O/ L( |2 o! c8 e9 W
    smtp.quit()" E+ H0 K. F* ~/ N
    总结:
    $ }- K% K. Z# B; w9 ^
    4 E+ C: l$ Y# i& L6 ?* G看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo, i" j4 s! P' {& w1 q" O

    0 e6 y% T: H5 t% j: k3 K实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”7 P% |# L- a8 @# C+ n, \" w

    7 ?4 u  R2 k! a; b# I3 D1 N同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
      U! W/ ^% A( f. U# z$ A5 c; ~" G; A3 T: _
    还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。# ^8 i1 E3 ?/ t: ?
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得6 O1 F5 T; N5 J2 g0 N
    + O9 W. k- t1 {& r" `/ H
    ,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员
    ) ?& b$ `' ~5 d% j* A# b3 r1 A
    % B* _% Q2 _3 X! ^定时讲解Python技术,分享一些学习的方法和需要留意的小细节# j6 _# [* p6 j) t
    ————————————————. r( r0 [- L& V1 g; s* ~& R
    原文链接:https://blog.csdn.net/haoxun12/article/details/105162947, y2 K/ f+ \6 ]! ]
    2 O; Q7 \/ v  a7 c' I0 {: g, _: P

    ; W  n$ }1 j& R) @6 W$ ~
    6 r. K- d* ^# J5 U2 u
    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-2 21:38 , Processed in 0.496428 second(s), 61 queries .

    回顶部