通过Zoho SMTP发送电子邮件

Dan*_*iel 9 email django smtp zoho

我试图从我的基于django的网站发送电子邮件,但我遇到了一些问题 - SMTPServerDisconnected连接意外关闭我的setting.py:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'me@mydomain.com'
EMAIL_HOST_PASSWORD = 'XXXXXX'
Run Code Online (Sandbox Code Playgroud)

我使用的是django 1.5.1,python 2.7.3.有谁能解决这个问题?

谢谢你的帮助

小智 25

我遇到连接超时问题.在我看来,默认的Django SMTP库中存在SSL套接字问题.在Django的开发版本中,有一个选项可以设置EMAIL_USE_SSL = True允许使用隐式 TLS连接(而不是显式,由指定EMAIL_USE_TLS = True).通常前者(隐式)使用端口465,而后者(显式)使用端口587.请参阅Django文档 - 将开发版本与版本1.5进行比较.请注意,该选项EMAIL_USE_SSL不存在于1.5中.

因此,问题是Zoho的默认SMTP服务器使用端口465并且需要SSL,但该EMAIL_USE_TLS选项不满足此要求.(旁注:也许尝试设置此选项False?我没有尝试过.)无论如何,我最好的猜测是这是一个特定于Django的问题,直到1.7才可能解决.

至于你的问题的解决方案:你绝对可以使用Python(2.7.1)访问Zoho的SMTP服务器smtplib(参见下面的脚本).所以,如果你想要一个稍微不优雅的修复,你可以走那条路.我在Django 1.5.1中测试了它,它就像一个魅力.

这是独立的Python脚本(可以在Django项目中使用):

import smtplib
from email.mime.text import MIMEText

# Define to/from
sender = 'sender@example.com'
recipient = 'recipient@example.com'

# Create message
msg = MIMEText("Message text")
msg['Subject'] = "Sent from python"
msg['From'] = sender
msg['To'] = recipient

# Create server object with SSL option
server = smtplib.SMTP_SSL('smtp.zoho.com', 465)

# Perform operations via server
server.login('sender@example.com', 'password')
server.sendmail(sender, [recipient], msg.as_string())
server.quit()
Run Code Online (Sandbox Code Playgroud)

在将其插入Web项目之前,请尝试检查上述脚本是否使用您的Zoho凭据运行.祝好运!


dio*_*her 12

在我的情况下,我收到了:

SMTPServerDisconnected: Connection unexpectedly closed
Run Code Online (Sandbox Code Playgroud)

使用这些设置:

EMAIL_PORT = 465
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'dio@streetbarz.com'
EMAIL_HOST_PASSWORD = 'password'
Run Code Online (Sandbox Code Playgroud)

设置server.set_debuglevel(1)后,我发现我的DEFAULT_FROM_EMAIL与EMAIL_HOST_USER不同

DEFAULT_FROM_EMAIL = "dio@streetbarz.com"
Run Code Online (Sandbox Code Playgroud)

添加修复问题.

  • @diofeher 谢谢伙计!这也解决了我的问题!你值得一个拥抱、一杯咖啡、一杯啤酒什么的! (2认同)