import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from email import encoders from email.mime.base import MIMEBase from email.utils import parseaddr, formataddr
# 格式化邮件地址 def formatAddr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr))
def sendMail(body, attachment): account_password = 'VCGXTBHXFPVDVLGZ'
# 构造一个MIMEMultipart对象代表邮件本身 msg = MIMEMultipart() # Header对中文进行转码 msg['From'] = formatAddr('管理员 <%s>' % email_account) msg['To'] = ','.join(to_mail) msg['Subject'] = Header('监控', 'utf-8')
# plain代表纯文本 msg.attach(MIMEText(body, 'plain', 'utf-8'))
# 二进制方式模式文件 with open(attachment, 'rb') as f: # MIMEBase表示附件的对象 mime = MIMEBase('text', 'txt', filename=attachment) # 使用MIMEBase类构造附件并添加到msg对象 # filename是显示附件名字 mime.add_header('Content-Disposition', 'attachment', filename=attachment) # 获取附件内容 mime.set_payload(f.read()) encoders.encode_base64(mime) # 作为附件添加到邮件 msg.attach(mime) try: s = smtplib.SMTP() s.connect(smtp_server, "25") s.login(email_account, account_password) s.sendmail(email_account, to_mail, msg.as_string()) # as_string()把MIMEText对象变成str s.quit() except smtplib.SMTPException as e: print("Error: %s" % e) if __name__ == "__main__": sendMail('这是一封携带附件的测试邮件', 'test.txt')
file:///C:/Users/marco/AppData/Local/Temp/enhtmlclip/Image.png ![]() |