python實現發送郵件小demo:
有服務器的時候設定好對應server的protocol,port,以及對應的content-type即可
相關protocol和port查詢對應mail server 說明即可。
import smtplib
from email.mime.text import MIMEText
if __name__ == '__main__':
# 設置郵件服務地址及默認端口號,這里選擇的是outlook郵箱
smtp_server = "smtp.office365.com:587"
# 設置發送來源的郵箱地址
mail_account = "xxxx@xxx.com"
mail_passwd = "xxxxx"
sender_email = "receiver@www.com"
receiver_email = ["xxxx@xxx.com","xxxx@xxx.com"]
# subject代表郵件主題信息
subject = 'subject\n\n'
body = 'bodystr'
content = 'content\r\n'
# 普通文本郵件
headers = ["From: " + sender_email,
"To: " + ";".join(receiver_email),
"MIME-Version: 1.0",
"Content-Type: text/html",
"Subject: " + subject+body,
]
headers = "\r\n".join(headers)
server = smtplib.SMTP()
# 服務器連接
server.connect(smtp_server)
# 返回服務器特性
server.ehlo()
# 進行TLS安全傳輸
server.starttls()
# 賬號密碼登錄
server.login(mail_account, mail_passwd)
# 郵件正文發送
body = "Dear Student, \n Please send your report\n Thank you for your attention"
server.sendmail(sender_email, receiver_email, headers)
# 關閉服務器連接
server.close()
小插曲:
使用office365的時候出現了一個問題,投放到接收者mail server時返回了拒絕信息:
Your message contains invalid characters (bare line feed characters) which the email servers at qq.com don't support.查詢后了解到原來是由於發送的郵件體里包含了收方郵件服務器認為的非法字符,而office365之前是會在發送出去之前進行處理,刪除發送出去的非法字符。后來根據RFC1830標准規定,添加了對BDAT的支持,故取消了刪除該字符的處理,也因此導致了拒信的出現。 [來自office365的解釋](https://support.office.com/en-gb/article/Fix-email-delivery-issues-for-error-code-5-6-11-in-Office-365-81dafee7-26af-4d79-b174-8f78980dfafb)
在stackoverflow找到的demo代碼中發現都進行了 headers = "\r\n".join(headers) 的處理,貌似經過這個處理后就ok了,感謝~~(找不到原鏈接了,thanks to author)