django send_mail 554 - 中继访问被拒绝

时间:2013-04-16 13:48:16

标签: python django email

我搜索了很多关于这个问题的帖子,我在很多地方发现了这个错误,但我的问题没有答案。

我有一个新安装的(debian)系统,它基本上只包含一个django(1.3.0)安装和一个非常糟糕的后缀。 Postfix正在运行,如果我这样做

echo sth | mail somebody@provider.com

它到达完美。

我尝试使用像

这样的django send_mail
from django.core.mail import send_mail

send_mail('aaa', 'bbb', 'from@localhost', ['user@external.hu'])

但我总是回来错误:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.6/dist-packages/django/core/mail/__init__.py", line 61, in send_mail
    connection=connection).send()
  File "/usr/lib/python2.6/dist-packages/django/core/mail/message.py", line 248, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/usr/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 92, in send_messages
    sent = self._send(message)
  File "/usr/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 110, in _send
    email_message.message().as_string())
  File "/usr/lib/python2.6/smtplib.py", line 709, in sendmail
    raise SMTPRecipientsRefused(senderrs)
SMTPRecipientsRefused: {'user@external.hu': (554, '5.7.1 : Relay access denied')}

当然,我尝试过不同的地址。当我发送电子邮件时,只有一种情况是我发送给localhost(或者在这台机器上有mx的主机)。

mail.log我可以看到:

Apr 16 10:48:48 tkt postfix/smtpd[4886]: connect from tkt[217.112.142.235]
Apr 16 10:48:48 tkt postfix/smtpd[4886]: NOQUEUE: reject: RCPT from tkt[217.112.142.235]: 554 5.7.1 : Relay access denied; from= to= proto=ESMTP helo=
Apr 16 10:48:48 tkt postfix/smtpd[4882]: lost connection after RSET from tkt[217.112.142.235]
Apr 16 10:48:48 tkt postfix/smtpd[4882]: disconnect from tkt[217.112.142.235]

嗅探端口25我什么都看不见。

任何人都知道如何解决这个问题(最优先使用本地postfix)?

该计算机位于Internet站点上,正如我所写,邮件发送在命令行中正常工作。

1 个答案:

答案 0 :(得分:3)

我不是百分百肯定,但我认为......之间存在差异。

echo sth | mail somebody@provider.com

...和...

send_mail('aaa', 'bbb', 'from@localhost', ['user@external.hu'])

...前者是连接到IP地址127.0.0.1上的后缀,但后者连接到IP地址217.112.142.235上的后缀,虽然我不知道为什么。它可能取决于您的网络服务器绑定的IP地址。

默认情况下,Postfix通常配置为仅在出于安全原因连接到127.0.0.1时才允许中继电子邮件。

你可以通过添加......来改变你的Django settings.py以强制它使用127.0.0.1

EMAIL_HOST='localhost'

...或重新配置后缀,以便通过更改217.112.142.235中的mynetworks参数来实现/etc/postfix/main.cf的转发......

mynetworks = 127.0.0.0/8

...到某个名单......

mynetworks = 127.0.0.0/8 217.112.142.235/32

...然后......

sudo service postfix restart

...让它重新阅读混淆。