使用Python/Django在1&1上发送电子邮件

3
我正在使用django框架开发一个网站。最近我尝试在1&1共享主机上发布它。除了一个小问题,我已经成功地让项目运行良好:我无法从django发送电子邮件。我在设置中尝试了几乎所有东西(不同的电子邮件、端口等),但每次都会出现“500内部服务器错误”(而在免费的alwaysdata服务器上则没有问题)。
为了找到这个问题的根源,我尝试了不同的方法:
测试通过python解释器发送邮件和EmailMessage:
>>> send_mail('a subject', 'a test message', 'mymail@gmail.com', ['mymail@gmail.com'])
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: a subject
From: mymail@gmail.com
To: mymail@gmail.com
Date: Tue, 14 Jan 2014 22:12:48 -0000
Message-ID: <20140114221248.6718.86150@infong-fr25.kundenserver.de>

a test message
-------------------------------------------------------------------------------
1

但是...我的收件箱里什么都没有。 我的设置如下:
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_USE_TLS       = True
EMAIL_HOST          = 'smtp.gmail.com'
DEFAULT_FROM_EMAIL  = 'mymail@gmail.com'
EMAIL_HOST_USER     = 'mymail@gmail.com'
EMAIL_PORT          = 587

通过Python解释器连接到SMTP服务器的方法:

./manage.py shell
>>> from smtplib import SMTP
>>> smtp_conn = SMTP()
>>> smtp_conn.connect('smtp.gmail.com', 25)

什么都没发生(我尝试使用auth.smtp.1and1.fr或端口587...);当我中断该进程时,它告诉我:

^CTraceback (most recent call last):
  File "<console>", line 1, in <module>
  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 554, in create_connection
    sock.connect(sa)
  File "<string>", line 1, in connect
KeyboardInterrupt

使用php文件进行测试:

使用基本的方法:

<?php
  if (mail("mymail@gmail.com", "a subject", "a test")) {
    echo("<p>Email successfully sent!</p>");
  }
  else {
    echo("<p>Email delivery failed…</p>");
  }
?>

邮件已发送!因此,似乎可以通过php实现无需SMTP连接的电子邮件发送。
结论:
那么,我的问题是:您认为我能够修复这个错误吗?否则,是否可能在没有SMTP连接的情况下发送电子邮件(“像PHP一样”)?

也许1&1正在过滤出站smtp连接。您需要找出PHP如何配置发送邮件(我猜它是通过sendmail命令直接发送的?);或者可以检查phpinfo()... - sk1p
你是否正确导入了send_mail函数?from django.core.mail import send_mail - petkostas
1个回答

1

1and1不允许在其内部使用SMTP。如果在1and1上运行时需要发送电子邮件...

#!/usr/bin/python
import os
mail_to = "sam@comcast.net"
mail_from = "steve@example.com"
subject = "test message"
header = """From: {0}
To: {1}
Subject: {2}
""".format(mail_from, mail_to, subject)
msg = header + "a test from me"
sendmail = os.popen("/usr/lib/sendmail -t", "w")
sendmail.write(msg)
sendmail.close()

这篇博客提供了一个示例,展示如何通过外部机器使用SMTP通过1and1发送邮件。也许你可以覆盖Django的send_mail方法(或者这可能会给你[或其他人]一些提示,说明为什么它不起作用)。无论如何,这应该允许你在Python解释器中发送电子邮件。
来源: https://flenniken.net/blog/send-email-using-python-and-1and1/

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