Luk*_*uke 33 python django smtp
我知道有20个类似于我的问题,但我已经尝试了一天以上的电子邮件与Django一起工作.
我收到此错误:[Errno 111] Connection refused
当我尝试发送电子邮件时
这是我创建电子邮件并尝试在我的视图中发送它的地方:
try:
msg = EmailMessage(subject, message, from_email, [receiver])
msg.content_subtype = "html"
msg.send()
Run Code Online (Sandbox Code Playgroud)
我的设置文件如下:
EMAIL_HOST = "localhost"
DEFAULT_FROM_EMAIL = "myemail@gmail.com"
EMAIL_PORT = 25
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用测试发送python -m smtpd -n -c DebuggingServer localhost:1025
并取得了成功,但是当它归结为真实的时候,没有成功.
当我尝试从shell执行send_mail时,我得到了这个回溯:
>>> from django.core.mail import send_mail
>>> send_mail('Test', 'Test', 'myemail@gmail.com', ['myemail@gmail.com'])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/__init__.py", line 61, in send_mail
connection=connection).send()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 79, in send_messages
new_conn_created = self.open()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 42, in open
local_hostname=DNS_NAME.get_fqdn())
File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.6/socket.py", line 561, in create_connection
raise error, msg
error: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)
我似乎没有随处可见.任何帮助或建议将不胜感激.谢谢
此外,如果您还有其他想要查看的内容,请对其进行评论.
dar*_*ren 72
您是否尝试使用Gmail帐户?也许试试这个:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your-username@gmail.com'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Run Code Online (Sandbox Code Playgroud)
然后尝试测试(django <1.4)
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['test@email.com'])
Run Code Online (Sandbox Code Playgroud)
如果你使用django 1.4使用这个:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', 'your@email.com', ['test@email.com'])
Run Code Online (Sandbox Code Playgroud)
如果您没有使用Gmail帐户但仍然遇到问题,那么只需尝试添加EMAIL_HOST_USER
和EMAIL_HOST_PASSWORD
拥有的内容即可.如果您仍有问题,可能是您的网络阻止了您.操作系统或路由器上的防火墙.
感谢knite更新语法.给他一个+1并感谢pranavk让我知道django 1.4中的语法变化
suh*_*lvs 39
App passwords
框中,单击App
(如果没有设置链接,您可能需要创建一个新链接.您可以跳过步骤3和4).Mail
.App Password
.App passwords
部分下,输入要授权的应用程序的描述性名称,例如"Django gmail",然后单击App
按钮.Mail
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your-username@gmail.com'
EMAIL_HOST_PASSWORD = 'Application spectific password(for eg: smbumqjiurmqrywn)'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Run Code Online (Sandbox Code Playgroud)
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('Test', 'This is a test', 'your@email.com', ['toemail@email.com'],
fail_silently=False)
Run Code Online (Sandbox Code Playgroud)
kni*_*ite 17
@mongoose_za有一个很好的答案,但Django 1.4+的语法略有不同.
代替:
send_mail('test email', 'hello world', to=['test@email.com'])
Run Code Online (Sandbox Code Playgroud)
使用
send_mail('test email', 'hello world', 'your@email.com', ['test@email.com'])
Run Code Online (Sandbox Code Playgroud)
前四个参数是必需的:subject,message,from_email和recipient_list.