1

我用谷歌搜索了很多关于这个问题的信息,我在很多地方都发现了这个错误,但我的问题没有答案。

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

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 端口我什么也看不见。

任何人都知道如何解决这个问题(最好使用本地后缀)?

这台机器在 Internet 站点上,正如我所写,从命令行发送邮件可以正常工作。

4

1 回答 1

4

我不是 100% 确定,但我认为...

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 地址。

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

您可以更改您的 Djangosettings.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

...使其重新阅读配置文件。

于 2013-04-16T14:39:53.637 回答