【问题标题】:How to fix django send mail?如何修复 django 发送邮件?
【发布时间】:2017-02-18 07:30:28
【问题描述】:

我正在尝试在 django 项目中发送邮件几天。我从 djangoproject.com 获得了文档,但这对我不起作用。 我的 settings.py 包含这些用于发送邮件的代码:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587
EMAIL_HOST_PASSWORD = '**********' #my gmail account's password 
EMAIL_HOST_USER = 'showkatalisalim@gmail.com'

我的 views.py 包含以下联系表单的行:

def contactForm(request):
    form = LocalContactForm(request.POST or None)
    if form.is_valid():
        send_mail(
'Subject here',
'Here is the message.',
settings.EMAIL_HOST_USER,
['zellaic.showkatali@gmail.com'],
fail_silently=False,
)
        return HttpResponseRedirect('thanks')
    context = {"page":"contact_form", "title":"Contact with us", "form":form}
    return render(request, 'form.html', context)

当我尝试通过我的表单发送邮件时:它出现了:

SMTPAuthenticationError at /contact/
(534, '5.7.14 <https://accounts.google.com/signin/continue?     sarp=1&scc=1&plt=AKgnsbtZ\n5.7.14 4CcZKxu-As7S5tfd-3YTAz6XMdwLYcJKWk7_bViejaO8v_-mx-aD8PLO5zixLUMbTv38LY\n5.7.14 qE3ifOl5aXJOXaOVN5jU9Tl-HJVDj1_bc0n9nJ4PHERsBsyu8L0JRr9rM3ED0TdFXLV3wl\n5.7.14 _GF3jCTuCHIydf-YXcFZidIIqrERHyAORvqYmuPs0qHd_rt3ecbJUBOIW9PvzOXxGBiXg2\n5.7.14 ehh9XhyakjWXfOEuJgbxiNBMdCIM0> 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 ao5sm46546625pad.1 - gsmtp')

Request Method:     POST
Request URL:    http://www.zellaic.com/contact/
Django Version:     1.10.1
Exception Type:     SMTPAuthenticationError
Exception Value:    

(534, '5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbtZ\n5.7.14 4CcZKxu-As7S5tfd-3YTAz6XMdwLYcJKWk7_bViejaO8v_-mx-aD8PLO5zixLUMbTv38LY\n5.7.14 qE3ifOl5aXJOXaOVN5jU9Tl-HJVDj1_bc0n9nJ4PHERsBsyu8L0JRr9rM3ED0TdFXLV3wl\n5.7.14 _GF3jCTuCHIydf-YXcFZidIIqrERHyAORvqYmuPs0qHd_rt3ecbJUBOIW9PvzOXxGBiXg2\n5.7.14 ehh9XhyakjWXfOEuJgbxiNBMdCIM0> 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 ao5sm46546625pad.1 - gsmtp')

Exception Location:     /usr/lib64/python2.7/smtplib.py in login, line    621
Python Executable:  /usr/local/bin/python
Python Version:     2.7.5
Python Path:    
['/home/showkatali/webapps/zellaic/lib/python2.7/Django-1.10.1-py2.7.egg',
'/home/showkatali/webapps/zellaic',
'/home/showkatali/webapps/zellaic/src',
'/home/showkatali/webapps/zellaic/lib/python2.7',
'/home/showkatali/lib/python2.7/pip-8.1.2-py2.7.egg',
'/home/showkatali/lib/python2.7',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib64/python2.7/site-packages/PIL',
'/usr/lib64/python2.7/site-packages/geos',
'/usr/lib/python2.7/site-packages']

当我尝试在 shell 中使用这些行时,它出现了:

send_mail('subject', 'sometext', settings.EMAIL_HOST_USER,   ['zellaic.showkatali@gmail.com'], fail_silently = False)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/endless/Desktop/project/webfaction/env/local/lib/python2.7/site-  packages/django/core/mail/__init__.py", line 62, in send_mail
return mail.send()
File   "/home/endless/Desktop/project/webfaction/env/local/lib/python2.7/site-  packages/django/core/mail/message.py", line 342, in send
return self.get_connection(fail_silently).send_messages([self])
File  "/home/endless/Desktop/project/webfaction/env/local/lib/python2.7/site- packages/django/core/mail/backends/smtp.py", line 100, in send_messages
new_conn_created = self.open()
File   "/home/endless/Desktop/project/webfaction/env/local/lib/python2.7/site-  packages/django/core/mail/backends/smtp.py", line 67, in open
self.connection.login(self.username, self.password)

此时,我该怎么办?需要对我的 gmail 帐户进行任何配置吗?

【问题讨论】:

  • 你见过这个吗? stackoverflow.com/a/36532619/4974980您需要调整 Gmail 设置。
  • 我在您的推荐后看到了这一点,并且也按照说明进行了操作。但同样的事情。 @JensAstrup
  • 这不是完整的堆栈跟踪
  • 您的身份验证不正确。阅读错误信息。它包含说明。

标签: python django email


【解决方案1】:

这是使用标准 emailsmtplib 包的 gmail 实现(请注意设置中的不同端口和主机):

//settings.py
EMAIL_HOST = 'smtp.googlemail.com' #XXX
EMAIL_PORT = 465                   #XXX
EMAIL_HOST_PASSWORD = '**********' 
EMAIL_HOST_USER = '***@gmail.com'

代码:

import smtplib

from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate

from django.conf import settings

#send_to is a list of recipient emails
def send_mail(send_to, subject, body):

    msg = MIMEMultipart()
    msg['From'] = settings.EMAIL_HOST_USER
    msg['To'] = COMMASPACE.join(send_to)
    msg['Date'] = formatdate(localtime = True)
    msg['Subject'] = subject

    msg.attach(MIMEText(body))

    server_ssl = smtplib.SMTP_SSL(settings.EMAIL_HOST, settings.EMAIL_PORT)
    server_ssl.ehlo()
    server_ssl.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD)
    server_ssl.sendmail(settings.EMAIL_HOST_USER, send_to, msg.as_string())
    server_ssl.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-24
    • 2017-03-30
    • 2011-03-02
    • 2016-01-28
    • 2023-03-11
    • 2019-10-31
    • 2020-03-03
    • 1970-01-01
    相关资源
    最近更新 更多