2017年12月29日金曜日

[CentOS]WP Mail SMTP の送信エラー(解決)

WordPress のプラグイン WP Mail SMTP でメール送信をしたところ、次のエラーメッセージが出ました。

There was a problem while sending a test email. Related debugging output is shown below:
Versions:
WordPress: 4.9.1
WordPress MS: No
PHP: 5.4.16
WP Mail SMTP: 1.2.2

Params:
Mailer: mail
Constants: No

Server:
PHP.mail(): Yes
Please copy only the content of the error debug message above, identified with an orange left border, into the support forum topic if you experience any issues.

これについて調査したいと思います。

環境


CentOS 7 / Nginx / PHP / MariaDB / WordPress

メールフォームを作成してテストしてみる



HTML ファイルの作成

# vi /usr/share/nginx/html/form.html

form.html <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<form action="send.php" method="post">
  件名:<br />
  <input type="text" name="subject" size="30" value="" /><br />
  送信者名:<br />
  <input type="text" name="name" size="30" value="" /><br />
  メールアドレス:<br />
  <input type="text" name="mail" size="30" value="" /><br />
  本文:<br />
  <textarea name="message" cols="30" rows="5"></textarea><br />
  <br />
  <input type="submit" value="送信する" />
</form>
</body>
</html>

PHP ファイルの作成

# vi /usr/share/nginx/html/send.php

send.php <?php

$message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"];

if (!mb_send_mail("maruton@example.jp", $_POST["subject"], $message, "From: " . $_POST["mail"])) {
  exit("error");
}

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<p>メールが送信されました。</p>
</body>
</html>

実行したところ、error と表示されました。

nginx から php の mb_send_mail を通じてメールを送るのに失敗しているみたいです。

メールを送る php でテスト送信


次に php だけで動作するかテストします。

# vi ~/mail.php

mail.php <?php
$to      = 'maruton@example.jp';
$subject = 'test';
$message = 'body';
$headers = 'From: maruton@example.jp' . "\n" .
    'Reply-To: maruton@example.jp' . "\n" .
        'X-Mailer: PHP/' . phpversion();

mb_send_mail($to, $subject, $message, $headers);
?>

メール送信を実施

# php mail.php

メールは無事送信できました。

php-fpm のログをチェック


php-fpm のログを見るのに必要な設定・コマンドは次の通りです。

設定ファイル:/etc/php-fpm.conf
→ログの設定を debug にします。

サービス再起動:systemctl restart php-fpm

ログファイル:/var/log/php-fpm/error.log
→デバッグで出たメッセージを確認します。

デバッグにして試しましたが、これと言って有用なメッセージは出てませんでした。

ファイアウォールを一時的に無効にしてみる


CentOS のファイアウォールは firewalld が行っています。

# systemctl stop firewalld

# systemctl start firewalld

ファイアウォール停止中にテストしてみたのですが、メール送信はやはりうまくいきませんでした。

WP Mail SMTP


WP Mail SMTP のテスト送信を再度試してみます。
今度は 25番ポートのローカルメールサーバへメールを送信する設定で試します。

There was a problem while sending a test email. Related debugging output is shown below:
Versions:
WordPress: 4.9.1
WordPress MS: No
PHP: 5.4.16
WP Mail SMTP: 1.2.2

Params:
Mailer: smtp
Constants: No
ErrorInfo: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Host: localhost
Port: 25
SMTPSecure: string(0) ""
SMTPAutoTLS: bool(false)
SMTPAuth: bool(false)

Server:
OpenSSL: Yes
SMTP Debug:
2017-12-29 05:13:46 Connection: opening to localhost:25, timeout=300, options=array (
                                      )
2017-12-29 05:13:46 Connection: Failed to connect to server. Error number 2. "Error notice: stream_socket_client(): unable to connect to localhost:25 (Permission denied)
2017-12-29 05:13:46 SMTP ERROR: Failed to connect to server: Permission denied (13)
2017-12-29 05:13:46 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Please copy only the content of the error debug message above, identified with an orange left border, into the support forum topic if you experience any issues.

25番ポートのアクセスで Permission Denied というエラーとなっています。

ネットで調べたところ、SE Linux がヒットしました。

SE Linux の確認


# getenforce
→ Enforcing と返事が返ります。

# getsebool httpd_can_sendmail
→ httpd_can_sendmail --> off

どうやら CentOS 7 では SE Linux が悪さをしているようです。

# setsebool -P httpd_can_sendmail 1
→ 設定後のリブート等の操作は不要

この設定をしたところ、無事メールが送信できました。

0 件のコメント:

コメントを投稿