It's WordPress core related issue, simply install and activate AMIMOTO Plugin Dashboard to solve it.
Issue
WordPress could not send password reset emails or user registration e-mails with the following error message.
The email could not be sent.
Possible reason: your host may have disabled the mail() function.
Conditions
- Running AMIMOTO AMI from AWS MarketPlace.
- You haven't added domains or virtual hosts with wp-setup command.
Note: This issue will not appear in Managed Hosting.
Solutions
A. Get hostname from DB of WordPress and use it as host section of the email address.
e.g. create functions.php with the following code:
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' );
The AMIMOTO Plugin Dashboard has above code, simply install and activate it to solve the issue.
B. Edit server_name directives
Modify /etc/nginx/conf.d/default.conf and restart nginx.
Before modification:
server {
listen 80;
server_name _ default;
root /var/www/vhosts/i-a39asg02ar234srgas7293hga9w745;
index index.html index.htm;
charset utf-8;
After modification:
server {
listen 80;
server_name www.example.com default;
root /var/www/vhosts/i-a39asg02ar234srgas7293hga9w745
index index.html index.htm;
charset utf-8;
Note: you'll need to replace with www.example.com to your domain or URL.
C. Add a new virtual host then use it.
Adding a new WordPress (virtual host), you may need to data migration from current.
$ sudo su -
# cd /var/www/vhosts/
# wp-setup www.example.com
Cause
It is WordPress' core related issue. You can check it on the trac of WordPress 4.9
Nginx send WordPress $server_name which is ruled by in /etc/nginx/fastcgi_params as
fastcgi_param SERVER_NAME $server_name;
As in the official document describes,
> $server_name
> name of the server which accepted a request
$server_name is the requested server name from the browser which is consist of the configuration file.
If $server_name is undefined, WordPress could not resolve the hostname and sent emails correctly.