Python SMTP协议实战:发送邮件及附件教程
5星 · 超过95%的资源 175 浏览量
更新于2024-09-01
1
收藏 77KB PDF 举报
本文详细介绍了如何在Python中利用SMTP协议实现发送邮件的功能。SMTP,即简单邮件传输协议,是电子邮件传输的标准,Python通过其内置的`smtplib`和`email`模块提供了对SMTP的支持。这两个模块分工明确,`email`模块用于构建邮件结构,而`smtplib`则负责实际的邮件发送。
首先,我们需要导入所需的模块:
```python
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
```
要创建一个SMTP连接,我们可以选择普通的SMTP服务或使用SSL加密的SMTP服务,示例如下:
```python
# 普通SMTP
smtpObj = smtplib.SMTP(host='smtp.example.com', port=587)
# 使用SSL加密
smtpObj = smtplib.SMTP_SSL(host='smtp.example.com', port=465)
```
在发送邮件之前,我们需要设置发件人和收件人的地址,以及邮件的内容。例如,发送纯文本邮件:
```python
from_addr = 'your_email@example.com' # 发件人邮箱
to_addrs = ['recipient1@example.com', 'recipient2@example.com'] # 收件人邮箱列表
# 构造邮件正文
msg = MIMEText('hello email', 'plain', 'utf-8')
# 设置发件人头信息
def format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8'), addr))
msg['From'] = format_addr('Sender Name <%s>' % from_addr)
msg['To'] = ', '.join(format_addr(to_addr) for to_addr in to_addrs)
# 发送邮件
smtpObj.sendmail(from_addr, to_addrs, msg.as_string(), mail_options=[], rcpt_options=[])
smtpObj.quit()
```
若需要发送带有附件或图片的邮件,可以使用`MIMEBase`和`MIMEMultipart`等类来构建邮件的多个部分。例如,添加附件:
```python
from email.mime.base import MIMEBase
from email import encoders
# 添加附件
with open('path_to_attachment', 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename='filename.txt')
# 将附件添加到邮件主体
msg.attach(part)
```
图片邮件则需先将其转换为二进制数据,然后添加到邮件中:
```python
img_data = open('path_to_image.jpg', 'rb').read()
image_part = MIMEImage(img_data, name='image.jpg')
image_part.add_header('Content-ID', '<image1>')
msg.attach(image_part)
```
在实际应用中,记得根据邮箱服务商的文档确认正确的服务器地址、端口以及可能需要的认证信息,如客户端授权密码。通过以上步骤,您可以灵活地使用Python的SMTP功能来发送各种类型的邮件。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-16 上传
2020-09-19 上传
2020-09-21 上传
2020-09-21 上传
点击了解资源详情
点击了解资源详情
weixin_38663007
- 粉丝: 4
- 资源: 904
最新资源
- 俄罗斯RTSD数据集实现交通标志实时检测
- 易语言开发的文件批量改名工具使用Ex_Dui美化界面
- 爱心援助动态网页教程:前端开发实战指南
- 复旦微电子数字电路课件4章同步时序电路详解
- Dylan Manley的编程投资组合登录页面设计介绍
- Python实现H3K4me3与H3K27ac表观遗传标记域长度分析
- 易语言开源播放器项目:简易界面与强大的音频支持
- 介绍rxtx2.2全系统环境下的Java版本使用
- ZStack-CC2530 半开源协议栈使用与安装指南
- 易语言实现的八斗平台与淘宝评论采集软件开发
- Christiano响应式网站项目设计与技术特点
- QT图形框架中QGraphicRectItem的插入与缩放技术
- 组合逻辑电路深入解析与习题教程
- Vue+ECharts实现中国地图3D展示与交互功能
- MiSTer_MAME_SCRIPTS:自动下载MAME与HBMAME脚本指南
- 前端技术精髓:构建响应式盆栽展示网站