python 發送郵件的兩種方式【終極篇】
一,利用python自帶的庫?smtplib簡單高效
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header import smtplib from django.conf import settingsmail_host = settings.EMAIL_HOSTmail_user = settings.EMAIL_HOST_USERmail_pass = settings.EMAIL_HOST_PASSWORDsubject = subjectsender = settings.EMAIL_FROMreceiver = settings.TEST_EMAIL_TOmsg = MIMEMultipart()part = MIMEText(str(data), 'html')msg.attach(part)msg['from'] = Header('標題,也可以寫郵箱賬號', 'utf-8')msg['Subject'] = Header(subject, 'utf-8')msg["Accept-Language"] = "zh-CN"msg["Accept-Charset"] = "ISO-8859-1,utf-8"try:server = smtplib.SMTP()server.connect(mail_host)server.login(mail_user, mail_pass)server.sendmail(sender, receiver, msg.as_string())server.quit()except Exception:logger.error(msg=traceback.format_exc())
二,django郵件功能的使用
#settings.py: # qq IMAP/SMTP 配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' EMAIL_PORT = 25 # 或者 465/587是設置了 SSL 加密方式 # 發送郵件的郵箱 EMAIL_HOST_USER = ‘你的郵箱’ # 在郵箱中設置的客戶端授權密碼 EMAIL_HOST_PASSWORD = ‘你的IMAP授權碼’ # 如果重新設置了新的授權碼,直接使用最新的授權碼即可 EMAIL_USE_TLS = True # 這里必須是 True,否則發送不成功 # 收件人看到的發件人, 必須是一直且有效的 EMAIL_FROM = ‘Tencent<你的郵箱>' """ # qq POP3/SMTP 配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' EMAIL_PORT = 110 # 或者 995是設置了 SSL 加密方式 #發送郵件的郵箱 EMAIL_HOST_USER = '你的qq郵箱' #在郵箱中設置的客戶端授權密碼 EMAIL_HOST_PASSWORD = '你的pop3授權碼' # 如果重新設置了新的授權碼,直接使用最新的授權碼即可 EMAIL_USE_TLS = True # 這里必須是 True,否則發送不成功 #收件人看到的發件人 EMAIL_FROM = ‘Tencent<xxx@qq.com>’ """from django.core.mail import send_mail from django.core.mail import EmailMultiAlternatives #send mail def send_email(file_path, total, typical, dts):html_content = loader.render_to_string('email.html',{'dts': dts,'total': total,'typical': typical})email = EmailMultiAlternatives('title', html_content, settings.EMAIL_FROM, settings.EMAIL_TO)email.attach_file(file_path)email.content_subtype = "html"email.send()
?三、發送帶圖片和附件的郵件
1 import os 2 import datetime 3 import smtplib 4 import logging 5 import traceback 6 from email.mime.multipart import MIMEMultipart 7 from email.mime.image import MIMEImage 8 from email.mime.text import MIMEText 9 from email.header import Header 10 11 def send_img_mail(data, subject, recivers, attach_file=None): 12 base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) 13 mail_host = settings.EMAIL_HOST 14 mail_user = settings.EMAIL_HOST_USER 15 mail_pass = settings.EMAIL_HOST_PASSWORD 16 subject = subject 17 sender = settings.EMAIL_FROM 18 receiver = recivers 19 20 msg = MIMEMultipart() 21 msg.attach(MIMEText(str(data), 'html')) 22 23 with open(os.path.join(base_dir, 'dist/static/img/zk_header.png'), 'rb') as f: 24 msgImage = MIMEImage(f.read()) 25 msgImage.add_header('Content-ID', '<image1>') 26 msg.attach(msgImage) 27 28 with open(os.path.join(base_dir, 'dist/static/img/zk_footer.jpg'), 'rb') as f: 29 msgImage = MIMEImage(f.read()) 30 msgImage.add_header('Content-ID', '<image2>') 31 msg.attach(msgImage) 32 33 if attach_file: 34 last_month = datetime.datetime.today() - relativedelta(months=1) 35 attachment = MIMEText(open(attach_file, 'rb').read(), 'base64', 'gb2312') 36 attachment["Content-Type"] = 'application/octet-stream' 37 attachment["Content-Disposition"] = 'attachment; filename="XXX產品{0}月新增XX問題.xls"'. \ 38 format(last_month.month) 39 msg.attach(attachment) 40 41 msg['from'] = Header('XXXXXX', 'utf-8') 42 msg['Subject'] = Header(subject, 'utf-8') 43 msg["Accept-Language"] = "zh-CN" 44 msg["Accept-Charset"] = "ISO-8859-1,utf-8" 45 46 try: 47 server = smtplib.SMTP() 48 server.connect(mail_host) 49 server.login(mail_user, mail_pass) 50 server.sendmail(sender, receiver, msg.as_string()) 51 server.quit() 52 except Exception: 53 logger.error(msg=traceback.format_exc())
html文件格式:


<img src="cid:image1"> <img src="cid:image2">
?
posted on 2018-07-05 15:28 _潛行者 閱讀(...) 評論(...) 編輯 收藏