zoukankan      html  css  js  c++  java
  • Python发送多附件邮件的方法

    Python发送多附件邮件的基本思路,首先就是用MIMEMultipart()方法来表示这个邮件由多个部分组成。然后再通过attach()方法将各部分内容分别加入到MIMEMultipart容器中。MIMEMultipart有attach()方法,而MIMENouMultipart没有,只能被attach。
    python中MIME各对象的继承关系如下:

    MIME有很多种类型,如果附件是文本格式,就是MIMEText;如果是图片格式就行MIMEImage;如果是音频格式就用MIMEAudio,如果是其他类型的格式例如pad,word、Excel等类型的,就很难确定用那种MIME了,此时可以使用MIMEApplication()方法。MIMEApplication默认子类型是application/octet-stream,表明“这是个二进制,不知道文件的下载类型”,客户端收到这个声明后,根据文件后的扩展名进行处理。

    import smtplib
    import unittest
    import HTMLTestRunner
    import os,time,datetime
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.audio import MIMEAudio
    from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication
    from email.header import Header
    
    # 定义发送邮箱和接收邮箱
    sender = 'XXX@qq.com'
    receivers = ['XXX@qq.com']
    
    # 多附件邮件基本思路,首先用MIMEMultipart()来标识这个邮件由多个部分组成
    # 然后通过Header方法,定义邮件的发送人、接收人、邮件标题;MIMEtext构造邮件正文
    # 然后再用attach()方法将各部分内容分别加入到MIMEMultipart容器内
    message = MIMEMultipart()
    message['From'] = Header("python程序", 'utf-8')
    message['To'] =  Header("丑小鸭", 'utf-8')
    message['Subject'] = Header('带附件的邮件测试', 'utf-8')
    message.attach(MIMEText('这是用Python编写的邮件发送程序……', 'plain', 'utf-8'))
    
    
    #通过MIMEApplication构造附件1
    att1=MIMEApplication(open('E:\\Path\\fliename','rb').read())
    att1["Content-Type"]='application/octet-stream'
    #att1["Content-Disposition"] = 'attachment; filename="test1.html"'
    att1.add_header('content-disposition', 'attachment', filename='fujian1.html')
    message.attach(att1)
    
    
    #通过MIMEText构造附件2文本
    #Content-Type(内容类型)定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件
    #[Content-Type介绍](https://www.runoob.com/http/http-content-type.html)
    #application/octet-stream:二进制流数据(如常见的文件下载)
    # Content-Disposition激活附件下载对话框。Content-Disposition有两种属性:inline 和 attachment
    # inline:默认值,将文件内容直接显示在页面;
    # attachment:弹出对话框,让用户下载
    # filename:定义下载文件的文件名。
    att2=MIMEText(open('E:\\Path\\filename.txt','rb').read(),'base64','utf-8')
    att2["Content-Type"]='application/octet-stream'
    att2["Content-Disposition"] = 'attachment; filename="fujian2.txt"'
    message.attach(att2)
    
    
    #通过MIMEImage构造附件3图片
    att3=MIMEImage(open('E:\\path\\filename.jpg','rb').read())
    att3["Content-Type"]='application/octet-stream'
    att3["Content-Disposition"] = 'attachment; filename="fujian3.jpg"'
    message.attach(att3)
    
    
    #通过MIMEAudio构造附件4。MEMEAudio需要定义音频类型
    #[不同音频对应的类型参考](http://https://www.cnblogs.com/zhongcj/archive/2008/11/03/1325293.html )
    att4=MIMEAudio(open('E:\\path\\filename.mp3','rb').read(),'audio')
    att4["Content-Type"]='application/octet-stream'
    att4["Content-Disposition"] = 'attachment; filename="fujian4.mp3"'
    message.attach(att4)
    
    # 链接SMTP服务器
    #[开通QQ邮箱SMTP服务,获取授权码](http://https://www.cnblogs.com/givemelove/p/11097778.html)
    smtp = smtplib.SMTP()
    smtp.connect('smtp.qq.com')
    smtp.login('XXXX@qq.com', '授权码')
    smtp.sendmail(sender, receivers, message.as_string())
    print ("邮件发送成功!!!")
    smtp.quit()
    
    

    运行后,查看对应的测试结果:

  • 相关阅读:
    (资源搜索类)几个好用的磁力搜索网站
    百度网盘不限速,直接获取直链
    百度网盘偷偷更新,免费也终于不限速了
    ES6新特性之箭头函数与function的区别
    [亲测可用]BCompare文件比较对比工具4.3.4绿色版
    Autofac 动态获取对象静态类获取对象
    Linq to SQL 语法整理(子查询 & in操作 & join )
    小程序监听页面滚动开始和滚动结束
    C# Task.Run 和 Task.Factory.StartNew 区别
    Entity Framework Core必须牢记的三条引用三条命令
  • 原文地址:https://www.cnblogs.com/sunjump/p/15593585.html
Copyright © 2011-2022 走看看