Php mail()
関数を使用してメールを送信しようとしましたが、実際のドメイン名が必要であるという不満があり、どういうわけか失敗しました。メールログで次のことが確認されます。
sendmail 4984 r25984:from = Apache、size = 273、class = 0、nrcpts = 1、msgid = <[email protected]>、relay = Apache @ localhost
sendmail 4985 r25985:ruleset = check_mail、arg1 =、relay = mydomain.com [127.0.0.1]、reject = 553 5.5.4 ...送信者アドレスには実際のドメイン名が必要です
sendmail 4984 r25984:[email protected]、ctladdr = Apache(48/48)、delay = 00:00:01、xdelay = 00:00:00、mailer = relay、pri = 30273、 relay = [127.0.0.1] [127.0.0.1]、dsn = 5.6.0、stat =データ形式エラー
sendmail 4984 r25984:r25984:DSN:Data format error
cronは、logrotateに問題がある場合はいつでも、external @ server.comにメールを送信できます。なぜphpがそうできないのか、私にはわかりません。 `sendmail.mcのデフォルト設定を次のように変更してみました。
MASQUERADE_AS(`mydomain.com')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(mycom)dnl
しかし、効果がないようです。 PHPメール関数のアドレスからのヘッダーはすでに設定されています。また、SELinux httpd_can_sendmail
有効になっています。メールを配信するには、他に何が必要ですか?
解決したと思います。私は/ etc/hostsに以下を持っています:
127.0.0.1 www.mydomain.com test.mydomain.com
127.0.0.1 cdn.mycdn.com
127.0.0.1 localhost.localdomain localhost myserver.com
私が必要なのは、myserver.comをlocalhost.localdomain
の行の前に配置して、sendmailが実際のドメインを使用してメールを送信していると見なすようにすることです。
スクリプトで、メールのヘッダーをFrom: [email protected]
に設定する必要があります。
あなたのsendmail.mc
追加:
LOCAL_CONFIG
Djmyserver.com
再コンパイルsendmail.cf
、sendmailを再起動してください。
私の場合、AWSインスタンスのUbuntu 16.04では、/etc/mail/sendmail.mc
に追加する必要がありました。
define(`confDOMAIN_NAME', `mydomainname.com')dnl
MAILER_DEFINITIONS
行の前の行でファイルの末尾に向かって、同じ行を/etc/mail/submit.mc
の末尾に追加します。次にSudo su
と入力してルート権限を取得し、次のようにコンパイルして構成します。
m4 sendmail.mc > sendmail.cf
m4 submit.mc > submit.cf
...次にexit
Sudo。最後に、Sudo service sendmail restart
を使用してsendmailを再起動すると、メールはドメイン名から送信されたように見えました。他のFEATUREコマンドやMASQUERADEコマンドは必要なく、/etc/hosts
ファイルのエントリも必要ありませんでした。