这两天对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协议实现发送邮件
# 发送邮件
# 错误码
# 搞定了
# 对照表
# 的是
# 都是
# 我是
# 这一
# 多个
# 有的放矢
# 没有什么
# 感兴趣
# 就行
# 更高
# 更有
# 这对
# 你可
# 你已经
# 很清楚
# 如图
相关文章:
广州营销型建站服务商推荐:技术优势与SEO优化解析
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站之星如何实现五合一智能建站与营销推广?
建站之星安装后如何配置SEO及设计样式?
建站主机选虚拟主机还是云服务器更好?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
,巨量百应是干嘛的?
在线教育网站制作平台,山西立德教育官网?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
香港服务器如何优化才能显著提升网站加载速度?
如何在IIS管理器中快速创建并配置网站?
建站之星安装提示数据库无法连接如何解决?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
建站主机选购指南与交易推荐:核心配置解析
高端网站建设与定制开发一站式解决方案 中企动力
香港服务器网站卡顿?如何解决网络延迟与负载问题?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站168自助建站系统:快速模板定制与SEO优化指南
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
制作电商网页,电商供应链怎么做?
深圳网站制作平台,深圳市做网站好的公司有哪些?
家庭建站与云服务器建站,如何选择更优?
如何快速上传建站程序避免常见错误?
如何快速查询域名建站关键信息?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
网站代码制作软件有哪些,如何生成自己网站的代码?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
电商网站制作公司有哪些,1688网是什么意思?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
北京专业网站制作设计师招聘,北京白云观官方网站?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
建站之家VIP精选网站模板与SEO优化教程整合指南
岳西云建站教程与模板下载_一站式快速建站系统操作指南
网站设计制作公司地址,网站建设比较好的公司都有哪些?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何通过VPS建站实现广告与增值服务盈利?
湖北网站制作公司有哪些,湖北清能集团官网?
建站VPS推荐:2025年高性能服务器配置指南
如何选择建站程序?包含哪些必备功能与类型?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何快速辨别茅台真假?关键步骤解析
魔毅自助建站系统:模板定制与SEO优化一键生成指南
公司门户网站制作流程,华为官网怎么做?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
,在苏州找工作,上哪个网站比较好?
网站制作免费,什么网站能看正片电影?
网站企业制作流程,用什么语言做企业网站比较好?
如何在建站之星网店版论坛获取技术支持?
建站之星代理平台如何选择最佳方案?
如何解决VPS建站LNMP环境配置常见问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。