【问题标题】:Sending Mail in Python - Error code - SMTPDataError: 451, b 4.3.0 Mail server temporarily rejected message在 Python 中发送邮件 - 错误代码 - SMTPDataError: 451, b 4.3.0 邮件服务器暂时拒绝消息
【发布时间】:2020-10-11 16:10:38
【问题描述】:

当我在不使用任何函数的情况下非常简单地实现相同的代码时,我能够毫无问题地发送邮件。但是,当我尝试使用某个功能发送邮件时,我收到了邮件,因为我的发件人帐户已被禁用并且它正在阻止我的邮件和帐户。

必须在函数中满足某些过滤器后实现发送邮件的代码,以便可以在需要时使用它来发送邮件。

我的代码sn-p:

import smtplib

def setup_mail():
    global smtpObj,sender,receivers,message
    sender = 'sample@gmail.com'
    receivers = ['sample1@gmail.com','sample2@gmail.com']

    message = """From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    Subject: 1 MIN candle 15 points alert
    
    TIME: watch out next 2 minutes
    """

    smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    smtpObj.login("sample@gmail.com","samplepassword")
setup_mail()
def sending_mails(smtpObj):
    smtpObj.sendmail(sender, receivers, message)
for i in range(3):
    sending_mails(smtpObj);
print("Successfully sent email")

我得到的错误,

Traceback(最近一次通话最后一次):文件“C:/Users/Arun/PycharmProjects/Astro/venv/Scripts/ZERODHA_DEV/sendmail.py”,第 22 行,在发送邮件(smtpObj)中;文件“C:/Users/Arun/PycharmProjects/Astro/venv/Scripts/ZERODHA_DEV/sendmail.py”,第 20 行,sending_mails smtpObj.sendmail(sender, receivers, message) 文件“C:\Python\lib\smtplib. py",第 888 行,在 sendmail 中引发 SMTPDataError(code, resp) smtplib.SMTPDataError: (451, b'4.3.0 邮件服务器暂时拒绝消息。s77sm14888153pfc.164 - gsmtp')

但是它可以使用简单的代码,例如,

import smtplib

global smtpObj,sender,receivers,message
sender = 'sample@gmail.com'
receivers = ['sample1@gmail.com','sample2@gmail.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: 1 MIN candle 15 points alert

TIME: watch out next 2 minutes
"""

smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465)
smtpObj.login("sample@gmail.com","samplepassword")
for i in range(3):
   smtpObj.sendmail(sender, receivers, message)
   print("Successfully sent email")

【问题讨论】:

  • 以下是我得到的错误,回溯(最近一次调用最后一次):文件“C:/Users/Arun/PycharmProjects/Astro/venv/Scripts/ZERODHA_DEV/sendmail.py”,第 22 行,在 发送邮件(smtpObj);文件“C:/Users/Arun/PycharmProjects/Astro/venv/Scripts/ZERODHA_DEV/sendmail.py”,第 20 行,sending_mails smtpObj.sendmail(sender, receivers, message) 文件“C:\Python\lib\smtplib. py",第 888 行,在 sendmail 中引发 SMTPDataError(code, resp) smtplib.SMTPDataError: (451, b'4.3.0 邮件服务器暂时拒绝消息。s77sm14888153pfc.164 - gsmtp')
  • 我还没有提到,我已经在 Gmail 设置和位置中启用了第三方和验证码的访问权限
  • 您确定不只是达到发送限制吗?您的问题没有多大意义,SMTP 服务器如何知道您正在使用函数
  • 是的,没有达到发送限制。当我运行这个程序时,它会在发送一次邮件后禁用我的帐户。因此,当它尝试第二次发送时它会阻塞。我发现了一个面临同样问题的stackoverflow页面,但也没有人提出解决方案,很奇怪
  • 通常这种限制伴随着免费服务。如果您想要更专业的东西,通常需要付费。

标签: python-3.x email gmail


【解决方案1】:

直接的问题是您的消息是缩进的;有效的 SMTP 消息包含两个相邻的文字换行符,用于区分标头和正文。

虽然您可以从 ASCII 字符串组装简单的电子邮件,但这对于现实世界的现代电子邮件来说是站不住脚的。您真的想使用email 库(或更高级别的第三方包装器或替代品)来处理电子邮件封装的所有极端情况,尤其是如果您自己不是电子邮件和 MIME 方面的专家。

【讨论】:

  • 我会展示示例代码,但这是常见的常见问题解答;具体示例请参考我最近在pythonemail 标签中的其他一些答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 2017-06-08
  • 2013-09-06
相关资源
最近更新 更多