【问题标题】:Django smtplib.SMTPSenderRefused: (530, b'5.5.1 Authentication Required. ...)Django smtplib.SMTPSenderRefused: (530, b'5.5.1 Authentication Required. ...)
【发布时间】:2019-01-05 14:50:59
【问题描述】:

我一直在尝试让用户通过表单向我的个人帐户发送电子邮件。一开始是给我看的

socket.gaierror: [Errno 11004] getaddrinfo 失败

我通过在我的设备中安装和配置 hMailServer 解决了这个错误。现在,当我尝试通过朋友的电子邮件发送邮件时,它会改为通过我自己的帐户发送电子邮件。当我从设置文件中删除 MAIL_HOST_USER = 'my_email' 时,它显示

smtplib.SMTPSenderRefused

标题中提到的错误。任何建议或相关链接将不胜感激。

我的代码是:

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_PORT = 25
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'my_email'
EMAIL_HOST_PASSWORD = 'my_password'
EMAIL_USE_TLS = True

views.py

class contact(View):
def post(self, request):
    form = ContactForm(request.POST)
    if form.is_valid():
        if send_mail(subject = form.cleaned_data['title'], message = form.cleaned_data['content'], from_email = form.cleaned_data['contact_email'], recipient_list = ['my_email'], fail_silently=False):
            return render(request, 'index.html', {'form': form, 'message': 'Message delivered successfully', 'error':'', 'email_sent': 1 })
    else:   
        return render(request, 'index.html', {'form': ContactForm(), 'error': form.errors})

【问题讨论】:

  • 我认为您不能从您的用户帐户发送电子邮件,因为这听起来很不对劲。就像它是真的一样,任何“坏”网站都可以实现它,例如以用户的名义发送垃圾邮件。听起来正确的是,您作为网站所有者应该能够向您的用户发送邮件,而不是其他方式。
  • @aquaman 我正在为一家公司制作一个网站,以便客户可以直接通过他们的网站与他们互动,许多 IT 公司已经在他们的网站上实施了它,我会尝试让它安全一次电子邮件有效。
  • 请查看此link
  • 我建议您获取用户的电子邮件,然后代表他们将邮件从您的帐户发送到您的目的地。因为你可以控制你的目的地,即。您的客户,这应该不是问题。
  • 在下面查看我的回答,如果您是自己发送邮件,问题可能出在您的端口设置上。

标签: python django


【解决方案1】:

Gmail 或多或少与任何其他电子邮件提供商或正确配置的邮件服务器一样,不允许您设置任意From 地址。允许这样做的电子邮件服务器会被垃圾邮件发送者滥用,并很快将自己列入垃圾邮件黑名单。

您可以将my_email 设置为发件人,并使用通过表单提供的电子邮件地址添加Reply-To 标头。

你必须创建一个EmailMessage 实例并调用send()

from django.core.mail import EmailMessage
...
email = EmailMessage(
    subject=form.cleaned_data['title'],
    message=form.cleaned_data['content'],
    from_email='my_email',
    recipient_list=['my_email'],
    reply_to=form.cleaned_data['contact_email']
)
sent = email.send(fail_silently=False)
if sent:
    return render(request, 'index.html', {'form': form, 'message': 'Message delivered successfully', 'error':'', 'email_sent': 1 })

请注意,Gmail 对您可以通过这种方式发送的电子邮件数量有一些限制。确保您不会意外屏蔽您的帐户。

【讨论】:

  • 谢谢,它解决了我的问题。但是,“回复”有什么作用?
【解决方案2】:

注意,您可以将 gmail 配置为代表 google 应用程序组织中的任何发送地址中继消息(由 gmail 提供支持),但正如 Daniel Hepper 所指出的,这不是个人 gmail 地址的默认设置。也就是说,我敢打赌 OP 的问题很可能是端口设置不正确。在 gmail 中,对于使用 TLS 的 SMTP,端口设置应为 465 或 587。

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 2015-11-08
    • 2020-08-20
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多