Python 脚本使用 QQ 邮箱发送邮件
脚本内容
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
class QQMail:
def __init__(self,smtp_sender,smtp_passwd,
smtp_receiver):
self.smtp_server_host = 'smtp.qq.com'
self.smtp_sender = smtp_sender
self.smtp_passwd = smtp_passwd
self.smtp_receiver = smtp_receiver
def login(self):
self.smtp = SMTP_SSL(self.smtp_server_host)
try:
self.smtp.login(self.smtp_sender,self.smtp_passwd)
return True
except:
print("登录邮箱服务器失败!")
return False
def makeHeader(self,subject,sender_nick_name):
self.msg = MIMEMultipart()
self.msg["Subject"] = Header(subject,'utf-8')
self.nickName = Header(sender_nick_name,'utf-8').encode()
self.msg["From"] = f"{self.nickName} <{self.smtp_sender}>"
self.msg['To'] = ";".join(self.smtp_receiver)
def makeText(self,content,type="plain"):
self.msg.attach(MIMEText(content,type,'utf-8'))
def makeHtml(self,content):
self.makeText(content,type="html")
def addUploadFile(self,file_name,file_path):
attachment=MIMEApplication(open(file_path,'rb').read())
attachment.add_header('Content-Disposition','attachment',filename=file_name)
self.msg.attach(attachment)
def send(self):
try:
self.smtp.sendmail(self.smtp_sender,self.smtp_receiver,self.msg.as_string())
self.smtp.quit()
return True
except:
print("发送邮件失败!")
return False
if __name__ == "__main__":
qq = QQMail('11111@qq.com','1111',['111@test.com'])
if qq.login():
qq.makeHeader("脚本发送测试","脚本发送测试")
qq.makeHtml("<p><strong>smtplib模块主要负责发送邮件</strong></p>")
qq.addUploadFile("测试","./test")
qq.send()
文本发送测试
HTML 发送测试
附件发送测试
注意点
- 昵称需要编码,参考 QQ 的帮助文档 From合法性检查
- 需要发送 HTML 的格式的可以使用 HTML 的字符串
- 上传附件需要指定正确路径(推荐使用绝对路径)