Python SMTP发送邮件

该文章详细介绍了如何使用Python的smtplib和email库发送QQ邮件,包括发送普通文本邮件、HTML格式邮件、在HTML中嵌入图片以及添加附件。教程还强调了需要开启QQ邮箱的SMTP服务,并使用授权码作为密码进行身份验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何使用Python发送QQ邮件?如何发送带附件的邮件?这篇文章将详细说明

目录

一、发送邮件

二、发送HTML格式的邮件

三、在HTML中添加图片

四、发送带附件的邮件

五、最终整合版

六、配置指引


一、发送邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 邮件服务器配置
smtp_server = 'smtp.qq.com'
smtp_port = 587  # QQ邮箱的端口号为587

# 发送方邮箱账号和密码
sender_email = 'your_sender_email@qq.com' 
sender_password = 'your_sender_email_password'

# 接收方邮箱地址
receiver_email = 'receiver_email@qq.com'

# 创建邮件内容
subject = 'Python SMTP 邮件测试'
body = '这是一封使用Python发送的测试邮件。'
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = subject

# 添加邮件正文
# MIMEText有三个参数第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码可不填
message.attach(MIMEText(body, 'plain'))

# 发送邮件
try:
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    smtp.starttls()  # 开启TLS加密连接
    smtp.login(sender_email, sender_password)
    smtp.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败:", e)
finally:
    smtp.quit()

二、发送HTML格式的邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 邮件服务器配置
smtp_server = 'smtp.qq.com'
smtp_port = 587  # QQ邮箱的端口号为587

# 发送方邮箱账号和密码
sender_email = 'your_sender_email@qq.com' 
sender_password = 'your_sender_email_password'

# 接收方邮箱地址
receiver_email = 'receiver_email@qq.com'

# 创建邮件内容
subject = 'Python SMTP 邮件测试'
body = body = """<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">这是一个链接</a></p>"""

message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = subject

# 添加邮件正文
# MIMEText有三个参数第一个为文本内容,第二个 html设置文本格式,第三个 utf-8 设置编码可不填
message.attach(MIMEText(body, 'html'))

# 发送邮件
try:
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    smtp.starttls()  # 开启TLS加密连接
    smtp.login(sender_email, sender_password)
    smtp.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败:", e)
finally:
    smtp.quit()

三、在HTML中添加图片
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

# 邮件服务器配置
smtp_server = 'smtp.qq.com'
smtp_port = 587  # QQ邮箱的端口号为587

# 发送方邮箱账号和密码
sender_email = 'your_sender_email@qq.com' 
sender_password = 'your_sender_email_password'

# 接收方邮箱地址
receiver_email = 'receiver_email@qq.com'

# 创建邮件内容
subject = 'Python SMTP 邮件测试'
body = """<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">这是一个链接</a></p>
<p>图片演示:</p>
<p><img decoding="async" src="cid:image1"></p>"""

message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = subject

# 添加邮件正文
message.attach(MIMEText(body, 'html'))

# 指定图片为当前目录
fp = open('E:\demo\head_image.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
message.attach(msgImage)


# 发送邮件
try:
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    smtp.starttls()  # 开启TLS加密连接
    smtp.login(sender_email, sender_password)
    smtp.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败:", e)
finally:
    smtp.quit()

四、发送带附件的邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.image import MIMEImage

# 邮件服务器配置
smtp_server = 'smtp.qq.com'
smtp_port = 587  # QQ邮箱的端口号为587

# 发送方邮箱账号和密码
sender_email = 'your_sender_email@qq.com' 
sender_password = 'your_sender_email_password'

# 接收方邮箱地址
receiver_email = 'receiver_email@qq.com'

# 创建邮件内容
subject = 'Python SMTP 邮件测试'
body = """<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">这是一个链接</a></p>"""

message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = subject

# 添加邮件正文
message.attach(MIMEText(body, 'html'))

# 添加附件
import os
file_path = 'E:\\demo\\《Python+Cookbook》.pdf'
file_name = os.path.basename(file_path)  # 只获取文件名

with open(file_path, 'rb') as file:
    part = MIMEApplication(file.read(), Name=file_name)  # Name参数指定了附件的文件名
    part['Content-Disposition'] = f'attachment; filename="{file_path}"'
    message.attach(part)

# 发送邮件
try:
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    smtp.starttls()  # 开启TLS加密连接
    smtp.login(sender_email, sender_password)
    smtp.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败:", e)
finally:
    smtp.quit()

五、最终整合版
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.image import MIMEImage

# 邮件服务器配置
smtp_server = 'smtp.qq.com'
smtp_port = 587  # QQ邮箱的端口号为587

# 发送方邮箱账号和密码
sender_email = 'your_sender_email@qq.com' 
sender_password = 'your_sender_email_password'

# 接收方邮箱地址
receiver_email = 'receiver_email@qq.com'

# 创建邮件内容
subject = 'Python SMTP 邮件测试'
body = """<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">这是一个链接</a></p>
<p>图片演示:</p>
<p><img decoding="async" src="cid:image1"></p>"""

message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = subject

# 添加邮件正文
message.attach(MIMEText(body, 'html'))

# 指定图片为当前目录
fp = open('E:\demo\head_image.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
message.attach(msgImage)

# 添加附件
file_path = 'E:\\demo\\《Python+Cookbook》.pdf'
file_name = os.path.basename(file_path)  # 只获取文件名

with open(file_path, 'rb') as file:
    part = MIMEApplication(file.read(), Name=file_name)
    part['Content-Disposition'] = f'attachment; filename="{file_path}"'
    message.attach(part)

# 发送邮件
try:
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    smtp.starttls()  # 开启TLS加密连接
    smtp.login(sender_email, sender_password)
    smtp.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败:", e)
finally:
    smtp.quit()
六、配置指引

您需要将 your_sender_email@qq.com your_sender_email_password 替换为实际的发件人邮箱账号和密码,将 receiver_email@qq.com 替换为收件人的 QQ 邮箱地址。同时,确保开启了发件人邮箱的 SMTP 服务

其中your_sender_email_password 的密码应当在QQ邮箱的设置--帐户中找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击管理服务,在跳转的新页面中点击生成授权码,这将作为你的密码使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湿透剪自布

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值