Django send_mail()可以从shell运行,但不能在nginx生产中运行

时间:2015-04-18 00:04:17

标签: django email nginx uwsgi

我想从django视图发送电子邮件。我使用django开发服务器在我的本地机器上使用以下设置:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'user@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587

我的观点有

from django.core.mail import send_mail

def my_view(request):
  send_mail('subject','body','user@gmail.com',['recipient@gmail.com'],fail_silently=False)
  return render(request, 'index.html')

当我从生产服务器上的manage.py shell运行send_mail()时,电子邮件已成功发送。但是,在生产中调用视图(nginx + uwsgi + django)时,即使视图无错误地运行并返回预期的响应,也不会发送电子邮件。我在error.log中看不到任何错误。

请帮我为nginx设置正确的权限和配置,以便这样做。

注意:此问题与Send_mail in Django, works in shell, works locally, not in view类似,但从未解决过。

编辑:当我做的时候

sudo -u www-data python manage.py shell

作为nginx用户运行,我仍然可以成功发送邮件,这让我更加困惑。

2 个答案:

答案 0 :(得分:2)

如果电子邮件是在控制台中打印的,那么您可能已经设置了

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

打印电子邮件而不是发送电子邮件。

如果此行包含在备用(默认)设置文件中,则它可以以某种方式由部署设置使用,而shell继续使用默认设置文件,其中后端设置为:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

或根本没有设置,在这种情况下,默认值为smtp

答案 1 :(得分:0)

试试这个:

sendMail

所以你只需要调用sendMail('Testing', 'This is a test body', 'from@me.com', 'to@someguy.com')函数传递所需的参数

  • sendMail('Testing', 'This is a test body', 'from@me.com', ['to@someguy.com', 'to@otherguy.com'])
  • getActionBar().setTitle("Your Title");