QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6136|回复: 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发送多人邮件没有展示收件人问题的解决方法
    * O' ~. s& x5 B5 S% e- q: T这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    - u* a8 o; k2 v1 N背景:
    % }6 x* d6 x4 ?* c* b! ]1 z0 ^
    . s* b0 E4 l# T3 f, d# }工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    7 n! R+ T$ O; F0 h5 d' P
    ; H  D: z# H, D# k问题:) I, q- m- x) L/ \0 `  D: @
    5 A( N3 \# ]: R% h! U
    使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容" J$ b- V5 f4 T$ _" W
      A3 z3 r5 t- a6 t
    问题代码示例:8 A) z* N! [1 j" p5 A
    # -*- coding:utf-8 -*-
    ) }6 c  X; b+ z/ F& o6 R- k- z( \8 Eimport smtplib
    ! J: u0 T. {% ^: q& y  Z- T; F, Dfrom email.mime.multipart import MIMEMultipart
    9 l6 i3 Q5 P' S- qfrom email.mime.text import MIMEText
    / y  ^4 C. N( P8 @  A' }; [  {8 M- z) }
    ' ?* h* U1 P9 s6 ]8 U$ \% Vdef send_email_to(fromAdd, toAdd, subject, html_text, filename):
    - m5 O  f! \" \' }7 }' y server = 'mail.****.com'
    3 ~* |! f5 K' w; w& B5 [; q user = '*****'
    7 Z- G2 Z, x  \5 G0 C4 a; _( _ password = '********'
    5 x# F: G, U' q5 u4 h/ n
    . e( L* y% R  N& I7 s& `! z0 \ strFrom = fromAdd
    3 i9 B6 F8 k+ s1 f9 D strTo = toAdd- n4 A1 [3 L2 x3 M# v

    & j) o. x  F5 s9 P# U' F msgRoot = MIMEMultipart('related')
    $ P( p# y+ J, e2 G msgRoot['Subject'] = subject
    / A2 z: x" N9 m# L0 t# t msgRoot.preamble = 'This is a multi-part message in MIME format.'
    5 D, P- Q  K% G
      i) }( J& ^( @7 _3 A+ G msgAlternative = MIMEMultipart('alternative')' Z9 U) c" y+ w9 ^3 V
    msgRoot.attach(msgAlternative)+ B' J. c& a5 h; \9 l2 N
    5 @6 Y# l+ D$ F
    msgText = MIMEText(html_text, 'html', 'utf-8')% r4 k5 z5 v$ ?5 n" B$ L. K
    msgAlternative.attach(msgText)
    : x! ?( Q" r' a$ T. h) l. L. T  P$ E6 N% s+ K. q: p' ?. K) y
    smtp = smtplib.SMTP()
    8 \9 g  c6 @3 J( k' C0 u smtp.connect(server)  t$ L* S& U/ K
    smtp.login(user, passwd), N5 _- j. P$ n5 H; i

    8 }+ [$ Z  u8 Y att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')6 u& P$ Z6 L  e1 H) \9 Y
    att5["Content-Type"] = 'application/octet-stream'2 k( m$ S* `( w+ l& T* F! O5 O
    att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'
    . ?: r  L$ f* M- {5 W msgRoot.attach(att5)
    0 D& k& d9 k, n9 V: O1 I5 u  ^  P/ ]0 |+ i
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())
    2 P) c5 g# X" [2 o smtp.quit()1 C3 @3 i2 \9 \' X# R" N
    return
    + p( h: S5 x- n- `- ~! R( M& W% U2 j( t1 Z

    5 g/ n3 }& w- J3 ]成功代码:' ?6 |$ b4 N7 ~: j) V
    #!/usr/bin/env python/ Z; U! D- ]  y* X
    # -*- coding: utf-8 -*-, W3 N2 r; I5 e2 E$ g7 I: `
    ! @% f! f* i9 O6 g5 Z0 {$ y* _$ _
    import smtplib
    * r: r4 \1 `" e& ]from email.mime.multipart import MIMEMultipart1 W- v* _* K3 n% j0 z
    from email.mime.text import MIMEText
    1 t8 p4 {4 e/ X4 B. dfrom email.utils import parseaddr
    4 ~* {' e3 @. @from email.utils import formataddr% a) p' e' _- A- P
    from email.header import Header  U1 ]! ^- Z, E6 M

    % g6 j5 j1 |8 K* `; ]6 c$ l- B3 \* O0 X& p4 C
    def __format_addr__(addr):/ W( b) a% W' Q6 j7 K5 l
    # 解析邮件地址,以保证邮有别名可以显示% Z/ B4 F# _) m* s
    alias_name, addr = parseaddr(addr)" l& Z% C, w3 k8 ~1 m
    # 防止中文问题,进行转码处理,并格式化为str返回
    0 j& u  H. {8 D; u& o return formataddr((Header(alias_name,charset="utf-8").encode(),  ]" }/ x8 v* l5 J
          addr.encode("uft-8") if isinstance(addr, unicode) else addr))3 {" A  E  E; @2 T
    3 z1 g9 g) n$ M# }. H  H, u8 G) E& `) t
    5 [6 S) _/ a& X% R
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    3 v) L' q9 b0 P* c9 N$ \  c6 S9 |8 B- t: b: l  a2 n7 G8 G
    SERVER = 'mail.***.com'
    3 D' E9 r  I, x" k' E$ b0 y, e USER = '******'
    * x% b  }$ Q( z PASSWD = '***'4 E2 w8 M* p2 j
    ; v/ _4 f- T! p2 r- x
    strFrom = __format_addr(fromAdd)
    & C/ b$ U* Z8 F. h* S* k4 [0 f# i& [- k5 {2 `: _
    strTo = list()
    3 e$ m0 A" r9 N: k' A8 P' R" ? # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化
    0 `9 [7 ]) J6 Q& a5 B9 @ try:
    6 z/ o5 J1 t% B& h  for a in toAdd:, k2 m8 C; Q* h# I8 C5 }! ?3 R4 ^
       strTo.append(__format_addr(a))
    9 c$ g9 E2 z$ }8 V; V& g* J except Exception as e:5 x! l( S# f; F( V
      # 没有对a和toadd进行type判断,出错就直接还原
    % B) q% Z' x" Q3 N* z% \  strTo = toAdd7 {8 l+ P4 l6 s1 L" T5 g0 S
    0 L$ h- O! i, ~7 J1 _
    msgRoot = MIMEMultipart('related')5 r4 |6 l' c1 y$ h
    msgRoot.preamble = 'This is a multi-part message in MIME format.'
    + c0 G+ |( A  v. p3 M1 g8 _5 t4 Y) M. s5 U: T5 v# Q
    msgAlternative = MIMEMultipart('alternative')
    . t$ V1 w8 R0 T/ u/ F msgRoot.attach(msgAlternative). r0 L5 L' s8 W
    4 D! }) u2 q4 f' G' E! Z
    # 邮件对象
    / k2 H# `/ Z  V& ^0 r6 p( u0 L msgText = MIMEText(html_text, 'html', 'utf-8')
    * |7 Z: u: p* S+ ^3 \' l4 ~( K msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    6 s6 k6 Z6 W0 G. u4 C# b msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    ( O) H: D* b+ K# A* A msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”
    : m% s0 b  c/ A6 C3 ~4 j0 y( z6 Y msgAlternative.attach(msgText)" B4 C) j" I' w

      q  ?; [6 ^0 v5 Q% l smtp = smtplib.SMTP(SERVER, 11)
    0 ]* U9 J% K0 i smtp.set_debuglevel(0)6 _- M8 ]! t) B( Y* u  r  \
    # smtp.connect(SERVER)+ \" a) ]% Q$ n% z& o
    smtp.login(USER, PASSWD)
    ) l" F6 h+ t& f$ }; A8 T, T8 X" ? # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别% l! Q# i, _! X9 t4 x  l
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())9 }' c8 S( k5 J; x
    smtp.quit()3 [* o8 d: x1 Z$ J6 _7 J3 t
    总结:
    1 t9 g4 z# ]0 p: c% n/ C9 o
    3 x& N# e2 E2 z看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo9 v4 t2 {) _1 A. ?+ |
    + A: T, r6 p8 P; I' v( P5 k
    实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”
    $ }3 \  t1 v0 t' v: X
    2 v) s. r. p9 {( {同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    0 a" g& G4 `/ g* B0 P& y/ }* J- l( l( q; R6 o
    还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。; ]2 W1 B' Z2 X# W
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    * p" l2 @. J8 }7 X; ^' x5 h5 \5 e+ `
    3 ^' s4 N" l, u! o4 ~$ V$ Z,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员
    5 t% N" B( j8 O5 B6 |. v- k* r. q2 o% W9 X' ~, X; L
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节& s( l& Y5 J( s3 u" |" f/ h
    ————————————————
    8 p9 E' r. e0 g原文链接:https://blog.csdn.net/haoxun12/article/details/105162947
    ; u  n# H& a; _% E, N! F3 N0 U% l' }
    # ]) d- V1 S* {* Y3 h" Z

      A; w5 W* b% B1 }. K: _
    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 15:21 , Processed in 0.385003 second(s), 61 queries .

    回顶部