• 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)

      

      

  • 相关阅读:
    Mysql元数据分析
    python编码encode和decode
    自己写的Python数据库连接类和sql语句拼接方法
    【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS
    SVN配置以及自己主动部署到apache虚拟文件夹
    css中使用id和class 的不同
    Android OpenGL ES(七)----理解纹理与纹理过滤
    一键安装 redmine on windows 和发邮件设置
    足球大数据:致足球怀疑论者-The Counter(s)-Reformation反教条改革
    【Android进阶篇】Fragment的两种载入方式
  • 原文地址:https://www.cnblogs.com/NolaLi/p/11098670.html
Copyright © 2020-2023  润新知