Django 1.8使用Gmail SMTP发送邮件

33

我试图在Django 1.8中使用smtp.gmail.com发送邮件。

我的settings.py文件包含:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'  
EMAIL_HOST='smtp.gmail.com'  
EMAIL_PORT=465  
EMAIL_HOST_USER = 'sarath4coding'  
EMAIL_HOST_PASSWORD = '*********'  
DEFAULT_EMAIL_FROM = 'sarath4coding@gmail.com'
from django.core import mail
mail.send_mail('subject','message','sarath4coding@gmail.com',['sarath4coding@gmail.com'])

但是遇到了这个错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/manager/dj1.8/local/lib/python2.7/site-packages/django/core/mail/__init__.py", line 62, in send_mail
    return mail.send()
  File "/home/manager/dj1.8/local/lib/python2.7/site-packages/django/core/mail/message.py", line 303, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/home/manager/dj1.8/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 100, in send_messages
    new_conn_created = self.open()
  File "/home/manager/dj1.8/local/lib/python2.7/site-packages/django_smtp_ssl.py", line 14, in open
    self.connection.login(self.username, self.password)
  File "/usr/lib/python2.7/smtplib.py", line 622, in login
    raise SMTPAuthenticationError(code, resp)
SMTPAuthenticationError: (534, '5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuze\n5.7.14 2FDKQt2Dlo2vqFIvbr6DnBItwWvh9DChPwbeTZO66N91gzmiA437Vqs80cZ9-8u13vxq5a\n5.7.14 bVahzO_BQcZ53yKbJ-YbAlmFE1XIK7MfH97O0wI1lvzpTG_WAHuTIBF0HD1GA2icUoUemt\n5.7.14 ErZn4qb942aAIMG103FnrzLp4txXTbXC-wGLpaz5yvnUN5thahvv3-RiIVW8F1QddZKZlg\n5.7.14 qQKpqWw56zr1AcO2s_oaBEt556fQ> Please log in via your web browser and\n5.7.14 then try again.\n5.7.14  Learn more at\n5.7.14  https://support.google.com/mail/answer/78754 kx14sm6579665pab.0 - gsmtp')

我尝试了文档中提到的一切,并遵循了许多建议的解决方案。

例如https://accounts.google.com/DisplayUnlockCaptcha,启用低安全性应用程序等等。

但我仍然遇到错误。

有人可以告诉我如何正确配置Django 1.8以使用Gmail发送邮件吗?


我有一个类似的配置,但是包括:EMAIL_HOST_USER='sarath4coding@gmail.com'EMAIL_PORT=587EMAIL_USE_TLS=True - Gocht
一样的情况。尝试了下面的每个答案,但对我仍然不起作用。 - etlds
7个回答

48

对于我来说,在 settings.py 文件中:

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

views.py 文件:

from django.core.mail import EmailMessage

email = EmailMessage('title', 'body', to=[email])
email.send()
    

并且: https://accounts.google.com/DisplayUnlockCaptcha

还要确保您打开了较不安全应用程序的权限。


22

6
可能更安全的选择是添加应用程序专用密码:https://security.google.com/settings/u/1/security/apppasswords - ptim
链接坏了 @ptim :( - Vini.g.fer
tx @Vini.g.fer!这个帮助页面解释了该过程:https://support.google.com/accounts/answer/185833?hl=en - ptim

12

我在 Django 1.8 中测试了这个方法,结果完美:


首先,你需要检查谷歌提供的此链接,看起来你已经执行了这一步骤 :)


请注意,在 view.py 或者 shell 中你需要像这样编码,原因可能有些奇怪:

import django
from django.conf import settings
from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', settings.EMAIL_HOST_USER,
         ['to@example.com'], fail_silently=False)

同时这是我在setting.py文件中的设置:

EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = 'xxxx' #my gmail password
EMAIL_HOST_USER = 'xxxx@gmail.com' #my gmail username
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

9

请在您的settings.py文件中进行更改:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'

由:

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


8

在settings.py中 更改如下

EMAIL_HOST='imap.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'yadavabhishek260@gmail.com'
EMAIL_HOST_PASSWORD ='**********'
EMAIL_USE_SSL=False
EMAIL_USE_TLS= True

1
这对我有效:

settings.py

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = 'test'
EMAIL_HOST_USER = 'test@gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

解锁验证码:https://accounts.google.com/DisplayUnlockCaptcha

views.py

email = EmailMessage(
    'subject_message',
    'content_message',
    'sender smtp gmail' +'<sender@gmail.com>',
    ['receiver@gmail.com'],
    headers = {'Reply-To': 'contact_email@gmail.com' }
)
email.send()

1

我在Django 1.11中使用了这个。

在settings.py文件中:

EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = 'sender' #sender mail password
EMAIL_HOST_USER = 'sender@mail.com' #sender mail username
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

在 view.py 文件中。
send_mail('mail subject', 'body content',settings.EMAIL_HOST_USER,
                      ['receiver@mail.com'], fail_silently=False)

并且前往 https://myaccount.google.com/u/0/security?hl=en 启用不安全应用程序访问


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接