QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6057|回复: 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发送多人邮件没有展示收件人问题的解决方法. N5 k* t9 q2 x4 \: J, x% A- ~
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    1 ^3 w* `$ x( T" |2 o  Y背景:  A9 }9 u. c' j5 [# d
    ( k/ p5 W; q% a; i
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人# n( P, T. Q6 i4 ^7 M7 D

    ; s8 w  {/ z) i, l' j/ |8 ~问题:
    " q( Q  _- u% v5 V+ G8 [0 j
      n4 M+ K9 ~- w- @使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    ; t1 Q6 A+ ^1 m  W4 H% T2 }3 m" [0 a6 {3 B- q' |' Z& p
    问题代码示例:' q9 ~- o, e! I7 j$ G
    # -*- coding:utf-8 -*-" @5 B8 g7 Z3 n: U  [# S7 N5 z% \+ D
    import smtplib, Y5 X( ]/ _: z- j) W8 a% a
    from email.mime.multipart import MIMEMultipart0 Q4 T* J' n9 v3 Z/ @
    from email.mime.text import MIMEText
    5 m! J& m8 V6 J5 d$ f& @( E: B/ r% f" u7 J2 C2 b' }
    def send_email_to(fromAdd, toAdd, subject, html_text, filename):
    % C4 k! w5 Y( a8 T8 ]' H, f server = 'mail.****.com'
    7 s. f. }9 V& v& K. q user = '*****'
    " @" Y0 C3 x  o% v" g# ?1 g password = '********'" d& x  d: |, H. [0 b" _: U: U

    + Z) _; g8 g( L strFrom = fromAdd
    , m/ ?0 K. Z& e strTo = toAdd- y' H; v, Z" s1 }/ @

    , b2 I" k1 |, @( P( w% C" g msgRoot = MIMEMultipart('related')
    - o) b! f# J5 D/ J msgRoot['Subject'] = subject
    ; K: h8 C/ g1 p6 F msgRoot.preamble = 'This is a multi-part message in MIME format.'
      S7 w4 u2 S, [$ o  e
    " z: O& y1 U% n8 R2 Z4 o msgAlternative = MIMEMultipart('alternative')
    0 [- V+ {. I% y) V5 [5 n% i- X6 D msgRoot.attach(msgAlternative)
    ( n% h) t" p7 v0 R' q5 {( a) i3 n% g9 E, N* O0 v
    msgText = MIMEText(html_text, 'html', 'utf-8')# J4 }" c9 t7 p  A0 b$ `: T
    msgAlternative.attach(msgText)
    6 x) U6 M( `8 c5 A. Y; |6 t- m1 N8 l3 r; [: K7 v
    smtp = smtplib.SMTP(): [' e7 v0 @+ l& |
    smtp.connect(server)0 T1 Q' O3 S# f- `7 U" C8 r
    smtp.login(user, passwd)
    . H/ C1 I: Q) ?8 B0 u! K+ y2 c% ~' L7 h8 s! A. Z
    att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
    1 E" y* h* P3 g6 j att5["Content-Type"] = 'application/octet-stream') Q* D: ?4 @0 U; i4 r: r, v+ U
    att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'( p- I) M% c) L4 X
    msgRoot.attach(att5)/ x) W& y" s3 t1 F3 K
    ' h- [! J2 T9 y9 W6 ?3 v' J5 m2 x# V7 i7 U
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())# D# _- [) V5 Q3 N$ I0 S
    smtp.quit()
    . N. c7 b  r6 N return
    ( w/ f% T' u) x% F( _$ f1 k9 z" S$ P5 s

    $ t' ^% G  N0 N$ y; M成功代码:
    / V, C' ?# m( D- z#!/usr/bin/env python  E. p$ u7 s- A
    # -*- coding: utf-8 -*-1 a1 R- b% C! l+ {8 G! ?1 U+ _3 X
    $ _: @$ n9 J' B3 Q( E9 ^
    import smtplib: ?3 V  F! h3 F, D3 g9 D1 G$ a( ^7 f) ?6 M
    from email.mime.multipart import MIMEMultipart
    4 I$ L  d9 s' f7 u0 l4 Sfrom email.mime.text import MIMEText& n4 w, F" O8 n
    from email.utils import parseaddr
    # R7 v- M5 ^6 Z! Efrom email.utils import formataddr& ]9 B" L. C2 q9 B$ p
    from email.header import Header
    8 K5 U/ @; o/ T, y$ c5 u  i0 w9 h6 X6 h1 ]9 ^3 d

    # v1 I/ l7 k% q  cdef __format_addr__(addr):
    / E0 L" i. x8 g# G6 o' c # 解析邮件地址,以保证邮有别名可以显示
    / {9 h3 j  z# P& Q alias_name, addr = parseaddr(addr): b( A8 M4 e) H5 Z
    # 防止中文问题,进行转码处理,并格式化为str返回
    ' n3 P  O  n6 g: z+ e" p, D. q1 J return formataddr((Header(alias_name,charset="utf-8").encode(),
    5 y4 G2 y: `& x( F) U      addr.encode("uft-8") if isinstance(addr, unicode) else addr))
    # \: J! J5 n4 a, s/ A' v
    ' k# q# C& `# r* q( T* K8 L- q  D6 @, y4 ~. E" r& q- u
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):4 C4 b1 w8 P# e% t9 I' Z
    7 N9 _9 ?- p$ M" m
    SERVER = 'mail.***.com'4 H, b" y% q. ?8 h, p: N
    USER = '******'
    / O- P" W% ~4 f7 f& L PASSWD = '***'
    $ {9 k1 Z1 N3 @+ o4 R! e* l1 [4 t; T: z6 @2 t
    strFrom = __format_addr(fromAdd)) f+ ?( d) q# O& R: I1 l. X" f

    + n" {3 W# n9 Z& E, Q strTo = list()
    1 ^5 l: Y1 ^1 C- Z # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化1 }$ e' l. j& d! V) j
    try:
    " N' I' V- o, T3 I8 p0 \  for a in toAdd:0 m& t' K; T* z$ P4 s
       strTo.append(__format_addr(a))6 t1 T: n6 z, w; t. i
    except Exception as e:! w5 e+ ^: h3 N& @  V' c6 }
      # 没有对a和toadd进行type判断,出错就直接还原) b1 D# @  G# P& M1 }
      strTo = toAdd% P1 I4 ~+ |& s

    ' `6 f: ~8 _$ l: K msgRoot = MIMEMultipart('related')
    " v! s9 w9 K: X$ T" Q msgRoot.preamble = 'This is a multi-part message in MIME format.'
    $ G& [/ J/ Q2 L, w7 k9 m: ]4 Z' {
    msgAlternative = MIMEMultipart('alternative')
    " l; w3 \$ G" k7 e* p6 Y% ] msgRoot.attach(msgAlternative)' d8 e8 D4 M* F4 m8 d) d6 \) R" W) Q

    " J0 I& o8 v2 Y5 m/ X9 L3 n- H # 邮件对象 ' H; ?/ \( `3 b) i4 |1 i% J/ t
    msgText = MIMEText(html_text, 'html', 'utf-8')8 m; N. e8 g8 E0 H& `7 R1 }; Z
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    9 L" ~% Y% a7 I0 Q0 u. n1 y msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    : G1 G, L8 }; |! R msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”* \2 i( a8 a3 n  K; g) Z$ @, `
    msgAlternative.attach(msgText)$ Z( W) D  G) T5 i$ C* t5 v( m

    9 u% C; n) H; g* b smtp = smtplib.SMTP(SERVER, 11)
    0 K$ X: S- {$ L# Z, a/ p1 ^) T" ]5 D smtp.set_debuglevel(0)3 z8 T& C7 f* @% Y$ Y2 l7 L
    # smtp.connect(SERVER)
    ' W% D6 F/ I5 R# X$ [) r smtp.login(USER, PASSWD)
    1 P) J  n" k8 y! v # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别4 w! O/ r- P4 a3 u( d% x1 h5 b
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())2 x: V, \7 @8 J  N2 q) Q4 o
    smtp.quit()
    : Y1 ^' z( W4 V; i总结:# @  b) H3 [( L+ Q8 {

    ! }4 F. ~) {! R' d9 a3 S. f看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    1 q) ^- n2 n' L, k9 C3 I
    3 {. E/ ~* [! T: E$ j实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”) G9 q9 L0 z: g6 ?: r

    - O% y% W- }, D' a, W同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    ) T$ B" {" n+ s/ z
    5 Z* A' B3 Q, u# C还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。
    6 R# ~/ G5 R2 u% o最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    , V. z) _/ b# V/ o1 @( K0 P
    8 [' d% s/ i$ e3 P,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员( E8 u- J$ K9 a4 Q; {. i# V
    4 y* d  p+ q% o2 k% y; F
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节7 L) K# D8 y! ?% E: c, s+ z
    ————————————————: R1 c- \2 t) M' H, }( `# u
    原文链接:https://blog.csdn.net/haoxun12/article/details/105162947# L) p3 I- Q* e0 L
    % s4 p; G1 i& n. V9 Z8 j
    # W) f) A# J+ T* t
    # C0 P  S/ [* L* ^
    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 13:52 , Processed in 0.372729 second(s), 62 queries .

    回顶部