Django smtplib.SMTPSenderRefused:(530,b'5.5.1要求身份验证。...)

时间:2019-01-05 14:51:00

标签: python django

我一直在尝试让用户通过表格将电子邮件发送到我的个人帐户。起初它向我展示

  

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

2 个答案:

答案 0 :(得分:0)

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对您可以通过这种方式发送的电子邮件数量有一些限制。确保您不会意外屏蔽帐户。

答案 1 :(得分:0)

N.B。,您可以将gmail配置为代表Google Apps组织(由gmail支持)中的任何发送地址来中继邮件,但是正如Daniel Hepper指出的那样,这不是个人gmail地址的默认设置。也就是说,我敢打赌,OP的问题很可能是端口设置不正确。在gmail中,对于使用TLS的SMTP,端口设置应为465或587。