我搜索了很多关于这个问题的帖子,我在很多地方发现了这个错误,但我的问题没有答案。
我有一个新安装的(debian)系统,它基本上只包含一个django(1.3.0)安装和一个非常糟糕的后缀。 Postfix正在运行,如果我这样做
echo sth | mail somebody@provider.com
它到达完美。
我尝试使用像
这样的django send_mailfrom 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站点上,正如我所写,邮件发送在命令行中正常工作。
答案 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
...让它重新阅读混淆。