利用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协议

假设我们现在有两个邮箱:[email protected]    [email protected]

大多数的邮件服务商都需要手动打开SMTP发信和POP收信功能,否则只允许在网页登录。

(一)从163邮箱发送邮件到qq邮箱

注意:当用程序模拟MUA发送邮件时,要保证163邮箱的SMTP服务开启,而qq邮箱没有特殊设置(前提是你用网页打开邮箱)

利用Python收发邮件_第1张图片

网易默认开启这些服务,但是要成功发送邮件还要开启“客户端授权码”

利用Python收发邮件_第2张图片

开启之后会让用户设置一个授权码

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 = '[email protected]'        #发件人信箱
password = 'xxxxx'                       #客户端授权密码
to_addr = '[email protected]'  #收件人信箱
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 = '

上岸报考祝您成功

'
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'] = '上岸报考'   #这种设置便于在收件人 的收件箱中显示发件人信息
msg['to'] = to_addr 

后面发送邮件步骤同(一)

 

 

 

 

 

 

 

你可能感兴趣的:(python)