Django-使用smtp时出现[Errno 111]连接被拒绝错误

4
我正在开发一个Django应用程序,其中有向用户发送电子邮件的功能。在测试用例中,我有一个联系表单,通过gmail的smtp将表单数据作为邮件的一部分提交。由于我遵循的视频教程建议禁用验证码,但当我点击提交按钮时,出现了[Errno111]的错误。在查看此问题另一个SO帖子后,我了解到我需要在真实服务器上运行站点(而不仅仅是本地主机)才能够发送电子邮件。然而,当我在服务器上尝试时,仍然出现相同的错误。我非常确定我已经按照正确的步骤操作,那么问题可能是什么呢?
以下是错误追踪信息:
Django Version: 1.8.6
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'artist_tracker')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/var/www/students/ceyron/bandsync/src/bandsync-repo/artist_tracker/views.py" in contact
  58.       send_mail(subject, contact_message, from_email, to_email, fail_silently =False)
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/__init__.py" in send_mail
  62.     return mail.send()
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py" in send
  303.         return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py" in send_messages
  107.                 sent = self._send(message)
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py" in _send
  123.             self.connection.sendmail(from_email, recipients, message.as_bytes(linesep='\r\n'))
File "/usr/lib/python2.7/smtplib.py" in sendmail
  731.             raise SMTPSenderRefused(code, resp, from_addr)

Exception Type: SMTPSenderRefused at /contact/
Exception Value: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1  https://support.google.com/mail/answer/14257 j34sm10137713qkh.39 - gsmtp', u'webmaster@localhost')

views.py文件中的联系表单

from django.shortcuts import render
from django.conf import settings
from .forms import ContactForm, SignUpForm
# Create your views here.

from django.core.mail import send_mail

def contact(request):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        # for key, value in form.cleaned_data.iteritems():
        #   print key, value
        form_email = form.cleaned_data.get("email")
        form_message = form.cleaned_data.get("message")
        form_full_name = form.cleaned_data.get("full_name")
        # print form.cleaned_data
        subject = "Site contact form"
        from_email = settings.EMAIL_HOST_USER
        to_email = [from_email]
        contact_message = ''' 
        %s: %s via %s
        '''%(form_full_name, form_message, form_email)
        send_mail(subject, contact_message, from_email, [to_email], fail_silently = True )

    context = {
        "form": form
    }
    return render(request, "forms.html", context)

toemail = ', '.join(to_email),并将字符串传递给send_mail函数 - pavan
2个回答

1
在设置文件中更改此内容。
EMAIL_HOSTS = 'smtp.gmail.com'
EMAIL_HOSTS_USER = "bandsyncdjango@gmail.com"

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = "bandsyncdjango@gmail.com"

谢谢,那似乎解决了一个错误,但现在我不知怎么出现了类型错误。我已经编辑了帖子并附上了回溯日志。你知道发生了什么吗? - loremIpsum1771
1
你能在/contact/页面发表你的观点吗? - Geo Jacob
我已经添加了答案。请尝试一下。 - Geo Jacob

1
在你的代码中;
to_email = [from_email, 'someone@gmail.com'] 

回复内容存在敏感词^**$参数再次传递到列表中。

请更改此处:

send_mail(subject, contact_message, from_email, [to_email], fail_silently = True )

send_mail(subject, contact_message, from_email, to_email, fail_silently = True )

感谢您的新回答。不过现在似乎出现了某种身份验证错误。我刚刚更新了帖子,附上了新的跟踪日志。我将fail_silently设置为False,所以我不确定是否会引起问题。 - loremIpsum1771
看起来这是一个单独的问题,所以我会提出另一个问题,谢谢。 - loremIpsum1771

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