Python SMTP发送邮件

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【UE4 塔防游戏系列】09-防御塔升级、击杀敌人增加金钱

目录 效果 步骤 一、控件蓝图文本控件内容绑定金钱数 二、防御塔改造 三、击杀敌人增加金钱 四、防御塔升级功能 效果 步骤 一、控件蓝图文本控件内容绑定金钱数 1. 打开“TaFangGameMode”&#xff0c;新增一个变量命名为“PlayerMoney”&#xff0c;默认值设为2…

【Maven三】——maven生命周期和插件

系列文章目录 Maven之POM介绍 maven命令上传jar包到nexus 【Maven二】——maven仓库 maven生命周期和插件 系列文章目录前言一、什么是生命周期&why1.三套生命周期2.clean生命周期3.default生命周期4.site生命周期5.命令行与生命周期 二、插件目标三、插件绑定1.内置绑定2…

软通动力与华秋达成生态共创合作,共同推动物联网硬件创新

7月11日&#xff0c;在2023慕尼黑上海电子展现场&#xff0c;软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与深圳华秋电子有限公司(以下简称“华秋”)签署了生态共创战略合作协议&#xff0c;共同推动物联网硬件生态繁荣发展。当前双方主要基于软通动力的产品及解…

GO语言GMP模型

目录 程序入口 协程主动让出: 被动让出: schedule 监控线程 程序入口 在执行一系列检查和初始化&#xff08;创建多少个P&#xff0c;与M&#xff10;关联&#xff09;后&#xff0c;进入runtime.main,创建main goroutine,执行mian.mian。 一开始GO语言的调度只有M和G。每个M…

基于Selenium+Python的web自动化测试框架

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firef…

Linux下Nginx升级

nginx版本升级不会覆盖配置文件&#xff0c;但以防万一升级前请先备份配置文件或者配置文件夹 默认配置文件地址&#xff1a;/usr/local/nginx/conf/nginx.conf 1.下载 wget -c http://nginx.org/download/nginx-1.24.0.tar.gz 2.解压 tar -xvf nginx-1.24.0.tar.gz 3.nginx…

Mac的docker安装redis

Mac的docker安装redis 1、docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is an open source key-value store that… 12205 …

git如何撤销commit(未push)

文章目录 前言undo commitreset current branch to here Undo Commit&#xff0c;Revert Commit&#xff0c;Drop Commit的区别 是否删除对代码的修改是否删除Commit记录是否会新增Commit记录Undo Commit不会未Push会&#xff0c;已Push不会不会Revert Commit会不会会Drop Com…

PHP与Golang对战:两种语言的比较与应用场景探讨

引言 在软件开发领域&#xff0c;选择一种合适的编程语言对于项目的成功至关重要。而在今天的文中&#xff0c;我们将探讨两个备受争议的编程语言——PHP与Golang之间的对战。通过比较它们的优势和应用场景&#xff0c;帮助开发者更好地了解如何选择适合自己项目的语言。 PHP的…

青翼科技自主研发4路AD子卡FMC137

FMC137是一款基于VITA57.4标准规范的JESD204B接口FMC子卡模块&#xff0c;该模块可以实现4路14-bit、2GSPS/2.6GSPS/3GSPS ADC采集功能。该板卡ADC器件采用ADI公司的AD9208芯片&#xff0c;&#xff0c;与ADI公司的AD9689可以实现PIN脚兼容。该ADC与FPGA的主机接口通过16通道的…

verilog实现数码管静态显示

文章目录 verilog实现数码管静态显示一、任务要求二、实验代码三、仿真代码四、仿真结果五、总结 verilog实现数码管静态显示 一、任务要求 六个数码管同时间隔0.5s显示0-f。要求&#xff1a;使用一个顶层模块&#xff0c;调用计时器模块和数码管静态显示模块。 二、实验代码…

分布式数据库HBase,它到底是怎么组成的?

原文链接&#xff1a;http://www.ibearzmblog.com/#/technology/info?id8ac4902f82f525e1456624d5d7a545dc 前言 大数据的核心问题无非就是存储和计算这两个。Hadoop中的HDFS解决了数据存储的问题&#xff0c;而HBase就是在HDFS上构建&#xff0c;因此Hbase既能解决大数据存…

echarts实现渐变折线图并添加点击事件

折线图点击事件代码: let myChart = this.$echarts.init(document.getElementById(trendBoxECharts))myChart.getZr().on(click, params => {console.log(params)let pointInPixel = [params.offsetX, params.offsetY]if (myChart.containPixel(grid, pointInPixel)) {//点…

基于FME二开产品:NewGIS integration介绍

目录 前言 一、模板上传 二、模板在线运行 1.模板参数解析 2.模板运行 三、成果管理 总结 前言 爆肝两个月&#xff0c;我和我的团队终于打造出了一款能完美适配所有FME模板的在线模板管理平台&#xff0c;目前支持FME2021版本的所有模板的在线运行、管理。整体技术框架…

hibernate入门,springboot整合hibernate

Mybatis和Hibernate是我们常用的两大ORM框架&#xff0c;这篇文章主要介绍hibernate的使用&#xff0c;如何通过springboot整合hibernate&#xff0c;实现简单的crud功能。 添加依赖 首先&#xff0c;需要创建一个springboot项目&#xff0c;这里就取名为hibernate。项目创建完…

Stable Diffusion 丝滑无闪烁AI动画 Temporalkit+Ebsynth+Controlnet

早期的EbSynth制作的AI视频闪烁能闪瞎人的双眼,可以通过【temporalkit+ebsynth+controlnet】让视频变得丝滑不闪烁。 文章目录 插件准备丝滑视频制作插件准备 下载安装 EbSynth官网,这里需要输入email地址。 下载压缩包解压缩到任意位置,这里我放到了ebsynth_utility下。 …

.Net5 mvc项目UseBrowserLink插件功能失效的原因

前期基于.Net Framework创建的Web项目&#xff0c;使用了BrowserLink插件协助前端开发&#xff0c;功能一直都比较稳定&#xff0c;后来项目迁到.Net5 &#xff0c;发现BrowserLink 已经失去了从浏览器定位到项目源代码的功能&#xff0c;希望在后面的版本还能继续支持此版本&a…

layui的基本使用-Helloworld 三把斧的一把斧头的熟练起来

该笔记记录如何使用layui的模块化方法。 访问layui官网 Layui - 极简模块化前端 UI 组件库下载官网的layui压缩包文件&#xff0c;解压到本地文件夹&#xff0c;文件结构如下&#xff1a; vscode创建项目&#xff1b; 位置 测试写了三个文件夹&#xff0c;才测试出来bug 坑所在…

【JavaScript 03】语句 变量 变量提升 标识符 注释 区块 作用域 条件语句 循环语句 break continue 标签

JS 语句变量变量提升标识符注释区块条件语句ifif...elseswitch三元运算符 ?: 循环语句whilefordo...whilebreak语句 and continue语句标签 语句 JS程序的执行单位是行&#xff08;line&#xff09; **语句&#xff08;statement&#xff09;**是为了完成特定任务而进行的操作…

后端查询出的数据库数字自动补零和不补零

select CAST(YTD_CHANGE*100 as decimal(18,1)), round(YTD_CHANGE*100,1) from RP where data_date 20211231补零 round(PYTD_CHANGE_PER*100,1)不补零 CAST(PYTD_CHANGE_PER*100 as decimal(18,1))