Python SMTP发送邮件

news2025/5/17 12:55:16

如何使用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服务,点击管理服务,在跳转的新页面中点击生成授权码,这将作为你的密码使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/770386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

疑问:为什么我的手机不能同时放两张电信卡呢?联通移动可以

很多后台的小伙伴私信我&#xff1a;“为什么我的双卡双待手机不能用两张电信卡呢&#xff1f;”其实我一直在认真的去查证这个问题&#xff0c;因为现在普遍网上的大流量手机卡套餐&#xff0c;电信是主力&#xff0c;如果第一张卡是电信&#xff0c;第二张卡不能使用电信了&a…

物联网大数据传输安全难题与解决方案

随着物联网时代的到来&#xff0c;大数据传输变得更加频繁和庞大&#xff0c;同时也给传输安全带来了更高的风险和挑战。本文将探讨物联网时代的大数据传输安全问题&#xff0c;并介绍镭速传输如何有效地解决这些问题。 首先&#xff0c;物联网时代的大数据传输面临的一个主要问…

查看IP地址方法(电脑IP地址方法)

查看IP地址方法 如何识别win7还是win10系统&#xff1f; &#xff08;一&#xff09;Win7系统电脑导航栏如下&#xff1a; &#xff08;二&#xff09;Win10系统电脑导航栏如下&#xff1a; 一、win7系统查看IP地址 方法一&#xff1a;查看网络设置 点击电脑导航栏最右下…

中间件上云部署 rocketmq

中间件上云部署 rocketmq rocketmq部署一、rokectmq介绍二、rokectmq特性三、使用rocketmq理由四、rocketmq 核心概念五、rocketmq角色六、rocketmq集群部署方式七、rocketmq集群部署7.1 环境说明7.2 构建rocketmq镜像7.3 获取rocketmq-dashboard镜像7.4 rocketmq部署描述文件编…

ROS学习——常用API

一、初始化 1.作用 ROS初始化函数 2.参数列表 argc------------封装实参的个数&#xff08;n1&#xff09; argv------------封装参数的数组 name----------为 节点命名&#xff0c;需要保证其唯一性 options---------节点启动选项 返回值&#xff1a;void 3.使用细节 …

超低输入电压升压电路解决方案

便携式产品一般都采用电池供电&#xff0c;而因为成本和体积方面的考虑&#xff0c;在设计上有减少使用电池数量及体积的趋势。另外&#xff0c;亦因全球能源问题&#xff0c;各种各类的电池使用已备受关注了。当中包括太阳能电池及燃料电池。 而这样就会影响到电源电压比设备所…

人工智能革命|是疯狂炒作还是大势所趋?

近期关于人工智能的话题与炒作激增。如果你看看过去五年“AI”一词的搜索量&#xff0c;就会发现它一直停滞&#xff0c;直到2022年11月30日&#xff0c;OpenAI 凭借 ChatGPT 引发了人工智能革命。 Google 趋势 — 过去 5 年“AI”搜索量 短短六个月内&#xff0c;究竟发生了…

系统学习Linux-搭建基础服务器实验集合

实验分析 主机DHCP分配静态253地址&#xff0c;需配置网关主机DNF静态分配252地址域名机dhcp自动分配地址要求251中继主机添加成两块网卡并配置两个网段的网卡地址DNS解析域名并把客户机251装apache、tomcat、ngnix并把根目录设置成web下 一、搭建DHCP服务器 vm1网卡 配置网…

「硬核」实操如何拥有一个自己的数字人模型

一、前言 近年来&#xff0c;随着人工智能技术&#xff0c;VR&#xff0c;元宇宙等技术的发展&#xff0c;数字人&#xff08;Digital Human&#xff09;逐渐成为研究的热点之一&#xff0c;数字人是指通过计算机技术模拟出的具有人类外表&#xff0c;动作和语言能力的虚拟人物…

【想要学习适当技能来处理复杂数据科学项目和“用数据思考”?看《现代数据科学(R语言·第2版)》就对了】

《现代数据科学(R语言●第2版)》是面向本科生的综合性数据科学教材&#xff0c;通过结合使用统计和计算方式来解决现实中的数据问题。本书不仅专注于案例或编程语法&#xff0c;还讲述如何利用最新R/RStudio计算环境中的统计编程&#xff0c;从各种数据中提取有意义的信息&…

Jmeter性能测试通过插件监控服务器资源使用情况

Jmeter作为性能测试的首选工具&#xff0c;那么在性能测试过程中如何方便快捷的监测服务器资源使用情况&#xff1f; 可以通过jmeter 安装"PerfMon(Servers Performance Monitoting)"插件并配合服务端资源监控工具进行实现&#xff0c;详细操作流程如下&#xff1a;…

微服务部署架起App运维的高速通道

今天来说下微服务&#xff0c;我们知道微服务在 App 开发中具备模块化开发、独立部署扩展、问题隔离等特点&#xff0c;这种微服务架构模式能够使应用程序更具弹性、可扩展和可维护&#xff0c;能够更好地应对快速变化的需求和规模的增长。 准备通过系统的梳理说一说微服务部署…

谷歌云构建漏洞容易引发潜在的供应链攻击

云安全公司Orca Security在谷歌云构建&#xff08;Google Cloud Build&#xff09;服务中发现了一个关键的设计漏洞&#xff0c;该漏洞会让攻击者的权限升级&#xff0c;使他们可以在未经授权的情况下访问谷歌构件注册表&#xff08;Google Artifact Registry&#xff09;代码库…

数学建模-多元线性回归分析

回归分析介绍和分类 数据分类及数据的来源 线性回归 四种模型的解释、虚拟变量的设置以及交互项的解释 3个定量&#xff0c;7个定类插入&#xff0c;表格&#xff0c;包含标题&#xff0c;标题换黑色 可以右键&#xff0c;复制表格&#xff0c;excel中设置三线表 ,gen(A)是参数…

基于Gerapy部署分布式爬虫管理平台

文章目录 1. 服务器安装scrapyd1.1 scrapyd安装1.2 scrapyd配置允许外网访问1.3 服务器安全组开启端口1.4 服务器防火墙开启端口1.5 scrapyd测试 2. Gerapy 环境搭建2.1 gerapy安装2.2 gerapy测试2.3 项目部署2.4 定时任务2.5 线上代码修改 Gerapy是一个Python的分布式爬虫部署…

Python 5类数据容器总结

数据容器简单分类&#xff1a; 是否支持下标索引 支持&#xff08;序列类型&#xff09;&#xff1a;列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字符串&#xff08;str&#xff09;不支持&#xff08;非序列类型&#xff09;&#xff1a;集合&…

论文解读: 2023-Lost in the Middle: How Language Models Use Long Contexts

大模型使用的关键在于Prompt&#xff0c;然而大模型存在幻觉现象&#xff0c;如何减少这种现象的发生成为迫切解决的问题。外部知识库LLM的方法可以缓解大模型幻觉&#xff0c;但是如何撰写Prompt才能发挥LLM的性能。下面介绍这篇论文说明上下文信息出现在Prompt什么位置使模型…

Python 算法基础篇之 Python 语言回顾:变量、条件语句、循环语句、函数等

Python 算法基础篇之 Python 语言回顾&#xff1a;变量、条件语句、循环语句、函数等 引言 1. 变量2. 条件语句3. 循环语句 a ) for 循环 b ) while 循环 4. 函数总结 引言 Python 是一种流行的编程语言&#xff0c;具有简洁而易读的语法。在学习算法时&#xff0c;了解 Python…

被B站用户高赞的广告文案:暴涨900万播放

今年6月&#xff0c;B站公布第一季度财报数据&#xff0c;B站日均活跃用户达9370万&#xff0c;月活3.15亿。在高月活的基础上&#xff0c;用户日均使用时长已经到了96分钟&#xff0c;日均视频播放量达41亿。 来源-B站 用户属性年轻、活跃度高已经成为B站典型的平台标签&…

Apikit 自学日记:私有云才有的测试文件库功能,该如何使用呢

在 APIkit 的私有云版本中&#xff0c;提供了测试文件库功能。不过目前该功能仅供私有云产品&#xff0c;线上SaaS产品不提供测试文件库功能 API自动化测试中可以添加文件参数。在这里统一管理所有测试文件。 在测试文件库界面&#xff0c;点击上传文件&#xff1a; 在私有云产…