Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
在发送邮件前,首先申请一个163邮箱,开启SMTP功能,采用的是网易的电子邮件服务器smtp.163.com
源码如下:
#encoding:utf-8
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.utils import formataddr,parseaddr
import smtplib
import time
def _format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr))
#附件图片路径
src='E:\a\b'
#发件人地址
from_addr = '1234@163.com'
#邮箱密码
password ='1234'
#收件人地址
to_addr = '1234@qq.com'
#163网易邮箱服务器地址
smtp_server = 'smtp.163.com'
#设置邮件信息
msg = MIMEMultipart()
msg['From']=_format_addr('图片分享'%from_addr)
msg['To']=_format_addr('管理员'%to_addr)
msg['Subject'] = Header('图片分享','utf-8').encode()
now_time =time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))#获取当前时间
#邮件的正文是MIMEText
msg.attach(MIMEText(now_time+'请欣赏图片','plain','utf-8'))
#添加附件就是加上一个MIMEBase,从本地读取图片
for i in range(0,20):
with open(src+'\\img'+str(i)+'.jpg','rb') as f:
#这里附件的MIME和文件名,jpg类型
mime = MIMEBase('image','jpg',filename='img'+str(i)+'.jpg')
# 加上必要的头信息
mime.add_header('Content-Disposition', 'attachment', filename=str(i)+'.jpg')
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来
mime.set_payload(f.read())
# 用Base64编码
encoders.encode_base64(mime)
msg.attach(mime)
#发送邮件
server = smtplib.SMTP(smtp_server,25)
server.login(from_addr,password)
server.sendmail(from_addr,[to_addr],msg.as_string())
server.quit()