パスワードリセット・ユーザ追加などの際に以下のエラーが出てメールが届かない場合はこちらをご確認ください。
The email could not be sent.
Possible reason: your host may have disabled the mail() function.
発生するケース
- セルフホスティングをご利用の方。
- wp-setup 等で使用するドメイン名を追加していない方。
※ マネージドホスティングをご利用の方には本事象が発生しません。
事象の解消方法
A. WordPress の DB からホスト名を取得し、メールのホスト部として利用する
以下のコードで functions.php を作成し、使用する
Amimoto Plugin Dashboard ではこの対策が施されていますので、有効化するだけで解消できます。
function my_wp_mail_from( $original_email_address ) {
return 'wordpress@' . parse_url( get_home_url( get_current_blog_id() ), PHP_URL_HOST );
}
add_filter( 'wp_mail_from', 'my_wp_mail_from' );
B. server_name ディレクティブを変更する
/etc/nginx/conf.d/default.conf にある以下の設定を変更する。
変更前
server {
listen 80;
server_name _ default;
root /var/www/vhosts/i-a39asg02ar234srgas7293hga9w745;
index index.html index.htm;
charset utf-8;
変更後
server {
listen 80;
server_name www.example.com default;
root /var/www/vhosts/i-a39asg02ar234srgas7293hga9w745
index index.html index.htm;
charset utf-8;
変更後は nginx を再起動を行ってください。
※ www.example.com は実際のURLやドメイン名に置き換えてください。
C. バーチャルホストを追加し、そちらを使う
WordPress (バーチャルホスト) を追加をする。
コンテンツなどがすでにあればデータの移行が必要です。
$ sudo su -
# cd /var/www/vhosts/
# wp-setup www.example.com
原因
WordPress のコアで行っているの処理の問題です。
WordPress 4.9 では以下の部分です:
https://core.trac.wordpress.org/browser/branches/4.9/src/wp-includes/pluggable.php#L330
nginx の /etc/nginx/fastcgi_params では nginx の変数 $server_name を渡しています。
fastcgi_param SERVER_NAME $server_name;
これは http://nginx.org/en/docs/http/ngx_http_core_module.html にもあるように
> $server_name
> name of the server which accepted a request
$server_name はリクエストされたサーバ名です。これは conf 内の server_name ディレクティブから決定されます。
$server_name が未設定の場合、メールの送信が正しく処理されないためです。