QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6063|回复: 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发送多人邮件没有展示收件人问题的解决方法) [2 I) e3 A; j1 n  E$ ^
    这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      J2 I6 h1 R3 n+ N7 a. A- \背景:
    / d4 ~8 ?5 s1 I  p' f9 H
    9 x# r! X9 R+ H工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人
    8 t. M4 V' c! \# N  |
    4 n. X$ F0 Y0 }" u) G8 S% C& e问题:
    8 {7 g' V4 i; {( r# }5 S& a1 [" ?' ~7 L$ y* ?
    使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容
    0 M& ]; e: c! P! _1 x8 ~
    9 m: t6 M# |5 h9 f/ U4 l" x( E问题代码示例:
    # ?+ c4 s4 ?, l0 j4 D' u7 E# -*- coding:utf-8 -*-3 v- ?8 C- |7 m! e0 @6 k+ I
    import smtplib) p; t* V' r0 i2 |5 W9 L( D" h
    from email.mime.multipart import MIMEMultipart
    - t5 t# l& ^0 d$ B* ^from email.mime.text import MIMEText, A# m( X7 m/ \( C- d5 _

    3 \% e3 R& ~3 A5 }  ]def send_email_to(fromAdd, toAdd, subject, html_text, filename):3 }% e* p4 `0 r$ V0 _) \
    server = 'mail.****.com'
    8 V' P) ?1 ^4 Y" |. b' M: z6 a user = '*****'$ h4 `5 Y1 [7 P. T' [  V9 H- ~& N
    password = '********'
    3 F) A. Z$ {' `# V! \( |1 v* ?4 g9 i7 s$ T1 X1 n. I& u
    strFrom = fromAdd
    5 K8 I9 W) N9 s3 E3 O' t strTo = toAdd5 v& Z; W+ c! T+ D

    + e4 Z/ H+ q9 j3 i* { msgRoot = MIMEMultipart('related')
    2 p3 X8 s5 ~8 M: ] msgRoot['Subject'] = subject
    8 @. v6 F& ^  m+ d( p) Z msgRoot.preamble = 'This is a multi-part message in MIME format.'
    + }9 K% q; B; }. V" s! j* Q4 s. ^4 z5 d1 b; m" r9 q) \
    msgAlternative = MIMEMultipart('alternative')
    & ?4 m# q1 w' T7 n! B/ o  I msgRoot.attach(msgAlternative)$ q' b0 N6 w) ~: P0 f
    # |4 U- o/ f, Z* [3 P$ f+ l# W
    msgText = MIMEText(html_text, 'html', 'utf-8')# E8 W  |/ U$ M* \9 |) j) k0 o
    msgAlternative.attach(msgText)5 F3 I) }3 G0 w% S% V4 S

    8 p) T; n. I3 T' Q4 r smtp = smtplib.SMTP()+ X  K; B- |% ~) D! i6 _3 v$ O' ~
    smtp.connect(server)% g& K5 R( F" c6 P
    smtp.login(user, passwd)+ e0 F& l1 b; C

    - l2 \( d. E: W4 c9 S att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
    ' ~& A1 i# F$ E/ s$ I att5["Content-Type"] = 'application/octet-stream', M# K  I; U6 m; |: T$ E. w1 c
    att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'8 D  z+ _2 p/ W. O
    msgRoot.attach(att5)
    2 k% y! M0 [, `2 z8 V( o9 Z, u: [8 S& Z1 j/ r
    smtp.sendmail(strFrom, strTo, msgRoot.as_string())( I: @  D7 l* d
    smtp.quit()) A" g6 V7 t4 c% ~1 ^% Y
    return
    6 M! s2 E0 ]* j, w8 ^8 Y, _+ {0 d. K$ m1 Y# A0 y7 d( Y
    7 }' l- x0 W2 n% Z5 E
    成功代码:
    * M5 i, [7 x7 i) ~( R0 K' k8 C#!/usr/bin/env python* S3 y1 k: ^& S
    # -*- coding: utf-8 -*-
    . F! P3 l: X. M( t4 Y, N$ x% G( l+ k2 j9 ?' ?- J$ P" ?- D# ?" D
    import smtplib
    0 @3 ^8 P4 S% ?+ y1 u. gfrom email.mime.multipart import MIMEMultipart4 m! ^. [& i" d& a
    from email.mime.text import MIMEText- E* ^) B" j( w1 p- V) n
    from email.utils import parseaddr, R. f  U( z3 _$ o1 \
    from email.utils import formataddr
    0 I7 ?, h2 ?6 R1 k% Rfrom email.header import Header/ F6 s# T  s0 T' F. ^

    2 v6 Z: \! w2 Y+ i: q0 B+ e& d" x1 A# U' O6 q- ]1 B
    def __format_addr__(addr):  N1 P/ G  ?- R& j2 N6 \/ y
    # 解析邮件地址,以保证邮有别名可以显示  D: L3 x- r; ~0 i" k% n
    alias_name, addr = parseaddr(addr)5 a9 o' T1 k, x+ a
    # 防止中文问题,进行转码处理,并格式化为str返回# G  i! c4 T! A1 O1 z' [3 c
    return formataddr((Header(alias_name,charset="utf-8").encode(),9 `9 @! S% D8 ~* K, i+ f5 u
          addr.encode("uft-8") if isinstance(addr, unicode) else addr))
    : X* e, a9 i7 w- P1 z: L. g2 w* d5 k6 u' O$ P) N9 V
    / D1 f0 m- o* P  a5 c+ U5 t+ t: r
    def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
    7 o! J+ q3 B3 A: @, {- r4 U# p9 t2 J) Z/ E
    SERVER = 'mail.***.com'
    3 Q7 F7 C' |$ b% b- g USER = '******'' \) F2 Q" ^" y, w' g
    PASSWD = '***'7 ~' R9 Y$ |1 A# I. {- w
    , `" H/ h  j  _0 T. U; @8 ~
    strFrom = __format_addr(fromAdd)
    * K: R: J! g/ B1 n: N- P! ?7 {( [" O. l: a
    strTo = list()! \% A/ L# h4 Q' a2 k& {
    # 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化8 \2 N$ O  N% ?7 L8 @) O& v
    try:
    # Z( B$ A* v! u+ T- ]  for a in toAdd:  \" P3 u4 F9 C9 T# j2 f! V6 J! O
       strTo.append(__format_addr(a))8 X4 {) _+ |* X+ S
    except Exception as e:
    3 N3 A9 m3 _" t6 f7 u  # 没有对a和toadd进行type判断,出错就直接还原* S, S% I. \/ @" v; n' w
      strTo = toAdd
    5 l4 `& Z2 n' x8 }1 b. e3 B4 y0 ~8 j" x$ u& A
    msgRoot = MIMEMultipart('related')" J' Y) ?- r: F  }8 G( P: N9 \1 a
    msgRoot.preamble = 'This is a multi-part message in MIME format.'% N. x! b1 M4 n# [

    5 _$ g. e9 f) Q0 {! z msgAlternative = MIMEMultipart('alternative'): O9 c$ ^# F. _+ j+ C4 @5 E
    msgRoot.attach(msgAlternative)
    ! [5 N& G( I2 x7 d$ e
    % ]( ^/ O  m' w& X # 邮件对象 1 X. w, P$ C2 r
    msgText = MIMEText(html_text, 'html', 'utf-8')# J; D& j2 U; n" m& G
    msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化
    5 F2 _4 h; e4 J( s0 J msgRoot['From'] = strFrom  # 发件人也是被格式化过的* v% t' t; q  B8 ^# m
    msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“AttributeError: 'list' object has no attribute 'lstrip'”6 @: D/ n( b+ e' N
    msgAlternative.attach(msgText)2 y3 k* @# z. y5 f7 @

    " ^" t2 z) M  n( K% H7 u smtp = smtplib.SMTP(SERVER, 11)
    & \5 z' e/ I; n5 A0 C smtp.set_debuglevel(0)
    7 w$ H( S* i  G6 ]; C, [3 y8 ` # smtp.connect(SERVER)
    5 p$ Z: H/ P% C. a smtp.login(USER, PASSWD)
    ( U; K( ~; _0 J) y # 这里要注意了,这里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的区别7 {* v. }$ A& M2 B) ^0 e, R/ h
    smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
    4 Z" e# h* j' {4 ^4 ~# w2 Y  k smtp.quit()
    * |# L+ F0 g9 c5 o( \) E, n9 o总结:
    8 W6 @1 C( v, i7 S8 N% h8 ^; S( R# c# h+ H9 B. F) W$ W
    看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo
    # G3 Z4 E6 L7 u1 K; I. t4 N& P* k3 l: x7 O+ P2 W
    实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”( W6 R) f8 T3 k

    1 g: L5 {. _* J" b! e同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型
    , _0 a1 u$ }- N8 U" s9 r8 U7 n1 @! b8 a2 e( R8 z
    还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。
    1 z. v8 y3 b. L" r) D5 c) Z最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得% V- m6 u* m# p
    + ~1 a7 K1 c% D3 r9 ^
    ,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员% Z* e' E( X% C& R/ g9 v9 @

    ! s+ Q- H  s$ G- I+ v" J定时讲解Python技术,分享一些学习的方法和需要留意的小细节+ H! Q* r! W! u# S" \0 M
    ————————————————
    9 K1 }7 w9 M/ [, e' ^原文链接:https://blog.csdn.net/haoxun12/article/details/1051629475 Q0 h+ L6 ]4 h
    8 }3 i& }! l0 U1 I$ W2 K

    2 _' t& Y# U) J8 J
    ( ~6 q# G6 Z6 x
    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-19 15:48 , Processed in 1.395664 second(s), 61 queries .

    回顶部