利用Python收发邮件
一封电子邮件的发送过程:
1. 发件人 -> MUA MUA: 邮件用户代理 像Outlook或faxmail之类的软件就属于MUA
2. MUA -> MTA MTA:邮件传输代理 邮件服务提供商就属于MTA,比如网易、新浪等
3、MTA->MTA 由于收发邮件双方的服务提供商可能不同,比如有的是@sina.com, 有的是@163.com 所有这时就要涉及到
MTA之间的转发
4、MTA->MDA MDA:邮件投递代理 邮件到达MDA后,邮件会存放在目的信箱的某个服务器上。
5、MDA->MUA 收件人要取到邮件必须要通过MUA从MDA上把邮件取到电脑本地
所以编写程序来实现发送和接收邮件,本质上就是:
1. 编写MUA把邮件发到MTA 这个过程使用SMTP协议
2. 编写MUA从MDA上收邮件 这个过程使用POP3或者IMAP协议
假设我们现在有两个邮箱:xxx@163.com xxx@qq.com
大多数的邮件服务商都需要手动打开SMTP发信和POP收信功能,否则只允许在网页登录。
(一)从163邮箱发送邮件到qq邮箱
注意:当用程序模拟MUA发送邮件时,要保证163邮箱的SMTP服务开启,而qq邮箱没有特殊设置(前提是你用网页打开邮箱)
网易默认开启这些服务,但是要成功发送邮件还要开启“客户端授权码”
开启之后会让用户设置一个授权码
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件,可以发送纯文本邮件、HTML邮件和带附件的邮件。
#!/usr/bin/python
#coding=utf-8
from email.mime.text import MIMEText
import smtplib
send_str = '''
你好:
收到信息请回复,谢谢!
此致
敬礼
'''
msg = MIMEText(send_str, 'plain', 'utf-8') #构建发送的正文文本,’send_str‘就是邮件的正文,’plain‘代表纯文本
from_addr = 'xxx@163.com' #发件人信箱
password = 'xxxxx' #客户端授权密码
to_addr = '871990719@qq.com' #收件人信箱
smtp_server = 'smtp.163.com' #smtp地址
msg['subject'] = 'python' #邮件主题
msg['from'] = from_addr #收件人
msg['to'] = to_addr #发件人
server = smtplib.SMTP_SSL() #使用SSL方式
server.connect(smtp_server, '465') #注意端口号是465
#server.set_debuglevel(1) #设置debug模式 可以显示交互过程
server.login(from_addr, password) #登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string()) #发送邮件 可以发送多人所以收件人地址是一个list
server.quit()
注意:通过实验发现 通过163信箱发送邮件时,“邮件主题” “收件人” “发件人”不能全空,否则发送会失败
(二)发送带附件的邮件
使用MIMEMutipart为邮件添加 “发送文本”和“附件”
send_str = '<h1 style="color:red">上岸报考祝您成功</h1>'
textApart = MIMEText(send_str, 'html', 'utf-8') #采用“html”格式发送文本,可以设置文本格式
pdfFileLocation = 'C:\\project\\io_file\\output\\'
pdfName = '报考 .pdf' #这里如果采用utf-8编码,发送邮件中的附件格式不正确
pdfFile = (pdfFileLocation+pdfName).decode('utf-8') #这里进行utf-8编码,以便正确查找文件位置
pdfApart = MIMEApplication(open(pdfFile, 'rb').read())
pdfApart.add_header('Content-Disposition', 'attachment', filename=pdfName)
msg = MIMEMultipart()
msg.attach(textApart)
msg.attach(pdfApart)
msg['subject'] = u'报考岗位分析'
msg['from'] = '上岸报考<exam_success@163.com>' #这种设置便于在收件人 的收件箱中显示发件人信息
msg['to'] = to_addr
后面发送邮件步骤同(一)
总结
以上是生活随笔为你收集整理的利用Python收发邮件的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: matlab常用代码及操作
- 下一篇: Python 常用函数 configpa