全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python实现Smtplib发送带有各种附件的邮件实例

这两天对Python的邮件模块比较感兴趣,于是就查了查资料。同时在实际的编码过程中也遇到了各种各样的问题。下面我就来分享一下我与smtplib的故事。

前提条件

我的上一篇博文里面讲解了,发送邮件必须的条件。这里同样是适用的。大致就是要开启邮箱的SMPT/POP服务等等。

核心知识点

因为今天主要讲解的是如何发送带有附件的邮件,那么核心肯定是附件了。怎么才能发附件呢?

其实我们换个思路,就不难理解了。因为我们发送邮件,经过了应用层–>> 传输层–>> 网络层–>>数据链路层–>>物理层。这一系列的步骤,全都变成了比特流了。所以无论是纯文本,图片,亦或是其他类型的文件。在比特流的面前,都是平等的。所以我们发送附件,也是按照发送纯文本的模式来做就行,只不过加上一些特殊的标记即可。

\# 首先是xlsx类型的附件
xlsxpart = MIMEApplication(open('test.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='test.xlsx')
msg.attach(xlsxpart)

\# jpg类型的附件
jpgpart = MIMEApplication(open('beauty.jpg', 'rb').read())
jpgpart.add_header('Content-Disposition', 'attachment', filename='beauty.jpg')
msg.attach(jpgpart)

\# mp3类型的附件
mp3part = MIMEApplication(open('kenny.mp3', 'rb').read())
mp3part.add_header('Content-Disposition', 'attachment', filename='benny.mp3')
msg.attach(mp3part)

经过这三小段的代码,想必你已经很清楚了吧。无非就是使用MIMEApplication进行包装一下,然后设置一下内容。最后添加到邮件内容。就是这几步,就搞定了。

完整的代码

# coding:utf-8

#  __author__ = 'Mark sinoberg'
#  __date__ = '2016/5/26'
#  __Desc__ = 实现发送带有各种附件类型的邮件

import urllib, urllib2
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

username = '156408XXXXX@163.com'
password = 'XXXXXXXX'
sender = username
receivers = ','.join(['10643XXXX2@qq.com'])

# 如名字所示: Multipart就是多个部分
msg = MIMEMultipart()
msg['Subject'] = 'Python mail Test'
msg['From'] = sender
msg['To'] = receivers

# 下面是文字部分,也就是纯文本
puretext = MIMEText('我是纯文本部分,')
msg.attach(puretext)

# 下面是附件部分 ,这里分为了好几个类型

# 首先是xlsx类型的附件
xlsxpart = MIMEApplication(open('test.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='test.xlsx')
msg.attach(xlsxpart)

# jpg类型的附件
jpgpart = MIMEApplication(open('beauty.jpg', 'rb').read())
jpgpart.add_header('Content-Disposition', 'attachment', filename='beauty.jpg')
msg.attach(jpgpart)

# mp3类型的附件
mp3part = MIMEApplication(open('kenny.mp3', 'rb').read())
mp3part.add_header('Content-Disposition', 'attachment', filename='benny.mp3')
msg.attach(mp3part)

## 下面开始真正的发送邮件了
try:
  client = smtplib.SMTP()
  client.connect('smtp.163.com')
  client.login(username, password)
  client.sendmail(sender, receivers, msg.as_string())
  client.quit()
  print '带有各种附件的邮件发送成功!'
except smtplib.SMTPRecipientsRefused:
  print 'Recipient refused'
except smtplib.SMTPAuthenticationError:
  print 'Auth error'
except smtplib.SMTPSenderRefused:
  print 'Sender refused'
except smtplib.SMTPException,e:
  print e.message

验证结果

没有什么比来张图片更有说服力的了。如图

错误总结

我遇到的错误如下:

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/mail/withappedix.py
Traceback (most recent call last):
 File "E:/Code/Python/MyTestSet/mail/withappedix.py", line 51, in <module>
  client.sendmail(sender, receivers, msg.as_string())
 File "D:\Software\Python2\lib\email\message.py", line 137, in as_string
  g.flatten(self, unixfrom=unixfrom)
 File "D:\Software\Python2\lib\email\generator.py", line 83, in flatten
  self._write(msg)
 File "D:\Software\Python2\lib\email\generator.py", line 115, in _write
  self._write_headers(msg)
 File "D:\Software\Python2\lib\email\generator.py", line 164, in _write_headers
  v, maxlinelen=self._maxheaderlen, header_name=h).encode()
 File "D:\Software\Python2\lib\email\header.py", line 410, in encode
  value = self._encode_chunks(newchunks, maxlinelen)
 File "D:\Software\Python2\lib\email\header.py", line 370, in _encode_chunks
  _max_append(chunks, s, maxlinelen, extra)
 File "D:\Software\Python2\lib\email\quoprimime.py", line 97, in _max_append
  L.append(s.lstrip())
AttributeError: 'list' object has no attribute 'lstrip'

Process finished with exit code 1

我的解决办法是

复制代码 代码如下:
receiver parameter was list type. either it should be list converted to string using join method or if it is a single recipient, then pass it as a string only

是的,就是receivers = ','.join(['10XXXXXXXX@qq.com'])。这样就搞定了。

也许,你遇到的错误不是我这个,那么也不用担心,我这里有一份比较齐全的错误码对照表。你可以对照着你的错误码来查找具体的错误原因。这样有的放矢,效率会更高一点的。

在编码的过程中,我也是遇到了很多意想不到的错误。而这些错误的错误码对我们来说是很有用的。这对我们测试代码以及找到其中出错的原因和有帮助。

企业退信的错误码对照表 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# smtplib  # 发送附件  # python  # 附件  # Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError  # python smtplib发送带附件邮件小程序  # python3模块smtplib实现发送邮件功能  # python3使用smtplib实现发送邮件功能  # python smtplib模块自动收发邮件功能(一)  # python利用smtplib实现QQ邮箱发送邮件  # python使用电子邮件模块smtplib的方法  # Python基于smtplib协议实现发送邮件  # 发送邮件  # 错误码  # 搞定了  # 对照表  # 的是  # 都是  # 我是  # 这一  # 多个  # 有的放矢  # 没有什么  # 感兴趣  # 就行  # 更高  # 更有  # 这对  # 你可  # 你已经  # 很清楚  # 如图 


相关文章: 制作网站的模板软件,网站怎么建设?  建站之星ASP如何实现CMS高效搭建与安全管理?  宝塔新建站点报错如何解决?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  孙琪峥织梦建站教程如何优化数据库安全?  制作农业网站的软件,比较好的农业网站推荐一下?  盐城做公司网站,江苏电子版退休证办理流程?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何在云服务器上快速搭建个人网站?  建站之星如何修改网站生成路径?  如何批量查询域名的建站时间记录?  建站之星云端配置指南:模板选择与SEO优化一键生成  北京网站制作公司哪家好一点,北京租房网站有哪些?  建站之星伪静态规则如何设置?  如何通过主机屋免费建站教程十分钟搭建网站?  建站之星安装失败:服务器环境不兼容?  如何高效完成自助建站业务培训?  网站制作报价单模板图片,小松挖机官方网站报价?  如何注册花生壳免费域名并搭建个人网站?  济南网站制作的价格,历城一职专官方网站?  如何在腾讯云服务器快速搭建个人网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何在阿里云服务器自主搭建网站?  制作销售网站教学视频,销售网站有哪些?  广州营销型建站服务商推荐:技术优势与SEO优化解析  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  html制作网站的步骤有哪些,iapp如何添加网页?  如何生成腾讯云建站专用兑换码?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  装修招标网站设计制作流程,装修招标流程?  如何通过智能用户系统一键生成高效建站方案?  西安大型网站制作公司,西安招聘网站最好的是哪个?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  焦点电影公司作品,电影焦点结局是什么?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  自助网站制作软件,个人如何自助建网站?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何在宝塔面板中创建新站点?  建站之星如何快速解决建站难题?  如何在云主机上快速搭建网站?  制作网站外包平台,自动化接单网站有哪些?  建站之星安装需要哪些步骤及注意事项?  如何通过虚拟机搭建网站?详细步骤解析  山东云建站价格为何差异显著?  建站之星如何实现五合一智能建站与营销推广?  如何在阿里云香港服务器快速搭建网站?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  建站VPS选购需注意哪些关键参数? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。