1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| import traceback import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from email.utils import formataddr as _formataddr
def formataddr(addr): return ','.join([_formataddr([a.split("@")[0].strip(), a.strip()]) for a in addr.split(',')])
""" smtp_server: SMTP服务器地址 from_addr: 发件人地址 to_addr: 收件人地址(多个地址用英文逗号分割) subject: 邮件主题 content: 邮件内容 attachmentpaths: 附件的文件路径 html: 邮件内容是否是HTML格式 ssl: 使用SMTP_SLL(465端口)还是SMTL(25端口) """ def send_email(smtp_server, from_addr, password, to_addr, subject, content, attachmentpaths=[], html=False, ssl=True): try: msg = MIMEMultipart() msg['From'] = formataddr(from_addr) msg['To'] = formataddr(to_addr) msg['Subject'] = subject if html: context_part = MIMEText(content, 'html', 'utf-8') else: context_part = MIMEText(content, 'plain', 'utf-8') msg.attach(context_part)
if attachmentpaths: for path in attachmentpaths: filedir, filename = os.path.split(path) part = MIMEApplication(open(path,'rb').read()) part.add_header('Content-Disposition', 'attachment', filename=filename) msg.attach(part)
if ssl: server=smtplib.SMTP_SSL(smtp_server, 465) else: server=smtplib.SMTP(smtp_server, 25) server.login(from_addr, password) server.sendmail(from_addr, to_addr.split(','), msg.as_string()) server.quit() return True except Exception: traceback.print_exc() return False
if __name__ == '__main__':
send_email("smtp.163.com", "kyo_86@163.com", "XXXXXXXXX", "kyo_86@163.com", f"测试HTML内容和附件发送", """ <html> <body> <img src="http://kyo86.com/images/saber.jpg"/> </body> </html> """, attachmentpaths=[r"./mailer.py"], html=True, ssl=True)
|