1、邮件发送原理
发送方发送的信件内容经过SMPT协议上传到smpt服务器,转送给远方的smpt服务器,存储到存储设备,然后通过POP/IMAP协议从pop服务器上获取内容发给接收方。
2、常用服务器的名称、地址与端口:
3、使用qq邮箱发送邮件,需要在QQ邮件客户端进行配置:“设置”----“账户”,开启对应服务
POP3和IMAP的区别:POP3在客户端邮箱中所做的操作不会反馈到邮箱服务器,IMAP则会反馈到邮箱服务器,会做相应的操作
4、代码样例
python提供了smtplib、poplib与imaplib库,这些库可帮助我们接收发邮件。本部分利用smtplib库实现邮件发送,主要用smtplib.SMTP()类,用于连接SMTP服务器,发送邮件。
# coding:utf-8
import smtplib
from email.mime.text import MIMEText
import time
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email import encoders
from email.mime.base import MIMEBase
from email.utils import parseaddr, formataddr
from email.mime.image import MIMEImage
def SendMail(sender,receivers,cc_mail,mail_pass,content,file,image):
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
#message = MIMEText(content, 'plain', 'utf-8')#正文内容 plain代表纯文本
# 构造一个MIMEMultipart对象代表邮件本身
message= MIMEMultipart()
message.attach(MIMEText(content, 'html', 'utf-8'))# 正文内容 plain代表纯文本,html代表支持html文本
message['From'] =sender
message['To'] = ','.join(receivers) #与真正的收件人的邮箱不是一回事
message['Cc']=','.join(cc_mail)
subject = 'Python自动邮件-%s' % time.ctime()
message['Subject'] = subject #邮件标题
#添加文件到附件
with open(file,'rb') as f:
# MIMEBase表示附件的对象
mime = MIMEBase('text', 'txt', filename=file)
# filename是显示附件名字
mime.add_header('Content-Disposition', 'attachment', filename=file)
# 获取附件内容
mime.set_payload(f.read())
encoders.encode_base64(mime)
# 作为附件添加到邮件
message.attach(mime)
with open(image, 'rb') as f:
#图片添加到附件
mime = MIMEBase('image', 'image', filename=image)
mime.add_header('Content-Disposition', 'attachment', filename=image)
mime.set_payload(f.read())
encoders.encode_base64(mime)
message.attach(mime)
#将图片显示在正文
with open(image, 'rb') as f:
#图片添加到正文
msgImage = MIMEImage(f.read())
# 定义图片ID
msgImage.add_header('Content-ID', '')
message.attach(msgImage)
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(sender, mail_pass)
smtpObj.sendmail(sender, receivers+cc_mail, str(message)) #message.as_string()
smtpObj.quit()
print u"邮件发送成功"
except smtplib.SMTPException, e:
print e
if __name__ == "__main__":
sender = '[email protected]' #用户名与发送方
receivers = ['[email protected]','[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
cc_mail=['[email protected]'] #抄送人
# 口令,QQ邮箱是输入授权码,在qq邮箱设置 里用验证过的手机发送短信获得,不含空格
mail_pass = "iwbhitiyrhbfiecg"
content='''抢到票,速度登录12306付款
测试
仅用于测试
菜鸟教程
图片演示:
'''
file='Fx1.txt'
image='language.jpg'
SendMail(sender,receivers,cc_mail,mail_pass,content,file,image)