3

linux (fedora 20) msmtp 構成はシェルから送信されますが、PHP/Apache からは失敗します。困惑しています...私の目的は、localhost 開発 Web サーバーから gmail smtp を介してメールを送信し、メールを送信するコードの出力をテストすることです。

php.ini sendmail ファイルの読み取り: sendmail_path = /usr/bin/msmtp --debug -C /etc/msmtprc --read-recipients

システムには、/etc/php.ini にある CLI と Web サーバーの両方に使用される php.ini が 1 つだけあります。

/etc/msmtprc の権限は apache:apache 600 に設定されています

root として次のコマンドを実行すると、テスト メールが生成されます。

  • php -r "mail('emily@emilytench.net', '最新のテストメール', 'テストメール本文');"
  • runuser -l apache -c '/usr/bin/msmtp --debug -C /etc/msmtprc --read-recipients < /var/www/html/test.mail' (test.mail には to および from 行が含まれます)

しかし、php メール関数が次のスクリプトから呼び出されると、apache/php はエラーを生成します。

if (mail('emily@emilytench.net', 'Newest Test Email', 'Test email body'))
print "Email successfully sent";
else
print "An error occured";

エラー時のログ ファイルは次のように読み取られます。

  • /var/log/httpd/error_log : msmtp: smtp.gmail.com に接続できません、ポート 587: アクセス許可が拒否されました msmtp: メールを送信できませんでした (アカウントのデフォルトは /etc/msmtprc から)

/etc/msmtprc には以下が含まれます:

defaults
auth on
tls on
tls_trust_file /etc/pki/tls/cert.pem
account default
host smtp.gmail.com
port 587
user emily@emilytench.net
from emily@emilytench.net
password [******]
auth on
syslog on

正しい方向へのポインターは歓迎されます...私のgmail smtpサーバーを介して電子メールを送信するためにlocalhost phpメール機能の簡単な手段を達成しようとしているだけです-これは本番サーバー構成ではなく、Web用の私のローカルApache/php Webサーバーです発達

4

6 に答える 6

4

返事が遅れて申し訳ありません。私もこの問題に苦労しました。問題は、構成ファイルのファイル許可でした。

あなたの記憶が正しければ、それ以外の方法では機能しないためchmod、ファイルを送信するように求められ0600ます。おそらく、web-server/php のユーザーとは別のユーザーを使用してそのファイルを作成したことでしょう。

これは、Web サーバーまたは PHP を制御するサーバーが、そのファイルを読み取って電子メールの構成を取得できないことを意味します。

また、その下に構成ファイルを作成した場合~/.msmtprcも機能しません。PHP で使用する場合、MSMTP はグローバルなもののみを使用するためです。/etc/msmtprc

これは、webs-erver/php のユーザーと一致するように構成ファイルを作成し/etc/msmtprc、次に構成ファイルを作成する必要があることを意味します。chown

私はDebianを使用していてNGINXを使用していたので、CentOSでそのユーザーがwww-dataそのファイルにアクセスできるようにする必要があったため、そのユーザーが正しく設定されていることを確認してください。chown www-data:www-data /etc/msmtprchttpd

それを行った後、PHPを使用して問題なくMSMTPでメールを送信できました。

于 2015-03-01T20:35:45.093 に答える
3

シェルから MSMTP を送信するという問題がありましたが、CentOS 7 で PHP 経由では動作しませんでした。これに 1 日を費やした後、私の解決策は...

sudo -u {apacheUser} -s which msmtp

私にとって、これはビンやローカルビンで/bin/msmtp はなく出力されました。 user/PHP.ini の sendmail_path を Apache ユーザーが使用するパスに更新すると、すべてが完全に機能しました。

私にとっての最終的な解決策:

sendmail_path = /bin/msmtp -t -i

SMTPまた、私がコメントしたこととsmtp_port、php.iniにあることに注意してください。

于 2015-07-10T20:26:16.750 に答える