Python SMTP发送QQ邮件

来源:互联网 发布:每次开机都要修复网络 编辑:程序博客网 时间:2024/06/10 18:39

1、QQ邮箱开通SMTP权限,并获取授权码

QQ邮箱---->设置---->账户---->开启服务---->IMAP/SMTP服务---->获取授权码

发送方和接收方都必须开通


2、发送纯文本邮件:

import smtplibfrom email.mime.text import MIMETextfrom email.header import Header# 配置mail_host = 'smtp.qq.com'  # 服务器mail_port = 587  # 端口mail_sender = '******@qq.com'  # 发送者邮箱mail_psw = '******'  # 口令,不是邮箱密码mail_receivers = ['******@qq.com']  # 接收者邮箱# 内容msg_content = '邮件测试内容'msg_subject = 'SMTP邮件测试'msg_from = '发送者'msg_to = '接受者'msg = MIMEText(msg_content, 'plain', 'utf-8')  # 纯文本内容msg['Subject'] = Header(msg_subject, 'utf-8')  # 主题msg['From'] = Header(msg_from, 'utf-8')  # 发送者名称msg['To'] = Header(msg_to, 'utf-8')  # 接收者名称# 发送try:    stmpObj = smtplib.SMTP(mail_host, mail_port)  # 配置服务器和端口    stmpObj.starttls()  # 先加密,部分邮箱服务商要求加密传输,避免被窃听    stmpObj.login(mail_sender, mail_psw)  # 登录    stmpObj.sendmail(mail_sender, mail_receivers, msg.as_string())  # 发送邮件
    stmpObj.quit()
print('发送成功')except smtplib.SMTPException as e: print('Error:', e)


# 构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIMEsubtype,传入'plain',最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。

# as_string()MIMEText对象变成str

运行结果:


3、发送HTML格式邮件

msg_content = '''<p>邮件测试内容</p><p><a href='http://www.baidu.com'>百度链接</a></p>'''msg = MIMEText(msg_content, 'html', 'utf-8')  # 带HTML文本

运行结果:



4、同时支持HTML和Plain格式


msg = MIMEMultipart('alternative')msg['Subject'] = Header(msg_subject, 'utf-8')  # 主题msg['From'] = Header(msg_from, 'utf-8')  # 发送者名称msg['To'] = Header(msg_to, 'utf-8')  # 接收者名称msg.attach(MIMEText(str('Python测试内容'),'plain','utf-8'))msg.attach(MIMEText('<p><a href="http://www.baidu.com"></a></p>','html','utf-8'))


5、发送带附件的邮件


# 如果Email中要加上附件怎么办?带附件的邮件可以看做包含若干部分的邮件:# 文本和各个附件本身,所以,可以构造一个MIMEMultipart对象代表邮件本身,# 然后往里面加上一个MIMEText作为邮件正文,再继续往里面加上表示附件的MIMEBase对象即可:

# 邮件对象msg = MIMEMultipart()msg['Subject'] = Header(msg_subject, 'utf-8')  # 主题msg['From'] = Header(msg_from, 'utf-8')  # 发送者名称msg['To'] = Header(msg_to, 'utf-8')  # 接收者名称# 邮件正文MIMETextmsg.attach(MIMEText(msg_content, 'plain', 'utf-8'))# 邮件附件--图片attachment = MIMEBase('image','png',filename = 'bd_logo1.png')attachment.add_header('Content-Disposition','attachment',filename = 'bd_logo1.png')attachment.add_header('Content-ID','<logo>')attachment.add_header('X-Attachment-Id','logo')fp = open('bd_logo1.png','rb')attachment.set_payload(fp.read())  # 加载附件内容encoders.encode_base64(attachment)  # base64编码msg.attach(attachment)

# 要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,# 然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。# 如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。

6、继承关系


# 构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,# 如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,# 就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:


Message+- MIMEBase    +- MIMEMultipart    +- MIMENonMultipart        +- MIMEMessage        +- MIMEText        +- MIMEImage

参考链接:

廖雪峰

菜鸟教程

0 0
原创粉丝点击