python发送邮件554DT:SPM已解决

  说明:本例使用163邮箱

一、报错信息

  使用SMTP发送邮件遇到以下报错:

  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'

二、排查原因

  1.检查163邮箱是否设置授权码,授权码对不对。不对会报错:535, b'Error: authentication failed'

  2.检查代码邮件格式规范

    下面贴出菜鸟教程部分代码使用header。看已发送邮件的确是显示了发件人别名(显示代发),收件人看到的发件人也是自己起的别名。如下图:

# -*- 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禁发了。点上图中帮助可以看到下图,所以善意的伪装也会产生误会。

三、解决方法

  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)

  

  

原文地址:https://www.cnblogs.com/NolaLi/p/11098670.html