1

私はこの問題について多くのことをグーグルで調べましたが、多くの場所でこのエラーを見つけましたが、私の問題に対する答えはありません.

私は新しくインストールされた(debian)システムを持っています。これには基本的にdjango(1.3.0)のインストールと非常に貧弱なpostfixしか含まれていません。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 何も見えません。

この問題を解決する方法を知っている人はいますか?

マシンはインターネットサイトにあり、私が書いたように、コマンドラインからのメール送信は問題なく動作します。

4

1 に答える 1

4

100%確かではありませんが、違いは...

echo sth | mail somebody@provider.com

...と...

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

...前者は postfix on IP address127.0.0.1に接続していますが、後者は postfix on IP address に接続していますが217.112.142.235、理由はわかりません。Web サーバーがバインドされている IP アドレスによって異なる場合があります。

127.0.0.1Postfix は通常、セキュリティ上の理由から、on に接続されている場合にのみ電子メールの中継を許可するようにデフォルトで設定されています。

settings.py追加することで、Djangoを強制的に使用するように変更できます127.0.0.1...

EMAIL_HOST='localhost'

...または、パラメータを次のように217.112.142.235変更して、中継を許可するようにpostfixを再構成します...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 に答える