用Python实现一个简单的能够发送带附件的邮件程序的教程
作者:goldensun 时间:2023-04-08 11:45:48
基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。
在python中,MIME的这些对象的继承关系如下。
MIMEBase
|-- MIMENonMultipart
|-- MIMEApplication
|-- MIMEAudio
|-- MIMEImage
|-- MIMEMessage
|-- MIMEText
|-- MIMEMultipart
一般来说,不会用到MIMEBase,而是直接使用它的继承类。MIMEMultipart有attach方法,而MIMENonMultipart没有,只能被attach。
MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。
最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。
application/octet-stream表明“这是个二进制的文件,希望你们那边知道怎么处理”,然后客户端,比如qq邮箱,收到这个声明后,会根据文件扩展名来猜测。
下面上代码。
假设当前目录下有foo.xlsx/foo.jpg/foo.pdf/foo.mp3这4个文件。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
_user = "sigeken@qq.com"
_pwd = "***"
_to = "402363522@qq.com"
#如名字所示Multipart就是分多个部分
msg = MIMEMultipart()
msg["Subject"] = "don't panic"
msg["From"] = _user
msg["To"] = _to
#---这是文字部分---
part = MIMEText("乔装打扮,不择手段")
msg.attach(part)
#---这是附件部分---
#xlsx类型附件
part = MIMEApplication(open('foo.xlsx','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="foo.xlsx")
msg.attach(part)
#jpg类型附件
part = MIMEApplication(open('foo.jpg','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="foo.jpg")
msg.attach(part)
#pdf类型附件
part = MIMEApplication(open('foo.pdf','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="foo.pdf")
msg.attach(part)
#mp3类型附件
part = MIMEApplication(open('foo.mp3','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="foo.mp3")
msg.attach(part)
s = smtplib.SMTP("smtp.qq.com", timeout=30)#连接smtp邮件服务器,端口默认是25
s.login(_user, _pwd)#登陆服务器
s.sendmail(_user, _to, msg.as_string())#发送邮件
s.close()
标签:Python,邮件
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
利用色轮选择颜色搭配[译]
2009-10-31 18:24:00
![](https://img.aspxhome.com/file/UploadPic/200910/31/01-56s.jpg)
django 连接数据库出现1045错误的解决方式
2024-01-17 19:37:47
解决python执行不输出系统命令弹框的问题
2022-10-01 10:25:02
Python之os模块案例详解
2021-06-18 15:09:38
![](https://img.aspxhome.com/file/2023/6/90376_0s.png)
Python中with上下文管理协议的作用及用法
2022-09-27 16:05:24
![](https://img.aspxhome.com/file/2023/0/135250_0s.png)
PHP登录环节防止sql注入的方法浅析
2023-07-21 06:41:01
一篇文章带你了解python正则表达式的正确用法
2023-01-05 19:20:30
![](https://img.aspxhome.com/file/2023/6/133806_0s.png)
mysql中关于Myisam_recover自动修复的使用方法
2024-01-17 04:21:51
mysql5.7 修改用户初始密码的方法
2024-01-14 17:33:36
![](https://img.aspxhome.com/file/2023/8/117808_0s.png)
php基于websocket搭建简易聊天室实践
2023-11-17 12:45:42
![](https://img.aspxhome.com/file/2023/1/60391_0s.png)
javascript 获取链接文件地址中第一个斜线内的正则表达式
2024-02-25 07:53:28
使用Python读写多个sheet文件
2022-10-23 18:39:40
![](https://img.aspxhome.com/file/2023/2/131372_0s.png)
python读取与写入csv格式文件的示例代码
2023-08-09 09:07:15
SQL2005 ROW_NUMER实现分页的两种常用方式
2024-01-20 05:37:42
python 制作一个gui界面的翻译工具
2022-04-21 20:16:55
![](https://img.aspxhome.com/file/2023/9/91939_0s.png)
Python下使用Trackbar实现绘图板
2023-12-11 10:13:04
![](https://img.aspxhome.com/file/2023/3/102863_0s.png)
SQL- join多表关联问题
2024-01-28 06:22:48
![](https://img.aspxhome.com/file/2023/4/117804_0s.jpg)
Python OpenGL绘制一场烟花盛会
2021-02-08 06:12:44
![](https://img.aspxhome.com/file/2023/7/97027_0s.png)
Python中的集合一起来学习一下
2022-05-01 05:06:59
![](https://img.aspxhome.com/file/2023/8/81838_0s.png)
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2021-03-23 03:49:14
![](https://img.aspxhome.com/file/2023/4/85054_0s.png)