Python发送邮件

想实现发送邮件需要经过以下几步:
1、登录邮件服务器
2、构造符合邮件协议规则要求的邮件内容
3、发送

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件,它对smtp协议进行了简单的封装。

这里我们用qq邮箱为例,并且自己是可以给自己发邮件的。
在开始前我们先做准备工作:
登录qq邮箱,后点击“设置”
在这里插入图片描述
点击“账户”
在这里插入图片描述
确保前两项已开启,然后点击生成授权码。
因为我们网页登录时的密码是不可以用来python上使用;qq为了安全,我们平常用网页或者qq官方的客户端可以用我们的qq密码登录,但是第三方(比如python)是不可以登录的。
所以要生成第三方授权码。
在这里插入图片描述

在这里插入图片描述

代码

import smtplib
from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件头

# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人的SMTP服务器,端口号25
smtp_obj.login("你的qq账号", 'admc********')  # 括号中的内容分别是发件人邮箱账号、授权码
smtp_obj.set_debuglevel(1)  # 显示调试信息,可以不用写

# 设置邮件头信息
msg = MIMEText("测试用Python发送email。", "plain", "utf-8")  # 正文内容
msg['From'] = Header("小天天", 'utf-8')  # 发件人名字
msg["To"] = Header("有缘人", "UTF-8")  # 接收者名字
msg["Subject"] = Header('用Python发送邮件2022', 'utf-8')  # 主题

# 发送
smtp_obj.sendmail('发送人邮箱', ['接收人邮箱'], msg.as_string())
#第一个是发送人邮箱;第二个是数组,说明可以给多个人发送;msg就是刚刚写的发送内容。

运行代码
在这里插入图片描述
细节:SMTP使用是25端口,SSL使用的是456端口;SMTP是明文发送,SSL是加密发送

发送html格式的内容

主要代码和上面基本一样,只是将文本改成html的代码内容而已

import smtplib
from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件头

# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人的SMTP服务器,端口号25
smtp_obj.login("你的qq账号", 'admc********') # 括号中的内容分别是发件人邮箱账号、邮箱密码
smtp_obj.set_debuglevel(1)  # 显示调试信息,可以不用写

# 设置邮件头信息
# HTML
msg_body='''
    <h4>python发送html格式的邮件</h4>
    <p>
        测试用HTML格式发送邮件
    </p>
'''
msg = MIMEText(msg_body, "html", "utf-8") # 将plain改成html
msg['From'] = Header("小天天", 'utf-8')  # 发件人名字
msg["To"] = Header("有缘人", "UTF-8")  # 接收者名字
msg["Subject"] = Header('用Python发送邮件2022', 'utf-8')  # 主题

# 发送
smtp_obj.sendmail('发送人邮箱', ['接收人邮箱'], msg.as_string())

在这里插入图片描述

Python发送电子邮件可以通过 `smtplib` 库完成,它是标准库的一部分,因此不需要额外安装。下面是一个简单的介绍以及示例代码展示如何用 Python 发送带附件、HTML 内容等不同类型的邮件。 ### 使用 smtplib 和 email 模块发送基础文本邮件 1. **导入必要的模块** - `smtplib`: 用于SMTP协议通信。 - `email.mime.text.MIMEText`, `email.mime.multipart.MIMEMultipart`: 构造复杂的MIME消息体。 2. **设置服务器信息** 设置你的 SMTP 服务器地址及端口号,默认情况下 Gmail 的 SMTP 地址是 `"smtp.gmail.com"` 并且 SSL/TLS 加密连接默认使用465/587端口。 3. **构造邮件内容** 创建 MIME 格式的邮件对象,并设定主题、发件人、收件人等基本信息。 4. **登录邮箱账户并发送邮件** #### 基础文本邮件发送实例 ```python import smtplib from email.mime.text import MIMEText from email.header import Header # 定义变量 sender = "your_email@example.com" # 发件人的邮箱账号 receiver = ["recv_email1@example.com"] # 收件人的邮箱账号(支持多个) subject = "测试邮件标题" body = "这是一个来自Python脚本的基础文本邮件" msg = MIMEText(body, 'plain', 'utf-8') # 文本正文 msg['Subject'] = Header(subject, 'utf-8') # 主题 msg['From'] = sender # 显示的发件人名称 msg['To'] = ",".join(receiver) # 显示的收件人名单 try: server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) # 使用SSL加密的方式链接到QQ企业邮服务器 login_result = server.login(sender, "your_password") # 登录验证 print(f"Login status code:{login_result}") if int(login_result) == 235: # 如果返回的状态码等于235表示认证成功 send_status = server.sendmail(sender, receiver, msg.as_string()) print(send_status) if not send_status: print('邮件已成功发出') else: print('邮件发送失败:', send_status) except Exception as e: print(f'发生错误:{e}') finally: server.quit() # 关闭连接 ``` 请注意,出于安全考虑,在生产环境中应避免直接将密码写入源代码文件中。推荐做法是从环境变量读取或者利用第三方服务如 OAuth 授权等方式替代传统用户名+密码组合来进行身份校验。 --- 接下来是一些高级功能的应用场景说明: * **带有 HTML 格式的内容**: 将第二步中的 `MIMEText()` 函数第二个参数改为 `'html'` 即可构建HTML格式的消息体; * **附加普通文件**: 使用 `email.mime.base.MIMEBase` 类结合 `encoders.encode_base64()` 方法编码二进制数据加入到 MIMEMultipart 对象里作为附件; * **同时包含文字和平面媒体资源(例如图片)** : 把所有非文本部分当作独立部件挂载至根容器之下形成复合型MIME文档结构。 如果需要进一步了解上述任意一种情况的具体实现,请告诉我!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值