使用
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
在python中,MIME的这些对象的继承关系如下。
MIMEBase
|-- MIMENonMultipart
|-- MIMEApplication
|-- MIMEAudio
|-- MIMEImage
|-- MIMEMessage
|-- MIMEText
|-- MIMEMultipart
一般来说,不会用到MIMEBase,而是直接使用它的继承类。MIMEMultipart有attach方法,而MIMENonMultipart没有,只能被attach。
MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。
最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。
以上内容出自原文,下方带有链接。
特别说明
想通过QQ邮箱来发送邮件,需开启QQ邮箱的设置-账户里POP3/SMTP服务,通过发送短信验证来获得授权码,有了授权码后就可以在代码里添加了。
测试代码
#!/usr/bin/python
#!/usr/bin/python
# _*_ coding: utf-8 _*_
import os
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header
'''
函数说明:Send_email_text() 函数实现发送带有附件的邮件,可以群发,附件格式包括:xlsx,pdf,txt,jpg,png,mp3等都可以
参数说明:
1. subject:邮件主题
2. content:邮件正文
3. filepath:附件的地址, 输入格式为["","",...]
4. receive_email:收件人地址, 输入格式为["","",...]
'''
def Send_email_text(subject,content,filepath,receive_email):
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
sender = '[email protected]' #发送方邮箱
passwd = 'gmdfztzbinlvbiei' #填入发送方邮箱的授权码
receivers = receive_email #收件人邮箱
msgRoot = MIMEMultipart()
msgRoot['Subject'] = subject
msgRoot['From'] = sender
if len(receivers)>1:
msgRoot['To'] = ','.join(receivers) #群发邮件
else:
msgRoot['To'] = receivers[0]
part = MIMEText(content,_charset="utf-8")
msgRoot.attach(part)
##添加附件部分
for path in filepath:
part = MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=path)
msgRoot.attach(part)
try:
#s = smtplib.SMTP()
#s.connect("smtp.mail.aliyun.com") #这里我使用的是阿里云邮箱,也可以使用163邮箱:smtp.163.com
s = smtplib.SMTP_SSL('smtp.qq.com',465) #邮件服务器及端口号,qq邮箱
s.login(sender, passwd)
s.sendmail(sender, receivers, msgRoot.as_string())
print ("邮件发送成功")
except smtplib.SMTPException as e:
print("Error, 发送失败")
finally:
s.quit()
subject = "文件测试"
content = "Python 邮件测试"
#file_path = ["smtp.py","smtp_attach.py","smtpatt.py"] #发送三个文件到三个邮箱
file_path = os.listdir('./')
files.remove('smtp_attach.py')
receive_email = ["[email protected]","[email protected]","[email protected]"]
Send_email_text(subject,content,file_path,receive_email)
测试结果
相关参考
参考原文
简单的例子
一个附件例子