Python SMTP发送QQ邮件

本文介绍了如何通过Python的SMTP模块发送QQ邮件,包括开通SMTP权限获取授权码、发送纯文本和HTML格式邮件、添加附件,以及相关知识点的继承关系。提供了详细的操作步骤和运行结果展示。
摘要由CSDN通过智能技术生成

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

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

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


2、发送纯文本邮件:

import smtplib
from email.mime.text import MIMEText
from 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')  # 接收者名称

# 邮件正文MIMEText
msg.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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值