python3 使用SMTP 163郵箱發送自己賬號可以但是發送 其他郵箱報錯:554:DT SPM 錯誤實用解決辦法

大家好,我是最渣的黑客,已經好久沒有更新了,今天在寫一個運維自動化程序,需要用郵箱去提醒一些重要的信息,感覺用到python 寫 自動發送郵箱 會比較簡單,我本人也是使用python3 語言寫 運維的腳本。

今天遇到一個問題就是 設置好 發件人,收件人,以及其他信息,但是一開始運行就報錯 【如下】:

smtplib.SMTPDataError: (554, b'DT:SPM 163 smtp14,EsCowAAHD+t0B4pe2wN_Cg--.12574S2 1586104181,please see http://mail.163.com/help/help_spam_16.htm?ip=223.149.59.238&hostid=smtp14&time=1586104181')

上面報錯,直接提示了報錯的類型是 554, b'DT:SPM 是,此時,我打開了後面報錯提示的網站鏈接。

打開網站後,然後往下翻,找到 554, DT:SPM 報錯類型:

•554 DT:SPM 發送的郵件內容包含了未被許可的信息,或被系統識別爲垃圾郵件。請檢查是否有用戶發送病毒或者垃圾郵件;

於是我網上找了很多博主的問題解答,大致解決辦法:【但是都沒解決我的問題,你們可以試試這些辦法】

  1. 要在 收件人加上發件人的郵箱;
  2. 檢查自己的 郵件主題(message['Subject'])是否含有 test 或 測試 文本信息;

我按照上面兩個辦法,修改後還是報錯。最後陷入了苦思中,在不斷的思考中:報錯不可能無緣故,應該就是 信息這塊出現錯誤,就在不停調試下,取消了 Header 編碼,然後在發件人,也就是下方標紅的地方,改成了自己的郵箱。就提示發送成功。

原來代碼【報錯代碼】

message = MIMEText("hello",'plain','utf-8')  #發送內容
message['From'] = Header("最渣的黑客",'utf-8')  #發送人信息
message['To'] = Header("最渣的黑客",'utf-8')  #收件人信息
message['Subject'] = Header("最渣的黑客",'utf-8')  #主題

第一次修改成【報錯代碼】

message = MIMEText("hello",'plain','utf-8')  # 發送的文本信息
message['From'] = "最渣的黑客"  #發件人信息
message['To'] = "最渣的黑客" # 收件人信息,這個可以是任何文本信息
message['Subject'] = "最渣的黑客" #郵件 的標題

第二次修改成【發送郵件成功】

message = MIMEText("hello",'plain','utf-8')  # 發送的文本信息
message['From'] = "[email protected]"  #發件人信息,目前爲止最好是和自己發件人一樣
message['To'] = "最渣的黑客" # 收件人信息,這個可以是任何文本信息
message['Subject'] = "最渣的黑客" #郵件 的標題

最後發現修改以下信息,即可成功。 

message['From'] = "[email protected]" # 這個郵箱是我設置的發件人郵箱。

具體什麼原因,我也不知道,可能 Header是編碼問題,讓163郵箱無法識別發送的信息,而變成垃圾郵件,從而攔截。緊接着 修改message['Subject']  和 message['To'] 的賦值爲文本的時候,並沒有報錯。

今天分享就到這裏啦,感謝您觀看我的分享,如果幫助到你的話,點個關注唄。

分享心得:解決問題,需要的是更多的耐心和細心。

 


關於怎麼 使用python3 自動化發送郵箱完整代碼以及教程(建議封裝成函數調用使用會很香):

一、首先獲取 SMTP 授權碼:

登錄163郵箱,點擊設置,在點擊 POP3/SMTP/IMAP 。

然後開啓服務,這個時候需要手機短信驗證:

驗證好後,會自動跳轉一個 授權碼 複製即可。只要獲得 授權碼即可。

下方是 163 郵箱的 服務器地址:

POP3服務器: pop.163.com

SMTP服務器: smtp.163.com

IMAP服務器: imap.163.com

安全支持:

POP3/SMTP/IMAP服務全部支持SSL連接

獲得授權碼後,我們就可以愉快地 寫代碼了: 

#encoding:utf-8
import smtplib # 引用smtp郵箱功能,這個是內置的無需pip 安裝
from email.mime.text import MIMEText # 這個是調用能在web上傳輸的函數
from email.header import Header


from_add = '[email protected]' # 發件人的郵箱
to_add = ['[email protected]',"[email protected]"] # 收件人的郵箱
password = "xxxxxxxxxxxxxx" #163的授權碼(並非登錄密碼)


message = MIMEText("hello",'plain','utf-8')  # 發送的文本信息
message['From'] = "[email protected]"  #發件人信息,目前爲止最好是和自己發件人一樣,否則會報錯554
message['To'] = "最渣的黑客" # 收件人信息,這個可以是任何文本信息
message['Subject'] = "最渣的黑客" #郵件 的標題


server  = smtplib.SMTP('smtp.163.com',25) # 創建一個郵件服務器對象,郵件的統一默認端口是 25 
# server.set_debuglevel(1) #返回服務器的結果,調試用的,可以不註釋
server.login(from_add,password) #登錄郵箱服務器
server.sendmail(from_add,to_add,message.as_string()) #發送郵箱,依次爲 發件人,收件人,發送信息(需要進行格式化所以後面跟着 as_string()函數)
print("郵件發送成功")

正確的代碼,也在上面,看到的同事和同學,可以根據參考代碼學習和修改。如有不足地方請評論。非常感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章