QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6059|回复: 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发送多人邮件没有展示收件人问题的解决方法
    7 p; \+ M2 R9 E0 ~( z这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    $ f. N" [/ }2 Y8 u/ v; k背景:
    : ~0 y) V4 E( D" t8 F5 `8 [& S' A% m5 W  ^3 c- @
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    9 z7 ?; {: W0 Q2 d
    # S6 p+ v" v8 i+ S/ W3 h6 Q5 l问题:
    ; e% c! c* R3 _" @6 t1 W( h
    * Z0 p7 ?; {+ X' ?& b使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    4 o  W+ Y7 i% u$ \
    % j  I# i% J2 J9 _# t0 l4 T9 ]: B% x! V问题代码示例:
    . q, X# o  ?! e+ \5 B# -*- coding:utf-8 -*-( B% _  H* I3 A, P9 n1 n
    import smtplib
    7 y% ^$ F. h6 V2 |$ Kfrom email.mime.multipart import MIMEMultipart2 @+ i& B; l6 x( ?& j
    from email.mime.text import MIMEText
    ) @; |1 w; `- I: z& W& \( q) B  z
    $ P; K4 c2 N+ p% }& @def send_email_to(fromAdd, toAdd, subject, html_text, filename):9 M" V! B9 v5 c# a) O
    server = 'mail.****.com'
    " [) T6 _2 U4 s6 f# @( C user = '*****'
    , c" S8 Q9 ?2 A$ P password = '********'4 }% w- N$ {! C2 b5 q" U4 _

    ! H5 r1 S6 [+ R. U) v  S& o strFrom = fromAdd
      f( O' e$ ?( U1 `/ L3 o strTo = toAdd
    + u1 }( W& D* D$ i+ A' f  u2 Z% ~" I7 V/ P: D* v0 l, K% j' `
    msgRoot = MIMEMultipart('related')
    & d/ G8 R# x5 R4 \ msgRoot['Subject'] = subject
    % l/ Q8 T9 L) Y4 G/ J; |$ r( @  B2 ] msgRoot.preamble = 'This is a multi-part message in MIME format.'
    , Y! d' s$ {7 p7 s, H) v# u/ B
    - \7 y9 y9 M  n0 f- d msgAlternative = MIMEMultipart('alternative')
    8 g& R6 I) W! }' o6 d$ k4 W) | msgRoot.attach(msgAlternative)4 ~' a1 g9 c) I1 j; H& v+ @/ {0 {7 ^6 r

    4 T. J4 B( k6 S5 r1 _. f msgText = MIMEText(html_text, 'html', 'utf-8')3 \% Z+ O& r' R
    msgAlternative.attach(msgText)  a# S" j3 Z, l. F" ?
    % J" |! U/ O0 f
    smtp = smtplib.SMTP()
    ) q* I: g1 t  k+ R smtp.connect(server)2 T& T  B1 s: h6 C$ s
    smtp.login(user, passwd)
    $ ^: J/ _+ b( v7 x# M2 C6 c3 v1 X# A5 W, C
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')2 e5 t* k3 U" Q* `
    att5["Content-Type"] = 'application/octet-stream'
    1 T7 u7 Q' B2 q3 C5 v. ? att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'. c- z* V# F- L7 B
    msgRoot.attach(att5)
    3 l' D+ D6 I4 h( M+ d' E: ^! {7 }* T, {
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())
    - p5 _  n5 L' r6 z/ ~ smtp.quit()
      d# u: P/ B0 u0 ~, [! { return
    6 V8 j$ R* C" c1 l2 y8 @
    & s  S* S. y: z6 @' y' l& `
    0 K1 }6 t- f7 ?  N成功代码:, `: h/ f* [- a5 k/ i  c
    #!/usr/bin/env python
    , R' Z3 o7 \3 R# -*- coding: utf-8 -*-
    ) S% e% [6 [8 N" ?5 F0 |4 w1 ~1 e0 v/ D
    import smtplib( h/ \; o& i9 O+ H  F6 `' j2 q
    from email.mime.multipart import MIMEMultipart
    : `; ~8 x# L4 t; `! \, H. efrom email.mime.text import MIMEText9 `& I& P6 U9 Y$ k1 ?
    from email.utils import parseaddr* |- b: p$ [) J5 X
    from email.utils import formataddr
    ) W9 V4 _7 b/ ~; vfrom email.header import Header  l- J$ \, P) Q& F

    ( }! i) [2 D6 f0 z0 I$ x' q7 L" M) M3 o! \9 D% N" c( Z  G
    def __format_addr__(addr):  A# ^& X+ p* T$ S: a
    # 解析邮件地址,以保证邮有别名可以显示3 E0 ?  A6 I# W! m
    alias_name, addr = parseaddr(addr)9 @7 X/ q: [) U& F' G- L2 W
    # 防止中文问题,进行转码处理,并格式化为str返回
      `: c% {5 _$ t return formataddr((Header(alias_name,charset="utf-8").encode(),7 S+ c: g8 m: h2 L) X% x8 J
          addr.encode("uft-8") if isinstance(addr, unicode) else addr))
      a& d# B) z* x/ |1 F" n9 N0 E) ^+ N: p3 u+ E6 W" C# M" l# _
    1 a7 @8 W: L; @: X" \* b  J
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    % s& G" S0 b( B1 |/ O6 S
    : L$ x+ K2 f6 m+ D, d) T7 P SERVER = 'mail.***.com'6 U6 j: u5 ?7 d2 O+ i' \& f8 M  R! C
    USER = '******'0 x( U+ J- L1 e% N% ^3 t
    PASSWD = '***'
    ; a& G& L# Y/ X6 q: |1 U! x7 d- ^% M
    strFrom = __format_addr(fromAdd)
    - e( O4 W' s0 r+ L  l
    & I) H; A8 g; { strTo = list()
    ' c3 b" v8 Z% h, D% X& o # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化! B4 S2 D- j3 h6 b/ N  m
    try:, y/ t( f8 N( u! a
      for a in toAdd:6 v# c& v" z0 ^  {3 A, d7 j4 {
       strTo.append(__format_addr(a))  `4 q, z, v- q) G6 e8 o
    except Exception as e:/ J% f- d! U( |% G, R9 T: H/ a- ]& C
      # 没有对a和toadd进行type判断,出错就直接还原3 X( |! }7 T$ Z* c! J2 _
      strTo = toAdd
    * k+ @! A2 Z9 m: U+ C) w
    + @7 C: }2 e6 J1 l msgRoot = MIMEMultipart('related'), n% J2 ~* f$ F
    msgRoot.preamble = 'This is a multi-part message in MIME format.'! c2 Q' A  R/ J0 q5 Q8 A

    $ _! f& @' ?+ m5 ^, f/ v4 M msgAlternative = MIMEMultipart('alternative')
    " t7 m1 H( M4 [; Z# @6 j msgRoot.attach(msgAlternative)3 P, L8 B! h8 P( s9 L

    - l& Z6 Q3 P$ n # 邮件对象
    " X( c1 {, x, k5 C. z msgText = MIMEText(html_text, 'html', 'utf-8')) b2 _' I  M( j+ P* E7 u
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    8 p% S( h" d; s4 g1 T2 k msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    ! b7 W1 d0 S4 D% z& } msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”
    ( U! K' \) h) s; p& j( H msgAlternative.attach(msgText)
    ! |$ C& J! U. O+ k, I+ N, l* X; o
    smtp = smtplib.SMTP(SERVER, 11)
    , n! G( i* n1 Y smtp.set_debuglevel(0)9 J, |2 a9 `$ D( h1 v# K
    # smtp.connect(SERVER)
    - ?/ c: J, r7 I6 [2 H5 G% \ smtp.login(USER, PASSWD)9 L6 P2 r0 G+ J
    # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别- n7 V* B' s; ]7 {! Y" @
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    - E( i( \5 q" L+ L3 x9 y& M; y( Q smtp.quit()
    & A% u4 w. h8 Y( J" x" m总结:: h1 t6 l; v. a8 y

    : m" }' c3 H* s! u, b看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo* p0 D5 w" q& X3 I# o1 O6 n

    ! n  A/ E) N4 ^3 E+ c+ S8 W实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”) o( `* f& _* i/ J$ D( V
    2 C$ F$ ~8 O7 S, T( ?
    同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型* j  L9 _; T  _" g) x' S0 v4 ?
    % u  |1 Z7 d& @4 j4 M: n
    还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。
    : z' n3 q# K, T' j最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    . y: M3 o% F7 I; {
    7 K6 R, @7 V) o,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员6 m# a, V7 N9 J6 e

    8 R7 G  N: t( x6 J* L定时讲解Python技术,分享一些学习的方法和需要留意的小细节3 y; n( F* |2 c1 o2 K2 o4 P
    ————————————————
    ' h1 m% a' I& F6 }原文链接:https://blog.csdn.net/haoxun12/article/details/105162947; `$ T# p' M" T, x* x! v, n% x
    / T, O8 D* R* G; F3 ^0 y# F+ G
    8 V! g. A0 L+ \: k- W
    : d8 M0 X- q7 l2 [! q! E- T
    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-4-18 22:00 , Processed in 0.430896 second(s), 66 queries .

    回顶部