通过Zoho SMTP发送电子邮件

时间:2013-08-20 12:58:06

标签: django email 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'

我使用的是django 1.5.1,python 2.7.3。任何人都可以解决这个问题吗?

感谢您的帮助

9 个答案:

答案 0 :(得分:25)

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

因此,问题是Zoho's default SMTP server uses port 465 and requires SSL,但EMAIL_USE_TLS选项不符合此要求。 (旁注:也许尝试将此选项设置为False?我没有尝试过。)无论如何,我最好的猜测是这是一个特定于Django的问题,直到1.7才可能解决。

至于你的问题的解决方案:你绝对可以使用Python(2.7.1)的smtplib访问Zoho的SMTP服务器(参见下面的脚本)。所以,如果你想要一个稍微不优雅的修复,你可以走那条路。我在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()

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

答案 1 :(得分:4)

如果您想通过电子邮件收到错误报告,B.Welsh的答案无法解决问题。

所以对于任何需要它的人:

Zoho的TLS端口是SMTP Server Configuration Page中定义的587。 该页面还指出,您不能使用与您正在使用的电子邮件不同的“来自”,否则它将无法通过。

您需要settings.py中的代码才能通过电子邮件工作获取错误报告:

DEBUG = False
TEMPLATE_DEBUG = DEBUG
ADMINS = (('Yourname', 'youremail@yourdomain.com'),)
SERVER_EMAIL = constants.SENDER_EMAIL

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = constants.SENDER_EMAIL
EMAIL_HOST_PASSWORD = constants.EMAIL_PASSWORD

答案 2 :(得分:1)

我有办法使用django 1.6.8发送。首先,您必须安装GitHub中提供的django-smtp-ssl。运行代码:

pip install django-smtp-ssl

并在settings.py中添加以下内容:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'   
EMAIL_HOST = 'mail.example.com'   
EMAIL_PORT = 465

请参阅链接https://github.com/bancek/django-smtp-ssl

答案 3 :(得分:0)

尝试1而不是True:

EMAIL_USE_TLS = 1
EMAIL_PORT = 465
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'me@mydomain.com'
EMAIL_HOST_PASSWORD = 'XXXXXX'

或者尝试替代端口:

EMAIL_USE_TLS = 1
EMAIL_PORT = 587
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'me@mydomain.com'
EMAIL_HOST_PASSWORD = 'XXXXXX'

答案 4 :(得分:0)

您的stmp电子邮件后端类可能已经过时了。转到

  

蟒/站点包/ django的/核心/邮件/ stmp.py

文件,并确保您有USE_SSL作为选项。如果没有,只需用一个文件替换整个文件。干得好。 ZOHO为我工作。

stmp.py file

请原谅这种反应的格式不佳,这是我对SO的第一次贡献......

答案 5 :(得分:0)

Zoho Mail的SMTP配置设置 - TLS使用端口587和ssl 465. so 如果您使用EMAIL_USE_TLS = True

,请使用EMAIL_PORT = 587

答案 6 :(得分:0)

我发现Zoho不喜欢标准的django.core.mail.send_mail方法。该问题似乎与内容类型有关。有多种方法可以解决这个问题,我的方法是切换到具有更丰富界面的EmailMessage,并允许您在标题中传递Content-type。

从此切换:

from django.core import mail
mail.send_mail(subject='Hello',
               message='Body goes here',
               from_email='user@example.com',
               recipient_list=['user@example.com'])

到此:

from django.core.mail import EmailMessage
email = EmailMessage(
    subject='Hello',
    body='Body goes here',
    from_email='user@example.com',
    to=['user@example.com'],
    reply_to=['user@example.com'],
    headers={'Content-Type': 'text/plain'},
)
email.send()

其他Zoho邮件设置:

EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = 'user@example.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

这解决了Zoho邮件发送的问题,并与django-yubin等其他排队插件兼容。

答案 7 :(得分:0)

与此问题有点无关,但请注意Zoho Mail 不再提供免费计划的IMAP / POP支持。希望我能用这篇文章为你节省一些调试时间。

```
FREE PLAN
Up to 25 Users
5GB* /User, 25MB Attachment Limit
Webmail access only+. Single domain hosting.
```

+ IMAP / POP支持仅适用于付费计划。

https://www.zoho.com/workplace/pricing.html?src=zmail

旧的免费计划(2018年之前注册???)似乎仍然可以提供IMAP / POP支持

来源:https://help.zoho.com/portal/community/topic/zoho-free-tier-pop-imap-activesync-no-longer-free

答案 8 :(得分:0)

根据关于这个link的讨论,我们还需要检查正确的smtp url。 就我而言,我使用的是 smtp.zoho.com,但正确的选择是 smtp.zoho.in。希望有帮助。登录zoho查看域名后即可发现。