簡介
Python發送郵件的教程本人在網站搜索的時候搜索出來了一大堆,但是都是說了一大堆原理然后就推出了實現代碼,我測試用給出的代碼進行發送郵件時都不成功,后面找了很久才找到原因,這都是沒有一個詳細的環境調試導致,所以今天特出一個詳細的教程,一步一步從環境調試到代碼實現整一個教程,希望對還在苦苦尋找解決方法卻遲遲不能得到有效解決的朋友們一點幫助。
SMTP協議
首先了解SMTP(簡單郵件傳輸協議),郵件傳送代理程序使用SMTP協議來發送電郵到接收者的郵件服務器。SMTP協議只能用來發送郵件,不能用來接收郵件,而大多數的郵件發送服務器都是使用SMTP協議。SMTP協議的默認TCP端口號是25。
環境調試
上面說了是使用SMTP協議發送的郵件,所以需要先查看你的發件人郵箱是否有開啟SMTP協議,如沒有,則需要開啟,我測試使用的是163.com的郵箱作為發信人郵箱,在設置中開啟SMTP協議如下圖所示。
測試的前提是你需要開通客戶端授權,開通后會讓你設置密碼,那個密碼要記好,下面的passwd接收的是授權密碼而不是郵箱密碼!否則會出現下圖所示的錯誤提示:
Demo
import smtplibfrom email.header import Headerfrom email.mime.text import MIMEText# 第三方 SMTP 服務mail_host = "smtp.163.com" # SMTP服務器mail_user = "***" # 用戶名mail_pass = "***" # 授權密碼,非登錄密碼sender = ***@163.com' # 發件人郵箱(最好寫全, 不然會失敗)receivers = [***@qq.com'] # 接收郵件,可設置為你的QQ郵箱或者其他郵箱content = '我用Python'title = '人生苦短' # 郵件主題def sendEmail(): message = MIMEText(content, 'plain', 'utf-8') # 內容, 格式, 編碼 message['From'] = "{}".format(sender) message['To'] = ",".join(receivers) message['Subject'] = title try: smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 啟用SSL發信, 端口一般是465 smtpObj.login(mail_user, mail_pass) # 登錄驗證 smtpObj.sendmail(sender, receivers, message.as_string()) # 發送 print("mail has been send successfully.") except smtplib.SMTPException as e: print(e)def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content): email_client = smtplib.SMTP(SMTP_host) email_client.login(from_account, from_passwd) # create msg msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = Header(subject, 'utf-8') # subject msg['From'] = from_account msg['To'] = to_account email_client.sendmail(from_account, to_account, msg.as_string()) email_client.quit()if __name__ == '__main__': sendEmail() # receiver = '***' # send_email2(mail_host, mail_user, mail_pass, receiver, title, content)
新聞熱點
疑難解答