第一篇部落格!參考連結⬅
在書上看了用SMTP模組發郵件,試過之後發現並沒有什麼用。163郵箱開啟了SMTP服務後,登陸了傳送的時候卻被拒收了。
找了前人的資料,發現被過期的教程害死了。
以下程式碼有效:
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage #全部為python內建,不需要安裝第三方模組 receivers = ["receivers@163.com"] sender = "sender@163.com" mail_pass = "password" mail_subject = "python傳送郵件測試" # 郵件的標題 mail_context = "這是郵件內容" msg = MIMEMultipart() msg["From"] = sender # 發件人 msg["To"] = ";".join(receivers) # 收件人 msg["Subject"] = mail_subject # 郵件標題 # 郵件正文 msg.attach(MIMEText(mail_context, `plain`, `utf-8`)) #圖片附件 #不同的目錄下要寫全檔案路徑 with open(`test.jpg`,`rb`) as picAtt: msgImg = MIMEImage(picAtt.read()) msgImg.add_header(`Content-Disposition`, `attachment`, filename=`你.jpg`) #msgImg.add_header(`Content-ID`, `<0>`) #msgImg.add_header(`X-Attachment-Id`, `0`) msg.attach(msgImg) # 構造附件 att = MIMEText(open(`test.txt`, "rb").read(), "base64", "utf-8") att["Content-Type"] = "application/octet-stream" # 附件名稱為中文時的寫法 att.add_header("Content-Disposition", "attachment", filename=("gbk", "", "測試結果.txt")) # 附件名稱非中文時的寫法 # att["Content-Disposition"] = `attachment; filename="test.html")` msg.attach(att) try: # 啟動網易SMTP服務,埠465 smtpObj = smtplib.SMTP_SSL(`smtp.163.com`, 465) # 登陸賬號 smtpObj.login(`sender@163.com`, `your_password`) # 傳送 smtpObj.sendmail(sender, receivers, msg.as_string()) print(`Success!`) # 退出登入 smtpObj.quit() except smtplib.SMTPException as e: print(e)
如果不需要附件,刪除附件的程式碼塊就行。
注:密碼最好不儲存在程式碼中,而是使用時輸入