QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6145|回复: 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发送多人邮件没有展示收件人问题的解决方法9 Y' W* E3 Q* X) Y( O+ r' q; O' J4 c
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    0 K8 j  t* E( C& p背景:- n4 I  ]0 r4 @9 M
    & X' r& X; b1 l- g. O4 j
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    0 u" C% x& A9 }  Y/ K4 Y1 u* W/ v7 ]7 r" R$ o' I) a+ h
    问题:
    4 I9 t1 f6 |. T  p# I+ B$ A
    & R) K( h6 B- b1 G* k. w使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容4 O" e# J2 ~: \6 x

    0 w6 a, @/ \- ]3 `# w* c问题代码示例:6 i4 z$ ]0 R! n( w: e
    # -*- coding:utf-8 -*-
    0 c* E9 T. U# R$ x" nimport smtplib
    3 e7 z8 ?% A% R  B8 wfrom email.mime.multipart import MIMEMultipart
    8 w$ S4 l4 T# X( a; p1 gfrom email.mime.text import MIMEText
    - H- I/ X. t# [; J# d
    8 @* A! J+ |0 @0 o0 sdef send_email_to(fromAdd, toAdd, subject, html_text, filename):" Z4 [& b# Q0 \* H; U3 {
    server = 'mail.****.com'' M5 G9 x  d6 m
    user = '*****'4 ]5 m/ C7 r7 x, W
    password = '********'( t2 Z0 f* k4 K
    , K' m1 Y- F: z8 x. h% ^
    strFrom = fromAdd' Z" k9 }+ h; K6 z. T6 M
    strTo = toAdd/ l: I8 M8 T- g, S* H* h

    7 m( T# x" K- g6 p% s1 a msgRoot = MIMEMultipart('related')
    + W8 p1 l1 S* L: x1 t( _ msgRoot['Subject'] = subject
    : J3 u- w4 J: [5 p! j. \- s8 G msgRoot.preamble = 'This is a multi-part message in MIME format.'! y( m, L  P- b8 w2 ]9 ^

    1 ?* g2 x# N& a msgAlternative = MIMEMultipart('alternative')
    1 J2 p  h& @9 F' B4 m msgRoot.attach(msgAlternative)
    ; e" s3 r% e5 s
    , I( H* l8 L; I! [) l, V0 D msgText = MIMEText(html_text, 'html', 'utf-8')
    ' X$ v4 V; Z8 d7 z5 S$ X  [2 I msgAlternative.attach(msgText)
    2 r- c! a  e7 ~0 ~( }
    : m) l+ Z8 E. u1 A0 \ smtp = smtplib.SMTP()$ V+ K% G8 V7 u& K( u
    smtp.connect(server): q7 X/ a4 T4 y$ Z
    smtp.login(user, passwd)
    0 b, L. O% J  N. T; m7 ~* _) O" H2 @0 i' H: c+ I
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
    . p9 C* X) c6 w- y# H, l att5["Content-Type"] = 'application/octet-stream'
    8 T6 x" B* z$ P2 ~1 C0 c att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'; g4 w7 Z% c6 q' ^
    msgRoot.attach(att5)' r$ W* _- J0 V. ^  ]! D" r
    ! `3 h2 y7 U: O1 C- z
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())
    ( y2 r9 I" x$ o$ ]$ S smtp.quit()
    ! l" |; |# ~- i! n: [: `8 ?8 i return7 a! I. ^: a! r+ D3 K! e/ m
    & J8 ?7 e% I2 T% A3 e
    ( d$ n' X3 ~# E! y, k+ k
    成功代码:
    % p4 k6 ]& O/ M#!/usr/bin/env python- r- _9 m# N$ a5 r. Q0 g/ p2 ^
    # -*- coding: utf-8 -*-
    8 H% A5 D( V; j8 R+ u, n7 W" b, ^' V! J  k+ H; s( v8 d
    import smtplib8 M5 d5 x3 g+ y  \% c6 E
    from email.mime.multipart import MIMEMultipart
    5 ~  f! {1 h4 d$ i9 Jfrom email.mime.text import MIMEText
    % u- D0 X, H/ @1 v) l  nfrom email.utils import parseaddr' O" \+ M8 K" }$ i& G: i9 f
    from email.utils import formataddr3 z6 a, w+ G6 C8 D) `
    from email.header import Header) W8 Z: t0 j( [4 P- ^
    ) i- Q$ w3 a8 P  m, d3 @- l) j
      K# w  ~( S( e6 g9 R# i) U
    def __format_addr__(addr):6 Q$ S( |  u) |5 }) a, G8 W: x8 K
    # 解析邮件地址,以保证邮有别名可以显示" `! y) T/ a" s% f$ J9 F5 ?; C
    alias_name, addr = parseaddr(addr)
    5 F; d2 b: U, J # 防止中文问题,进行转码处理,并格式化为str返回  i1 ^4 V* `  L
    return formataddr((Header(alias_name,charset="utf-8").encode(),
    ; W2 D1 n! c  `4 c( e      addr.encode("uft-8") if isinstance(addr, unicode) else addr))" k5 S$ C% M: C4 `1 G
    % `: B1 D: B+ @4 B

    ; {9 v1 Y0 ~$ `0 ^) @  f+ zdef send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    # k6 s  V/ X8 M0 s% S5 p& B3 l! B. e" h& r( H: J) `* [! ]7 Y3 I/ W
    SERVER = 'mail.***.com'
      w$ x% f4 @% l USER = '******'
    + M, h& G- M1 v! M8 J4 Z/ l8 Y. K/ f PASSWD = '***'
    0 Q9 U. z# A5 C! A# l- g5 g* E* }
    ( m7 e& X0 D& n5 o5 q8 o: W6 H strFrom = __format_addr(fromAdd); n7 {6 t3 u/ m: `8 P( J

    & C# ]( c$ }6 C$ M' | strTo = list()0 ]7 t9 ~( l! N. r# c5 e
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化" ^* y# W5 Q4 r* T; ?5 l$ j
    try:5 z7 n/ @  J6 N0 R1 ]
      for a in toAdd:
    6 {: w8 I& M" m( v; B- L   strTo.append(__format_addr(a))/ ~0 j) d" w9 D9 C4 p/ s
    except Exception as e:
    $ o, F% A: u/ d' W& C  d  # 没有对a和toadd进行type判断,出错就直接还原. r1 l$ I4 S9 }( l2 l
      strTo = toAdd
    3 s* [5 D( u* C: q! ?2 X, ^% b2 s4 Y8 T  c2 D. Z
    msgRoot = MIMEMultipart('related')
    ; c, t$ t2 f: L2 u7 w msgRoot.preamble = 'This is a multi-part message in MIME format.'
    $ A2 ]% B1 F! [) ?  N+ f! k0 C& e
    ! L1 l- Y4 o1 I8 x/ m9 m msgAlternative = MIMEMultipart('alternative')& \- T) ?  [) ~* W  A: x
    msgRoot.attach(msgAlternative)3 z! C8 _" \/ z7 ~2 y: h8 _

    % A; {3 I0 d- V # 邮件对象 ) s  d# ?0 b7 q. N) O3 |
    msgText = MIMEText(html_text, 'html', 'utf-8')
    # L# `6 f, `, A3 j: `* Y msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    5 \/ {8 M' D$ b, c, e- S msgRoot['From'] = strFrom  # 发件人也是被格式化过的) J: N( u5 k" `) t" B3 y) [/ g
    msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”
    + `+ V) q5 H" Y4 [! `! e7 m0 x msgAlternative.attach(msgText)' a4 h7 k+ a8 ^7 H. p- O$ D, M
      g: v/ \- q. }* n0 z' @4 T
    smtp = smtplib.SMTP(SERVER, 11)6 W0 n: b9 b! ?& F/ c5 ~, ]. Z
    smtp.set_debuglevel(0), F6 O7 i% Z3 j5 T
    # smtp.connect(SERVER)4 d8 f0 x) w' J* o
    smtp.login(USER, PASSWD)
    3 e5 f" b) d/ F. a5 m% h% X # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别5 r1 T* x& s& A7 ?+ v& k: O- A
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    ! O  w5 A* l1 b) J smtp.quit()$ x# Y. z7 [- K. m
    总结:
    1 E1 Y& Z- ^' v0 j. C. A0 w# E2 E6 x; R
    ! t- |" H; S' P8 P看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    ; m  ~, K1 P0 A" z4 z6 A
    ' J: Q/ H, Y+ E4 @实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”2 a4 _' i% f! m; W" y
    ( `/ t  `# ~: m3 [
    同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    4 ?- Z0 Y: K$ c' G% N+ K
    0 M) x+ a: T! a/ u8 z还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。
    1 x: @8 m5 P' ?最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得% Z, g5 L1 p* C1 L7 Y4 `
    8 f! ~( z! P; ~
    ,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员5 ], T6 i& E, Y7 n
    , L; k& w/ S+ {9 n
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节) a$ _3 X' G: w& Q: A
    ————————————————) |7 O. z7 i# n+ ]
    原文链接:https://blog.csdn.net/haoxun12/article/details/105162947+ b- I* R. ^4 Y( v9 G

    ' w9 i& ?, {) e0 |- c1 p' l& r: h, s2 ~3 z! N
    ( A- m3 U  o1 g) H4 H
    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 23:20 , Processed in 0.412995 second(s), 61 queries .

    回顶部