SMTP協議
首先了解SMTP(簡單郵件傳輸協議),郵件傳送代理程序使用SMTP協議來發送電郵到接收者的郵件服務器。SMTP協議只能用來發送郵件,不能用來接收郵件,而大多數的郵件發送服務器都是使用SMTP協議。SMTP協議的默認TCP端口號是25。
發送郵件之前的配置:
上面說了是使用SMTP協議發送的郵件,所以需要先查看你的發件人郵箱是否有開啟SMTP協議,如沒有,則需要開啟,我測試使用的是163.com的郵箱作為發信人郵箱,在設置中開啟SMTP協議如下圖所示。
測試的前提是你需要開通客戶端授權,開通后會讓你設置密碼,那個密碼要記好,下面的passwd接收的是授權密碼而不是郵箱密碼!否則會出現下圖所示的錯誤提示:
小栗子:
import smtplib from email.header import Header from 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' 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)
如果測試出現報錯,請看網易郵箱給出的狀態碼及含義。
菜鳥教程也有詳細教程。
本文有參考孫華強的博客,十分感謝。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答