python發送郵件554DT:SPM已解決

  說明:本例使用163郵箱測試

1、報錯信息

  使用SMTP發送郵件遇到如下報錯:ui

  554, b'DT:SPM 163 smtp10,DsCowACXeOtmjRRdsY8aCw--.21947S2 1561628007,please see http://mail.163.com/help/help_spam_16.htm?ip=36.110.94.251&hostid=smtp10&time=1561628007'spa

2、排查緣由

  1.檢查163郵箱是否設置受權碼,受權碼對不對。不對會報錯:535, b'Error: authentication failed'code

  2.檢查代碼郵件格式規範server

    下面貼出菜鳥教程部分代碼使用header。看已發送郵件的確是顯示了發件人別名(顯示代發),收件人看到的發件人也是本身起的別名。以下圖:htm

# -*- coding: utf-8 -*-
# Nola

import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time

mail_server = "smtp.163.com"
mail_port = 25
sender = "xxxxx@163.com"
sender_password = "xxxxxx"  # 受權碼
receivers = "wewewwe@163.com"


message = MIMEText('Python郵件發送測試...', 'plain', 'utf-8')
# message['From'] = sender
# message['To'] = receivers
message['From'] = Header("菜鳥教程", 'utf-8')
message['To'] = Header("測試", 'utf-8')

send_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
subject = '郵件測試' + send_time
message['Subject'] = subject


try:
    smtp_obj = smtplib.SMTP()
    smtp_obj.connect(mail_server, mail_port)
    smtp_obj.login(sender, sender_password)
    smtp_obj.sendmail(sender, [receivers], message.as_string())
    print('success!')
except smtplib.SMTPException as e:
    print('failure!')
    print(e)

 

  重點是:收到幾封郵件後,收不到了,換收件人也收不到,猜想是163禁發了。點上圖中幫助能夠看到下圖,因此善意的假裝也會產生誤會。blog

3、解決方法

  From和To使用發件人和收件人真實郵箱地址,發送便可成功。教程

  

# -*- coding: utf-8 -*-
# Nola

import smtplib
from email.mime.text import MIMEText
import time

mail_server = "smtp.163.com"
mail_port = 25
sender = "xxxxx@163.com"
sender_password = "xxxxxx"  # 受權碼
receivers = "wewewwe@163.com"


message = MIMEText('Python郵件發送測試...', 'plain', 'utf-8')
message['From'] = sender
message['To'] = receivers

send_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
subject = '郵件測試' + send_time
message['Subject'] = subject


try:
    smtp_obj = smtplib.SMTP()
    smtp_obj.connect(mail_server, mail_port)
    smtp_obj.login(sender, sender_password)
    smtp_obj.sendmail(sender, [receivers], message.as_string())
    print('success!')
except smtplib.SMTPException as e:
    print('failure!')
    print(e)
相關文章
相關標籤/搜索