QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5390|回复: 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发送多人邮件没有展示收件人问题的解决方法
    , P7 m+ i6 ~" W' @这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下9 p1 \% Q- {. g) A. t9 M9 z
    背景:
      v2 ]7 A- b/ ]# p9 a6 g, ?. `, @+ n3 D% r2 j2 }8 c: U
    工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    9 D4 i5 n/ s& e9 u3 W" d7 C9 b# }
    0 {# G/ ?0 R  R6 U7 a5 m2 W问题:
    : [% }0 r; l" s  ]  S
    . @. V4 M1 V' d& P  a使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容7 J) `  v+ r! w
    . t' a" `) b; z5 l  x
    问题代码示例:
    & f7 o% Q. `8 U3 z5 N, q1 B# -*- coding:utf-8 -*-
    0 a& o- M0 A0 Y8 L) b0 C, Aimport smtplib
      P' `9 Q. @! e, b4 ~from email.mime.multipart import MIMEMultipart
    9 u0 z0 O, X9 }5 F& `from email.mime.text import MIMEText
    ; V% \3 k4 L4 F4 b- c$ ]) J7 Z" [2 E. y
    def send_email_to(fromAdd, toAdd, subject, html_text, filename):! F- ]5 X+ q; ]
    server = 'mail.****.com'$ c: C& A3 |- ~
    user = '*****': [, W4 x, \* q4 B
    password = '********'
    ! J; ~+ ?4 X4 x8 n; Z: o
    4 w6 v4 _7 d2 Q strFrom = fromAdd
    ' n: X# w5 U4 t& b strTo = toAdd
    7 Q1 ~5 |5 _8 ], c" S3 F# e) G) L% C' T% V6 f+ F5 V- h' v% [
    msgRoot = MIMEMultipart('related')
    0 I" N& o4 g/ s, `, G- P msgRoot['Subject'] = subject3 Z# ^" k: |6 d  L6 z+ `# g6 q6 a
    msgRoot.preamble = 'This is a multi-part message in MIME format.'2 i9 e0 m) F3 K3 w4 z) b- p; H
      r, W; o( b9 d9 _6 l" j+ f
    msgAlternative = MIMEMultipart('alternative')# ^* a1 v) e1 T: C% I2 S0 C
    msgRoot.attach(msgAlternative)
    ' [4 t4 D1 b7 |1 p6 p
    ! N4 x" [  M1 N msgText = MIMEText(html_text, 'html', 'utf-8')
    ; A* }1 V8 C, J  X msgAlternative.attach(msgText)
    . b2 E! f$ S0 w
    + v! B# Y7 W- @- n smtp = smtplib.SMTP()
    + B# b+ P+ z( _; C4 y# T0 d smtp.connect(server)
    . q+ c" @9 r" r! z smtp.login(user, passwd)# R$ f/ @  a7 ?

    % \4 s/ {) s* g+ n, _ att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')9 y+ _" w9 B* u% i2 c- {: {
    att5["Content-Type"] = 'application/octet-stream'. ^4 a: \+ H: |1 K. r
    att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'" G' T( {) d2 e9 S. m! ]6 T
    msgRoot.attach(att5)
    5 [3 ~- l$ g1 ?) G- y) L& z- k8 ~8 B$ k/ A
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())2 {& r8 O8 @" Q" l
    smtp.quit()
    1 D! l: p& u" X/ F' g return
    5 G) ]* I. y6 Q; I9 {2 v; O
    6 ~5 e& |" t1 W  _' a; }) W
    2 C; Y" O- V% k: b) X9 G- H成功代码:
    8 V9 d, J( i+ ^2 m9 E6 t# l#!/usr/bin/env python: }; G2 t" X% }# u0 ~9 o' |
    # -*- coding: utf-8 -*-
    6 \1 m! @3 L; P, e9 U* }/ Q, H6 g% I3 {+ ]
    import smtplib
    8 f0 x& |3 J( gfrom email.mime.multipart import MIMEMultipart5 ?/ W7 D" }( H+ c) w  Z
    from email.mime.text import MIMEText
    6 U4 v5 \, X# {6 g4 B8 x. ?  t8 Y. Cfrom email.utils import parseaddr
    8 L! D  H+ L# mfrom email.utils import formataddr
    8 I+ h; z" l, u6 Rfrom email.header import Header# i5 T, V2 \$ K& u) ^

    - E3 r5 h6 G/ i% i& X4 F# ]
    ! _8 X- L$ \/ u2 o- ^2 C) Ldef __format_addr__(addr):; P+ K) q$ \+ N; D1 b; [
    # 解析邮件地址,以保证邮有别名可以显示
    / h/ C6 x# }( e$ p( } alias_name, addr = parseaddr(addr)1 P: _' |" D$ W9 @' P
    # 防止中文问题,进行转码处理,并格式化为str返回% @1 z1 K9 s" s6 z
    return formataddr((Header(alias_name,charset="utf-8").encode(),
    6 ?! z( [$ s& d1 x7 k% f, {% g      addr.encode("uft-8") if isinstance(addr, unicode) else addr))
    ( N8 `! I2 o/ ~& C9 _3 A3 F6 ~3 B
    ; k$ h8 e  i0 a% e
    ; T5 V7 }' u! v) S- d* Gdef send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    : U. c2 z+ D5 Y; z) j
    $ J5 c* y- n& N& N% x2 a$ h3 m* D4 ^ SERVER = 'mail.***.com'
    ; o% T( G, K: ?* g2 K; a( ? USER = '******'
    # u1 }9 ^* {. ?2 O  Y" S PASSWD = '***'" Y5 W* U9 ]1 a$ o* t: V9 P$ }& R8 {& t
    # Y: j6 O. H" j& U! f
    strFrom = __format_addr(fromAdd)
    + U, N; I! Q: k, g) }3 w/ F- Q: x+ t; l$ B) U% b
    strTo = list()! F1 @+ j" M1 ^0 {# z. D# ~
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化
    1 B( `6 E- j3 T& t- y3 f+ } try:2 ~+ P6 \" s. z* g$ `$ F! R
      for a in toAdd:# N4 X* t3 O' [( v9 ~
       strTo.append(__format_addr(a))
    2 {. n: d8 f5 G2 D2 u except Exception as e:, l8 N- i" r) L
      # 没有对a和toadd进行type判断,出错就直接还原5 F4 J. }0 s; D/ S* ~
      strTo = toAdd
    2 X3 _# g$ |$ y- g& c7 M& j* N5 }: l, M: T9 Y/ G, y) d
    msgRoot = MIMEMultipart('related')
    3 D; l. M* C2 i& _ msgRoot.preamble = 'This is a multi-part message in MIME format.'+ Q8 K" U0 e6 ~( v- Z0 X" K; k

    9 p- ~) `+ o) Y1 J msgAlternative = MIMEMultipart('alternative')
    4 E) B! Z' j# N' D9 I$ M1 C% t msgRoot.attach(msgAlternative)8 _2 l+ \/ a" Q1 n, N' S
    ) u& s! Q; V& a1 G2 V
    # 邮件对象 ! o+ B# r  H* I# c
    msgText = MIMEText(html_text, 'html', 'utf-8')- p2 k! _. C7 q. ~  N; h6 v& V
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化4 ]0 E% I3 {* G+ p$ {! l8 N
    msgRoot['From'] = strFrom  # 发件人也是被格式化过的
    4 c6 R5 M- c5 m$ `4 O msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”' {( y) {* c; f, G. |
    msgAlternative.attach(msgText), s& k5 Q- h0 r$ T

    2 ^4 ]1 V0 Q9 w1 u/ F5 S smtp = smtplib.SMTP(SERVER, 11)
    ) D2 p. w. n8 p3 C5 \ smtp.set_debuglevel(0)
    ! k  H5 R8 M% t; v4 }' X" Q2 ?: L7 M" k # smtp.connect(SERVER)) a* p* w8 i: I0 {# l
    smtp.login(USER, PASSWD)3 L5 D; v7 {( x% E1 L
    # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别5 q# u& p$ q* n
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())6 S; C3 D; V- x+ h8 @; l5 ~% n
    smtp.quit()
    $ [7 q, u1 Q: I5 I+ S' a+ s7 d总结:5 o. `5 V3 M. Q" K( h1 g3 ?% M
    . [3 V, B, F+ K( A
    看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    ) b6 _) J5 }  u, b1 ]; V/ p% S, M2 o  @) |& [
    实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”
    4 v  r3 y. K$ j0 h. c) m6 U, Q: x) s+ r* b! j" J3 s
    同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型" t$ d' d; w' e6 Z2 C$ E

    5 V; Y, ^2 I& y; H. I还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。0 X/ e& `* p4 n
    最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得
    6 A: f/ X/ Z6 F$ }# L/ d0 b5 i' {& n7 v- L: a1 f4 m: W# U- ?
    ,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员$ `* {1 }4 w/ _
    % A# A' w3 x- ?' A7 X6 Z+ o3 S  }; Z
    定时讲解Python技术,分享一些学习的方法和需要留意的小细节
    ! M; Y9 J& n* X3 \% w. i* f————————————————
    " S/ b+ Z: C9 |% k5 k原文链接:https://blog.csdn.net/haoxun12/article/details/1051629470 R- x! s. k3 Y9 ?. L
    , `, ?- `: H# v8 U0 y9 r0 I
    ) S% ~7 m: j! `; n, R9 T2 b

    , e& ]# h4 I; M, z
    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, 2025-8-18 18:57 , Processed in 0.567294 second(s), 60 queries .

    回顶部