python有许多用途,今天我们来学习如何使用python发邮件。
我们可以通过不同的协议,使用邮箱发送邮件。今天我们以SMTP协议作为例子。
首先我们来看看SMTP的定义。
一般的免费邮箱都是支持该协议的
如果我们想在163邮箱打开SMTP服务,则如下图,设置使用SMTP服务。
然后本次测试所需要的Python模块如下
下面输入发件邮箱和收件邮箱
然后输入邮件内容。
msg使用偶见对象,包含发件人msg['From'],收件人信息msg['To'],邮件主题msg['Subject']和msg.attach()
_format_addr()只是一个格式化函数。
通过MIMEBase对象即可添加附件,下面是添加一个图片(img.png)附件的代码。
最后就是对SMTP服务器的一些设置
运行代码,就可以完成邮件发送。
完整的python代码,感兴趣的同学可以自己试试...
from email import encoders
from email.header import Header
from email.utils import parseaddr, formataddr
import smtplib
from_addr = '@163.com' #发送邮件的邮箱
password = '' #发送邮箱的密码,一般和登录密码不相同,163邮箱此密码需要重新设置
to_addr = '@qq.com' #接受邮件的邮箱
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
# 邮件对象:
msg = MIMEMultipart()
msg['From'] = _format_addr('Python爱好者 ' % from_addr)
msg['To'] = _format_addr('管理员 ' % to_addr)
msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()
# 邮件正文是MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open('E:\img.png', 'rb') as f:
# 设置附件的MIME和文件名,这里是png类型:
mime = MIMEBase('image', 'png', filename='img.png')
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename='test.png')
mime.add_header('Content-ID', '')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
server = smtplib.SMTP(smtp_server, 25)#SMTP服务器默认端口是25
server.set_debuglevel(1)
server.login(from_addr, password)#登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string())#发送邮件
server.quit()
领取专属 10元无门槛券
私享最新 技术干货