7.6. 附件的使用¶
E-mail 发送的内容有诸多限制。除了文字与图片,还有其他的内容需要发送给收件人,一般采用附件的办法。
7.6.1. smtplib发送附件¶
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
>>> import smtplib
>>> from email.mime.text import MIMEText
>>> from email.mime.multipart import MIMEMultipart
>>> from email.header import Header
>>> from cfg import email_cfg
>>> sender = email_cfg['user']
>>> password=email_cfg['passwd']
>>> receivers = [email_cfg['user']]
创建一个带附件的实例。
>>> message = MIMEMultipart()
>>> message['From'] = Header("附件的使用教程", 'utf-8')
>>> message['To'] = Header("测试", 'utf-8')
>>> subject = 'Python SMTP 邮件测试'
>>> message['Subject'] = Header(subject, 'utf-8')
写入邮件正文内容。
>>> message.attach(MIMEText('这是附件的使用邮件发送测试……', 'plain', 'utf-8'))
构造附件1,传送test.txt 文件。
>>> att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
>>> att1["Content-Type"] = 'application/octet-stream'
这里的filename可以任意写,写什么名字,邮件中显示什么名字。
>>> att1["Content-Disposition"] = 'attachment; filename="test.txt"'
>>> message.attach(att1)
构造附件2,传送当前目录下的 test2.txt 文件
>>> att2 = MIMEText(open('test2.txt', 'rb').read(), 'base64', 'utf-8')
>>> att2["Content-Type"] = 'application/octet-stream'
>>> att2["Content-Disposition"] = 'attachment; filename="test2.txt"'
>>> message.attach(att2)
>>> try:
>>> smtpObj = smtplib.SMTP_SSL('smtp.163.com',port=465)
>>> smtpObj.login(sender,password)
>>> smtpObj.sendmail(sender, receivers, message.as_string())
>>> print ("邮件发送成功")
>>> smtpObj.quit()
>>> except smtplib.SMTPException:
>>> print ("Error: 无法发送邮件")
邮件发送成功
7.6.2. yagmail发送附件¶
yagmail如何发送附件呢?只要添加一个附件列表就可以了。
导入yagmail库以及参数。连接smtp服务器邮箱。
>>> import yagmail
>>> from cfg import email_cfg
>>> sender = email_cfg['user']
>>> passwd=email_cfg['passwd']
>>> yag = yagmail.SMTP( user=sender, password= passwd, host='smtp.163.com')
附件可在写入内容时一同添加,test2.txt为此邮件的附件。
>>> contents = ['This is test', 'You can find an audio file attached.', 'test2.txt']
>>> yag.send([email_cfg['user'],'alanyers@163.com'], 'subject', contents)