6

我什至不确定如何调试它:我在 Django 的一个视图中使用 send_mail。它在本地使用应用程序时工作正常(使用我在生产中使用的相同 SMTP 设置),并且在生产环境中从 shell 工作正常(再次,使用相同的设置)。但是当我实际在生产中使用该应用程序时,消息不会发送。知道如何排除故障吗?

我不会粘贴整个视图,但这里是相关部分。

if request.method == 'POST':
    message, form = decideform(request.POST)
    if form.is_valid():
        invitation.status = form.cleaned_data['status']
        invitation.save()
        message, form = decideform(request.POST)
        update = 'Thank you for updating your status.'

        # Send an email confirming their change
        subject = 'Confirming your RSVP [%s %s]' % (invitation.user.first_name, invitation.user.last_name)
        body = message + ' Remember, the URL to update or change your RSVP is http://the.url%s.' % invitation.get_absolute_url()
        send_mail(subject, body, 'rsvp@mydomain.com', ['rsvp@mydomain.com', invitation.user.email], fail_silently=True)

这是我的 local_settings 文件中的相关位,为了安全起见,对重要的细节进行了更改:

EMAIL_HOST = 'mail.mydomain.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'rsvp@mydomain.com'
DEFAULT_FROM_USER = 'rsvp@mydomain.com'
EMAIL_HOST_PASSWORD = 'p4ssw0rd'
4

3 回答 3

0

检查权限。可能是您有权运行 send_mail,但应用程序没有。

于 2012-10-23T16:38:25.693 回答
0

您可以尝试 django-sendgrid 代替,它非常容易配置。使用这样的设置

EMAIL_BACKEND = "sgbackend.SendGridBackend"
SENDGRID_USER = 'xxxxxx'
SENDGRID_PASSWORD = 'xxxxxx'
EMAIL_PORT = 1025
于 2016-09-03T11:56:22.050 回答
0

我有同样的问题。3年后:)复制send_mail inline的代码修复了它,但我仍然不知道为什么

        connection = django.core.mail.get_connection(username=None, password=None, fail_silently=False)
        mail = django.core.mail.message.EmailMessage('hello', 'world', 'test@gmail.com', ['test@gmail.com'],                                              connection=connection)
        mail.send()            
于 2015-11-16T12:42:07.487 回答