1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          Python3

          來源:互聯網轉載 時間:2024-01-29 08:26:47

          1.?????環境

          操作系統

          Win10

          IDE

          PyCharm Community 2018.1

          Python

          3.5

          2.?????設置QQ郵箱

          ????QQ郵箱是SSL認證的郵箱系統,要用QQ郵箱發送郵件,需要開啟POP3/ SMTP服務,并獲取授權碼。

          2.1??開啟POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務

          ? ? 1) ?打開QQ郵箱,點擊【設置】

          ? ? 2)在【賬戶】tab頁,找到【POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務】,點擊【開啟】POP3/SMTP服務

          2.1??QQ號申請第二代密碼保護

          ????如果QQ號還沒申請第二代密碼保護,則會彈出【驗證保密】對話框

          ?? ? 1)在【驗證保密】對話框中,點擊【申請密?!堪粹o

          ? ? 2) ?彈出【QQ安全中心】頁面,點擊【密保手機】右邊的【設置】按鈕

          ? ? 3) ?輸入手機號碼后,點擊【確定】按鈕,手機上會收到驗證碼

          ? ? 4)輸入手機上收到的驗證碼后,點擊【確定】按鈕

          ? ? 5) ?申請成功

          2.3??繼續開啟POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務

          ????1) ?QQ號碼申請第二代密保成功后,點擊【驗證密?!繉υ捒蛑械摹疚乙呀浲瓿稍O置】按鈕

          ? ? 2) ?用手機往1069070069發送內容為【配置郵件客戶端】的短信后,點擊【我已發送】按鈕

          ?3) ?彈出【開啟POP3/SMTP】對話框,其中的虛線框中就是授權碼

          2.4??獲取授權碼

          ????如果之前已經開啟了POP3/SMTP服務,而已經忘了之前申請的授權碼的話,可以點擊下圖中的【生成授權碼】鏈接。

          可以重新發送短信獲取授權碼。試了一下,舊授權碼和新授權碼都可以用。

          3.?????代碼

          ????前面已經提到過,QQ郵箱是SSL認證的郵箱系統,因此用QQ郵箱發送郵件,需要創建一個SMTP_SSL對象,而不是SMTP對象,然后用發送郵箱及之前獲取到的授權碼login,最后調用sendmail()發送郵件。

          import smtplibsmtpserver = "smtp.qq.com"smtpport = 465from_mail = "aaaaa@qq.com"to_mail = ["bbbbb@qq.com"]password = "****************"   # 16位授權碼try:????smtp = smtplib.SMTP_SSL(smtpserver,smtpport)????smtp.login(from_mail,password)????smtp.sendmail(from_mail,to_mail,msg.as_string())except(smtplib.SMTPException) as e:    print(e.message)finally:    smtp.quit()

          用try-except-finally括起來,是為了捕捉可能的錯誤信息。

          ?????這很簡單,但細心的讀者應該注意到,上面代碼中所有的方法的參數都有定義,唯獨sendmail(from_addr, to_addrs, msg)的第3個參數msg,即郵件的發送內容沒有定義,而發送郵件的關鍵就在于此。發送內容的格式是SMTP規定的,如果不符合規定,即會導致郵件發送失敗。?

          ????郵件主要包括三個部分:一是我稱之為屬性的部分,二是正文,三是附件。包含各部分內容的是一個MIMEMultipart對象,其實郵件的任何部分都是可以為空的,甚至都為空,還是可以成功發送的。下面主要討論的就是這三部分內容的組織。

          3.1??組織郵件屬性

          ????郵件的屬性,我指的是諸如發件人、主題、收件人、抄送等。

          from email.mime.multipart import MIMEMultipartfrom email.header import Headersubject = "test report"from_name = "水云之外"from_mail = "aaaaaa@qq.com"to_mail = ["bbbbbb@qq.com"]cc_mail = ["cccccc@qq.com"]msg = MIMEMultipart()msg["Subject"] = Header(subject, "utf-8")msg["From"] = Header(from_name + " <" + from_mail + ">", "utf-8")msg["To"] = Header(",".join(to_mail), "utf-8")msg["Cc"] = Header(",".join(cc_mail), "utf-8")

          3.2??組織郵件正文

          3.2.1???文本格式正文

          ????用正文字符串生成一個plain類型的MIMEText對象,可指定編碼,然后黏貼到代表郵件全部內容的MIMEMultipart對象中。

          from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextbody = "hi, the attachment is the test report of this test, please check it in time."msg = MIMEMultipart()msgtext = MIMEText(body, "plain", "utf-8")msg.attach(msgtext)

          3.2.2???HTML格式正文

          ????HTML格式的正文和文本格式的正文,唯一區別就是MIMEText對象的類型不同,是html,當然正文字符串應該是一個符合html格式的字符串。

          from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextbody = "<h3>hi, the attachment is the test report of this test, please check it in time.</h3>"msg = MIMEMultipart()msgtext = MIMEText(body, "html", "utf-8")msg.attach(msgtext)

          3.2.3???包含圖片的正文

          ????包含圖片的正文,其實是一種特殊的html格式正文,正文字符串應符合html格式,且包含img標簽,指定src,用讀入圖片文件創建一個MIMEImage對象,指定其屬性,應和src中相匹配,最后將MIMEImage對象也黏貼到MIMEMultipart對象中。

          from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImageimgbody = '''<h3>hi, the attachment is the test report of this test, please check it in time.</h3><img src="cid:image1"/>'''imgfile = r"..testresult.png"msg = MIMEMultipart()msgtext = MIMEText(imgbody, "html", "utf-8")msg.attach(msgtext)file = open(imgfile, "rb")img = MIMEImage(file.read())img.add_header("Content-ID", "<image1>")msg.attach(img)

          3.3??組織郵件附件

          ????經驗證,文本文件、HTML文件和圖片文件(png),都可以用下面的代碼組裝到郵件內容中。生成一個MIMEBase對象,讀入附件文件加載到該對象中,編碼、添加頭后同樣黏貼到MIMEMultipart對象中。

          from email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBaseattfile = r"..testresult.html"msg = MIMEMultipart()att = MIMEBase("application", "octet-stream")file = open(file, "rb")att.set_payload(file.read())encoders.encode_base64(att)list = file.split("\")filename = list[len(list) - 1]att.add_header("Content-Disposition", "attachment; filename='%s'" %filename)msg.attach(att)

          4.?????最終代碼

          4.1??MailAssembler類

          ????包含三個方法:attachAttributes()、attachBody()和attachAttachment(),分別用來組裝屬性、正文和附件。

          from email.header import Headerfrom email.mime.base import MIMEBasefrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email import encodersclass MailAssembler:    def attachAttributes(self,msg,subject,from_name,from_mail,to_mail,cc_mail=None):        msg["Subject"] = Header(subject, "utf-8")        msg["From"] = Header(from_name + " <" + from_mail + ">", "utf-8")        msg["To"] = Header(",".join(to_mail), "utf-8")        msg["Cc"] = Header(",".join(cc_mail), "utf-8")    def attachBody(self,msg,body,type,imgfile=None):        msgtext = MIMEText(body, type, "utf-8")        msg.attach(msgtext)        if imgfile != None:            try:                file = open(imgfile, "rb")                img = MIMEImage(file.read())                img.add_header("Content-ID", "<image1>")                msg.attach(img)            except(Exception) as err:                print(str(err))            finally:                if file in locals():                    file.close()    def attachAttachment(self,msg,attfile):        att = MIMEBase("application", "octet-stream")        try:            file = open(attfile, "rb")            att.set_payload(file.read())            encoders.encode_base64(att)        except(Exception) as err:            print(str(err))        finally:            if file in locals():                file.close()        if "\" in attfile:            list = attfile.split("\")            filename = list[len(list) - 1]        else:            filename = attfile        att.add_header("Content-Disposition", "attachment; filename='%s'" %filename)        msg.attach(att)

          4.2??MailSender類

          ????只有一個sendMail()方法,初始化的時候保存了發送的相關參數,之后就可以用該方法發送其參數msg了。

          import smtplibclass MailSender:    def __init__(self,smtpserver,smtpport,password,from_mail,to_mail,cc_mail=None):        self.smtpserver = smtpserver        self.smtpport = smtpport        self.password = password        self.from_mail = from_mail        self.to_mail = to_mail        self.cc_mail = cc_mail    def sendMail(self,msg):        try:            smtp = smtplib.SMTP_SSL(self.smtpserver, self.smtpport)            smtp.login(self.from_mail, self.password)            if self.cc_mail == None:                smtp.sendmail(self.from_mail, self.to_mail, msg.as_string())            else:                smtp.sendmail(self.from_mail, self.to_mail+self.cc_mail, msg.as_string())            print("successful")        except(smtplib.SMTPRecipientsRefused):            print("Recipient refused")        except(smtplib.SMTPAuthenticationError):            print("Auth error")        except(smtplib.SMTPSenderRefused):            print("Sender refused")        except(smtplib.SMTPException) as e:            print(e.message)        finally:            smtp.quit()

          4.3??主程序

          ????在主程序中,調用了MailAssembler和MailSender的方法,完成郵件內容的組裝和發送。郵件正文包含文字和圖片,并有兩個附件。

          from email.mime.multipart import MIMEMultipartfrom src.MailContent import MailAssemblerfrom src.MailSender import MailSendersubject = "test report"from_name = "水云之外"from_mail = "aaaaaa@qq.com"to_mail = ["bbbbbb@qq.com"]cc_mail = ["cccccc@qq.com"]imgbody = '''<h3>hi, the attachment is the test report of this test, please check it in time.</h3><img src="cid:image1"/>'''file1 = r"..testresult.html"file2 = r"..testresult.txt"imgfile = r"..testresult.png"smtpserver = "smtp.qq.com"smtpport = 465password = "****************"     # 授權碼msg = MIMEMultipart()assembler = MailAssembler()sender = MailSender(smtpserver,smtpport,password,from_mail,to_mail,cc_mail)assembler.attachAttributes(msg,subject,from_name,from_mail,to_mail,cc_mail)assembler.attachBody(msg,imgbody,"html",imgfile)assembler.attachAttachment(msg,file1)assembler.attachAttachment(msg,file2)sender.sendMail(msg)

          5.?????參考文獻

          [1] 使用python發送QQ郵件??https://www.cnblogs.com/lovealways/p/6701662.html

          [2] Python發送郵件(常見四種郵件內容)https://blog.csdn.net/xiaosongbk/article/details/60142996

          [3] Selenium3+python3-發送添加附件的郵件??https://www.cnblogs.com/liyanqi/p/7885014.html

          標簽:二代密碼保護-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          超人電熨斗使用方法?裝滿水,插上電源,打開開關,從頭頂往下燙。新款超人電熨斗怎么用?蒸汽熨斗的正確使用方法熨斗作為一種立式家用電器,使用頻率很高,但是在使用熨斗時你最好注意以下幾個方面:1。為了避免水垢,盡量倒涼開水。2.根據不同的衣物材料選擇合適的溫度。如果不知道衣服的布料,可以試著在穿衣時看不到的地方熨燙,從低溫開始逐漸升高。3.等到水溫達到調節好的溫度,再開始熨燙,否則水就會從底板漏出。請注...

          北京國家會議中心在什么地方?公交路線:地鐵4號線大興線地鐵2號線地鐵8號線,全程約23.4公里。1.從公益西橋乘坐地鐵4號線大興線,經過6站到達宣武門站。2.乘坐地鐵2號線,經過7站,到達鼓樓街站。3.乘坐地鐵8號線,經過4站,到達奧林匹克公園站(E出口)。4.步行約440米至國家會議中心。北京國家會議中心在什么地方?我想參加CP05伴侶節…但是不知道國家會議中心在哪里?地鐵可以直達嗎?我住的地方...

          碧歐泉護膚品效果怎么樣?碧歐泉護膚品效果不錯。碧歐泉是歐萊雅集團旗下的高級護膚品牌。其所有產品都含有獨特的礦泉活細胞因子生命浮游生物?活精,這也是他們的核心組成部分。碧歐泉補水很好,性價比還是很高的。歐碧泉好用嗎?蘭蔻的護膚品都是針對中年人的皮膚問題,適合年輕人的卻很少。但是,你可以放心使用他的化妝品。顏色時尚而輕盈,尤其是高睫毛絕對是NO1。全球首款高睫毛由蘭蔻生產。我們同歲。試過很多化妝品,我...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>