E-mail 发送的内容有诸多限制。除了文字与图片,还有其他的内容需要发送给收件人,一般采用附件的办法。
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('xx_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('xx_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: 无法发送邮件")
邮件发送成功
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)