python 發送郵件的兩種方式【終極篇】

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">
View Code

?

posted on 2018-07-05 15:28 _潛行者 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/wangwei916797941/p/9268561.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452093.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡爬蟲--2.HTTP和HTTPS

文章目錄一.簡介二.HTTP的請求與響應三.客戶端HTTP請求1.格式2.請求方法四.常用的請求報頭1.Host (主機和端口號)2.Connection (鏈接類型)3.Upgrade-Insecure-Requests (升級為HTTPS請求)4. User-Agent (瀏覽器名稱)5. Accept (傳輸文件類型)6.Referer (頁面跳轉處)7.Accept-En…

解決win7的outlook打不開的問題

outlook打不開&#xff0c;一直顯示正在處理 解決方法&#xff1a; 1. 按住Ctrl,雙擊打開組件&#xff0c;會提示是否進入安全模式&#xff0c; 進入安全模式 2. 單擊Outlook中的文件-選項-加載項- 左下角的“COM加載項“ 旁邊的“轉到”&#xff0c;將所有加載項前面的勾都去掉…

IBM王陽:軟件是凝聚創新力的最佳平臺

導讀&#xff1a;在IBM全球副總裁兼IBM中國開發中心總經理王陽博士看來&#xff0c;IBM百年不衰的根本原因在于將創新力凝結成軟件然后進行合適的傳播&#xff0c;其間最重要的是成功打造出了一個吸引人才、培養研發人才并激發出人才創新力的環境和氛圍。而保持創新領導力的關鍵…

數據庫的規范化

在關系數據庫中&#xff0c;對關系模式的基本要求是滿足第一范式。 規范化程度過低的關系不一定能夠很好地描述現實世界 可能存在插入異常、刪除異常、修改復雜、數據冗余等問題 解決方法就是對其進行規范化&#xff0c;轉換成高級范式 一個低一級范式的關系模式&#xff0c;通…

Jquery 多行拖拽圖片排序 jq優化

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery圖片拖動排序代碼</title><style type"text/css">.item_container{position:relative;height:auto;overflow:hidden;} .item_content ul{li…

應該把script標簽放在哪里

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 概述&#xff1a; 如果在頁面中寫JS的話&#xff0c;那必然會用到script標簽&#xff0c;理論上script標簽放在哪里都是可以的&#xff…

網絡爬蟲--3.str和bytes的區別

文章目錄一.bytes二.str和bytes相互轉換三.bytearray一.bytes bytes對象只負責以二進制字節序列的形式記錄所需記錄的對象&#xff0c;至于該對象到底表示什么&#xff08;比如到底是什么字符&#xff09;則由相應的編碼格式解碼所決定。 bytes是Python 3中特有的&#xff0c…

git使用問題

1、錯誤&#xff1a;The following untracked working tree files would be overwritten by checkout 。后面跟了幾個文件 場景&#xff1a;需要從一個分支切換到另一個分支時報錯 方法&#xff1a;git clean -d -fx "" 原因&#xff1a;之前修改了.gitignore文件&am…

jdbc寫入和讀取過程

[jdbc寫操作] Class.forName("com.mysql.jdbc.Driver"); Connection conn DriverManager.getConnection("jdbc:mysql://localhost:3306/big","root","root"); ppst conn.preparedStatement("insert into test(id,name,age) val…

分享11款主流的開源編程工具

導讀&#xff1a;有了開源編程工具&#xff0c;在基于開源許可證的情況下您可以輕松學習、修改、提高代碼的質量&#xff0c;本文收集了11款最主流的且有價值的開源編程工具。或許會給您帶來一絲驚喜。一起來看下吧。 NO.1 Rhomobile Rhodes Ruby或許是Github上第二大流行語言…

數據庫觸發器

觸發器是一種特殊類型的存儲過程&#xff0c;它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。觸發器可以查詢其它表&#xff0c;并可以包含復雜的Transact-SQL語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待…

jQuery中ready與load事件的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 jQuery中ready與load事件的區別 概述&#xff1a; 大家在工作中用jQuery的時候一定會在使用之前這樣&#xff1a;12345678//document rea…

網絡爬蟲--4.requests的簡單實用

文章目錄一.簡介二.基本GET請求1.最基本的GET請求--直接用get方法2.添加 headers 和查詢參數parmas3.通過requests獲取網絡上圖片的大小三.基本POST請求1.傳入data數據四.代理&#xff08;proxies參數&#xff09;五.私密代理六.web客戶端驗證七.Cookies 和 Sission1.Cookies2.…

編程各類資源大放送

小編的公眾號[編程軟文]一直在運營著&#xff0c;但是我的公眾號只是發一些技術類文章&#xff0c;沒有特地為自己的公眾號如何添粉去操作&#xff0c;目前公眾號關注度比較低。看著其他人的公眾號粉絲越來越多&#xff0c;小編也需要為自己做些事。為了提高自己公眾號的關注度…

使用Spring框架能帶來那些好處?

1、Dependency Injection(DI)方法使得構造器和JavaBean properties文件中的依賴關系一目了然。2、與EJB容器相比較&#xff0c;Ioc容器更加趨向于輕量級。這樣一來Ioc容器在郵箱的內存和CPU資源的情況下進行應用程序的開發和發布就變得十分有利。3、Spring并沒有閉門造車&#…

誰在告誰?移動專利混戰圖

移動領域激戰正酣&#xff0c;同樣是沒有永遠的朋友&#xff0c;只有永遠的利益。 蘋果剛剛起訴三星的Galaxy手機和平板電腦山寨了蘋果的產品&#xff0c;而此前兩家并沒有過節。再比如微軟和亞馬遜以及HTC之間的授權協議爭端。移動領域的爭端如此之多&#xff0c;以至于看客無…

java中list()和listfile()

File fnew File("c:\\");String[] f1f.list();File[] f2f.listFiles();① list() 返回一個字符串數組&#xff0c;這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。 以C盤為例&#xff0c;返回的是c盤下文件夾名字的字符串數組,如[TEMP, Windows]②listFile…

光棍節程序員闖關秀過關全攻略

maven/java/web/bootstrapQQ群&#xff1a;566862629。希望更多人一起幫助我學習。 光棍節程序員闖關秀過關全攻略。程序員的寂寞誰能懂?"SF光棍節程序員闖關秀"智力挑戰小游戲火熱上線&#xff0c;看看你能闖到第幾關&#xff1f; 游戲地址: http://segmentfault…

jekins搭建

2019獨角獸企業重金招聘Python工程師標準>>> 轉自 https://www.cnblogs.com/hdwang/p/6081994.html &#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xf…

網絡爬蟲--5.urllib庫的基本使用(1)

文章目錄一. 前言二. urlopen三. Request四. User-Agent五. 添加更多的Header信息1. 添加一個特定的header2. 隨機添加/修改User-Agent一. 前言 所謂網頁抓取&#xff0c;就是把URL地址中指定的網絡資源從網絡流中讀取出來&#xff0c;保存到本地。 在Python中有很多庫可以用來…