用Python实现一个简单的能够发送带附件的邮件程序的教程

 更新时间:2015年04月08日 09:52:58   投稿:goldensun  
这篇文章主要介绍了用Python实现一个简单的能够发送带附件的邮件程序的教程,用MIMEApplication模块来发送各种类型的文件,需要的朋友可以参考下

基本思路就是,使用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中的标签编码和独热编码示例详解

    Python中的标签编码和独热编码示例详解

    标签编码是一种用于将分类列转换为数值列的技术,以便它们可以通过仅采用数值数据的机器学习模型进行拟合,这篇文章主要介绍了Python中的标签编码和独热编码,需要的朋友可以参考下
    2023-07-07
  • Python中判断input()输入的数据的类型

    Python中判断input()输入的数据的类型

    在pyhton中,经常会用到input()语句,但是input()语句输入的内容只能是字符串类型,而我们经常要输入int类型的数据等,这个时候就需要用到int()方法给输入的内容强制转换,今天小编给大家介绍下Python中判断input()输入的数据的类型,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • python自动化脚本安装指定版本python环境详解

    python自动化脚本安装指定版本python环境详解

    这篇文章主要为大家详细介绍了python自动化脚本安装指定版本python环境的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • python 包之 APScheduler 定时任务

    python 包之 APScheduler 定时任务

    这篇文章主要介绍了python 包之 APScheduler 定时任务,文章基于python的相关资料展开主题内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 在Pytorch中使用样本权重(sample_weight)的正确方法

    在Pytorch中使用样本权重(sample_weight)的正确方法

    今天小编就为大家分享一篇在Pytorch中使用样本权重(sample_weight)的正确方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • pycharm编写spark程序,导入pyspark包的3中实现方法

    pycharm编写spark程序,导入pyspark包的3中实现方法

    这篇文章主要介绍了pycharm编写spark程序,导入pyspark包的3中实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python面向对象之接口、抽象类与多态详解

    Python面向对象之接口、抽象类与多态详解

    这篇文章主要介绍了Python面向对象之接口、抽象类与多态,结合实例形式详细分析了Python面向对象中接口、抽象类及多态的概念、用法及相关操作注意事项,需要的朋友可以参考下
    2018-08-08
  • 关于Keras Dense层整理

    关于Keras Dense层整理

    这篇文章主要介绍了关于Keras Dense层整理,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 简单了解django文件下载方式

    简单了解django文件下载方式

    这篇文章主要介绍了简单了解django三种文件下载方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python安装完成后可以进行的后续步骤和注意事项小结

    python安装完成后可以进行的后续步骤和注意事项小结

    本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、包管理与安全,感兴趣的朋友一起看看吧
    2025-01-01

最新评论