I'm trying to solve a problem with email being sent from a WordPress site, hosted on GoDaddy with its MX record set to a Dreamhost.com mail server.
Email addressed to the site's domain (me#mysitesdomain.com) will not go through, yet email to any #gmail.com address will go through. I'm testing this with the following script ...
<?php
$mailResult = false;
$from = "info#mysitesdomain.com";
$to = "me#mysitesdomain.com";
$subject = "PHP Mail Test script";
$message = "This is a test to check the wp_mail functionality.";
$headers = "From:" . $from;
$mailResult = wp_mail( $to, $subject, $message, $headers );
echo "mail result: ".$mailResult;
?>
For both the me#mysitesdomain.com and the me#gmail.com address, the script's result is 1 (true).
As a further test, I use a similar very simple script outside of Wordpress that uses PHP mail()...
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "info#mysitesdomain.com";
$to = "me#mysitesdomain.com";
$subject = "PHP Mail Test script";
$message = "This is a test to check the PHP Mail functionality.;
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
echo "Test email sent";
?>
That script successfully sends to both addresses. So, PHP mail() works but wp_mail() only works for #gmail.com addresses. What's going on within the wp_mail class that's different PHP php mail()?
Related
I'm new in plugin development. I would like to use this simple function in Wordpress to send mail to users. I saw this code in the documentation everything is simple and straight forward but this code returns false. Why ?
require_once explode( 'wp-content', __FILE__ )[0] . 'wp-load.php';
function send_mail() {
$to = 't.testmail#gmail.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array( 'Content-Type: text/html; charset=UTF-8' );
$send_message = wp_mail( $to, $subject, $body, $headers );
if ( $send_message ) {
echo 'Email was sent';
} else {
echo 'Email sending was aborted';
}
}
send_mail();
According to the documentation (https://developer.wordpress.org/reference/functions/wp_mail/) the mail could not be sent.
Reasons could be many. Have you checked the debug log of WordPress (https://wordpress.org/support/article/debugging-in-wordpress/)?
I'm trying to send have my site send me a notification email when someone registers with the role subscriber. I can probably achieve that with a hook on mu-plugins but I don't know where to start or which hook to use. Tried adding an if statement inside a plugin but it's probably overkill to install a plugin and modify it just for this functionality. Thanks!
For your information the default register user role is "Subscriber" role, if you have set the other role you have to change the role after registered.
Try this one:
function send_welcome_email_to_new_user($user_id) {
$user = get_userdata($user_id);
$user_email = $user->user_email;
// email will send only for "Subscriber" registers
if ( in_array( 'subscriber', $user->roles )) {
$to = $user_email;
$subject = "Hi";
$body = '
<p>your message </p>
';
$headers = array('Content-Type: text/html; charset=UTF-8');
if (wp_mail($to, $subject, $body, $headers)) {
error_log("email has been successfully sent to user whose email is " . $user_email);
}
}
// email will send only for "Other Role" registers
if ( in_array( 'other_role', $user->roles )) {
$to = $user_email;
$subject = "Hi";
$body = '
<p>your message </p>
';
$headers = array('Content-Type: text/html; charset=UTF-8');
if (wp_mail($to, $subject, $body, $headers)) {
error_log("email has been successfully sent to user whose email is " . $user_email);
}
}
}
add_action('user_register', 'send_welcome_email_to_new_user');
It is enabled by default in WordPress. Check that WordPress is sending emails at all, you might have problem with the SMTP settings, you need to configure the SMTP. Where is your website hosted? Did you check the spam?
I am using a cron event and adding a PHP code to send emails to users of my wordpress site. But due to some reason my wp_mail function is sending emails twice to all the users.
Here is my code, can anyone please tell me whats wrong with my code ?
$args = array(
'role' => 'employee',
'order' => 'ASC'
);
$all_users = get_users($args);
foreach ($all_users as $user) {
$to = esc_html($user->user_email) ;
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
// More headers
$headers .= 'From: TEST <test#test.com>' . "\r\n";
$subject = "Regarding auto emails";
$message = "<p>Dear Employee/Consultant,</p>
<p >Please send in your submissions</p>";
wp_mail($to, $subject, $message, $headers);
}
You can write mail function in this way
if(wp_mail($to, $subject, $message, $headers)){ // Condition check if mail has been sent
continue; // Continue to next iteration
}
Your PHP looks okay to me.
I have had luck scheduling cron in WordPress using the approach shared here (duplicated below). And by structuring the mail function within loops as follows:
<?php
$to = 'email#website.com';
$subj = 'Subject';
$body ='
<br/>
Dear Recipient,<br/>
<br/>
Here is an email.<br/>
<br/>';
$headers[] = 'Content-Type: text/html; charset=UTF-8';
$headers[] = 'From: Website.com <email#website.com>' . "\r\n";
wp_mail( $to, $subj, $body, $headers );
?>
You can install a plugin like Cron Manager to verify that the cron event is scheduled. "custom_cron_event" (or whatever name you choose for your function) should be listed as a scheduled cron if you've activated the plugin and it is working correctly.
Cron schedule via plugin:
<?php
/*
Plugin Name: Custom Plugin
Plugin URI:
Description: Adds function on cron
Author:
Version: 1.0
*/
/*
* When this plugin is activated, schedule
*/
function activate_custom_cron(){
wp_schedule_event( time(), 'daily', 'do_custom_cron_event');
}
register_activation_hook(__FILE__, 'activate_custom_cron');
/*
* When this plugin is deactivated, clear_schedule cron
*/
function deactivate_custom_cron(){
wp_clear_scheduled_hook('do_custom_cron_event');
}
register_deactivation_hook(__FILE__, 'deactivate_custom_cron');
/*
* Function
*/
function custom_cron_event() {
/*
* This is where your function goes
*/
}
add_action( 'do_custom_cron_event', 'custom_cron_event' );
?>
I am using the following code :
add_filter( 'wp_mail_content_type', 'set_html_content_type');
function set_html_content_type() {
return 'text/html';
}
$headers = 'From: xxxn <info#xxx.co.in>' . "\r\n";
$subject = 'Your Axxxxrship 2017';
$msg = 'Dear '.ucfirst($get_s[0]->name)."<br/><br/>
Thank You for taking intrest in Scholarship 2017. We have recieved Payment from you. Please find the admit card for your Future
reference. <br/><br/>
Thanks & Regards<br/>
xxxxxx
";
$up = __DIR__ . '/menu-pages/admit_card/'.$stid.'.pdf';
$mail_attachment = array($up);
wp_mail($to, $subject, $msg, $headers,$mail_attachment);
remove_filter( 'wp_mail_content_type', 'set_html_content_type');
But I am trying to send the mail. The mail is sent successfully but I didnt recieve any attachment in the mail.
How I can trace that what is the problem. Path of sending file is :
/home/xcdx/public_html/wp-content/plugins/schloarship/menu-pages/admit_card/20108.pdf
This is my code to send mail.
$htmlcontent = "Quick Contact";
$to = get_option( 'admin_email' );
$subject = "Quick Contact";
$headers = "Quick Contact";
wp_mail( $to, $subject, $htmlcontent );
This code works fine when the user is logged in. When the user is not logged in the mail is not sent.
of try this code.
add_action('wp_ajax_my_ajax', 'my_ajax');
add_action('wp_ajax_nopriv_my_ajax', 'my_ajax');
add ajax to register or non register user allow to access.