python发邮件smtplib+mail

  • python3.6中mail不是内置模块,所以需要手动安装,用下面的命令:
    pip3 install mail却总是报错:
    Command “python setup.py egg_info” failed with error code 1 in /private/tmp/pip-build-gg3k8x43/email/
    解决方法:百度进入pypi搜索:下载
    https://pypi.python.org/packages/bb/35/0aa85e06fc14fe86d4064f18ad05254ebc649e81235faf96d591b02158e9/email-6.0.0a1.tar.gz
    然后解压缩,进入目录python3 setup.py install即可
  • 关于163邮件发送报报错535,550 Error:authentication failed解决方法。
    我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的,因此登录总是被拒绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码),非第三方登录密码不变。以163邮箱为例,在开启POP3/SMTP服务,并开启客户端授权密码时会设置授权码,将这个授权码代替smtplib.SMTP().login(user,password)方法中的password即可。
    错误1:smtplib.SMTPAuthenticationError: (550, b’User has no permission’)
    错误2:smtplib.SMTPAuthenticationError: (535, b’Error: authentication failed’)
    一些常用邮箱发件服务器及端口号
    邮箱 发件服务器 非SSL协议端口 SSL协议端口
    163 smtp.163.com 25 465
    qq smtp.qq.com 25 465
    xl mail.xl.com 25 465
    这个错误并不是所有邮箱都需要的;如我给公司内部用的邮箱就不需要。
  • python实现发邮件
    1)python发邮件需要掌握两个模块的用法,smtplib和email;smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容);email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
    2)smtplib模块
    (1)smtp = smtplib.SMTP(host[, 25])或者smtplib.SMTP_SSL(host, 465)
    host:为指定连接的邮箱服务器,为字符串类型,
    如:
    163网易邮箱:smtp.163.com
    公司内部邮箱:mail.xxxxx.com
    qq邮箱:smtp.qq.com
    注意:163、公司内部邮箱用25和465端口均可以发送邮件(SMTP对应25,可以省略;SMTP_SSL对应465不可以省略),而qq只能用smtplib.SMTP_SSL(host, 465)发送!
    (3)smtp.login(username, password)
    username:登录邮箱的用户名。
    password:若为网易邮箱,或者qq邮箱则只能用相应的授权码,默认是关闭的,开启时在相应的网页邮箱设置处可以设置授权码,此授权码会随着密码的变更失效,那时需要重新获取。qq的pop和imap的授权码不同,但测试均可使用。
    (4)smtp.sendmail(sender, receiver, msg.as_string())
    from_addr:邮件发送者地址,字符串类型;
    receiver:若为单个地址直接用字符串表示,若收件人有多个,则用字符串列表:[‘接收地址1’,’接收地址2’,’接收地址3’,…]
    msg.as_string():为一个字符串类型
    (5)smtp.quit()
    用于结束SMTP会话。
    所以,用以上几步就可以实现一个邮件的发送,但发送的邮件无发件人,无主题,只有一个简单的msg.as_string()字符串作为内容。若需要添加各种附件等还需要email模块配合
    3)email模块
    email模块下有mime包(Multipurpose Internet Mail Extensions),即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范;
    该mime包下常用的有三个模块:text,image,multpart
    导入方法如下:
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    MIMEText对象:文本邮件对象
    MIMEImage对象:表示一个作为附件的图片
    MIMEMultipart对象:把多个对象组合起来
    MIMEBase对象:可表示任何对象
    Message对象:邮件对象
    (1)MIMEText对象说明
    邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为”text/plain”和”text/html”
    MIMEText(text, _subtype=’plain’, _charset=None, *, policy=None)
    第一个参数为邮件正文,第二个参数默认为plain(纯文本的普通文件),还可以指定为”html”,最后一定要用utf-8编码保证多语言兼容性。
    a)添加普通文本(指定编码为utf-8所以可以为中文)
    text = “Hi,All:\n How are you?\n我爱python”
    text_plain = MIMEText(text,’plain’, ‘utf-8’)
    b)添加html文本(可已有中文)
    python发邮件smtplib+mail
    c)添加附件
    python发邮件smtplib+mail
    这里的filename为要重命名显示的文件名,这里的方法附件名可以为中文,注意中间的那个空字符串不能省略。
    2)添加图片MIMEImage(直接显示图片内容)
    python发邮件smtplib+mail
    3)multpart说明
    常见的multipart类型有下面三种:
    multipart/alternative的邮件包括text/plain和text/html
    multipart/related:邮件正文中包括图片,声音等内嵌资源
    multipart/mixed:包含附件
    注意:向上兼容,如果一个邮件有纯文本正文,超文本正文,内嵌资源,附件,则选择mixed类型。
    msg = MIMEMultipart(‘mixed’),一开始就要设置msg对象,然后文本、图片、附件等用msg.attach(text_att/image)等附加。
    我们必须把Subject,From,To,Date添加到MIMEText对象或者MIMEMultipart对象中,邮件中才会显示主题,发件人,收件人,时间(若无时间,就默认一般为当前时间,该值一般不设置)。
    subject = ‘欢迎加入XX大家庭’
    msg = MIMEMultipart(‘mixed’)
    msg[‘Subject’] = subject
    msg[‘From’] = ‘你[email protected] [email protected]
    msg[‘To’] = ‘好[email protected]
    python发邮件smtplib+mail
    说明:
    msg.add_header(_name,_value,**_params):添加邮件头字段。
    msg.as_string():是将msg(MIMEText对象或者MIMEMultipart对象)变为str,如果只有一个html超文本正文或者plain普通文本正文的话,一般msg的类型可以是MIMEText;如果是多个的话,就都添加到MIMEMultipart,msg类型就变为MIMEMultipart。
    msg.attach(MIMEText对象或MIMEImage对象):将MIMEText对象或MIMEImage对象添加到MIMEMultipart对象中。MIMEMultipart对象代表邮件本身,MIMEText对象或MIMEImage对象代表邮件正文。
    以上的构造的文本,超文本,附件,图片都何以添加到MIMEMultipart(‘mixed’)中:
    msg.attach(text_plain)
    msg.attach(text_html)
    msg.attach(text_att)
    msg.attach(image)
    4)文字,html,图片,附件实现实例
    python发邮件smtplib+mail
    python发邮件smtplib+mail
    python发邮件smtplib+mail