J'écris un plugin personnalisé qui envoie un email aux utilisateurs à partir de la section admin/front end. J'utilise wp_email () pour envoyer des emails et les emails sont bien envoyés. Je teste cela sur une installation simple WP avec uniquement mon plug-in installé et hostgator en tant que serveur d'hébergement. Chaque fois que l'e-mail est envoyé, il est envoyé à partir de [email protected] et non à partir de l'adresse e-mail de WP compte admin. J'ai également essayé de définir des points d'ancrage personnalisés comme indiqué ici et de définir des en-têtes personnalisés, mais aucun d'entre eux ne fonctionne. Je ne sais pas quelle erreur je fais. Pouvez-vous s'il vous plaît me guider sur la résolution de ce problème. Code fourni ci-dessous
MODIFIER
J'ai également essayé de le tester à partir d'un autre serveur Windows dédié et d'obtenir la même erreur.
// new name
function smartsms_mail_from_name() {
return "WebMaster";
//$name = get_option('blogname');
//$name = esc_attr($name);
//return $name;
}
// new email-adress
function smartsms_mail_from() {
return "[email protected]";
//$email = get_option('admin_email');
//$email = is_email($email);
//return $email;
}
add_filter( 'wp_mail_from', 'smartsms_mail_from' );
add_filter( 'wp_mail_from_name', 'smartsms_mail_from_name' );
//$headers = 'From: '. get_option('blogname') .' <' . get_option('admin_email') . '>';
$headers = 'From: [email protected]' . "\r\n" .'Reply-To: [email protected]' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
$mail = wp_mail($to, $subject, $message, $headers);
Après la réponse de Brady ci-dessous, modifiez le code comme ci-dessous..mais aucun email n'a été envoyé. Cependant, je reçois le message "Le message a été envoyé avec succès" :(
if($to!="")
{
//$headers = 'From: '. get_option('blogname') .' <' . get_option('admin_email') . '>';
//$headers = 'From: [email protected]' . "rn" .'Reply-To: [email protected]' . "rn" . 'X-Mailer: PHP/' . phpversion();
add_filter('wp_mail_from', 'smartsms_mail_from'); // add filter to modify the mail from
add_filter('wp_mail_from_name', 'smartsms_mail_from_name'); // add filter to modify the mail from name
add_filter('wp_mail_content_type', 'smartsms_wp_mail_content_type'); // add filter to modify the mail content type
$mail = wp_mail($to, $subject, $message); // send mail
remove_filter('wp_mail_from', 'smartsms_mail_from'); // remove applied filter
remove_filter('wp_mail_from_name', 'smartsms_mail_from_name'); // remove applied filter
remove_filter('wp_mail_content_type', 'smartsms_wp_mail_content_type'); // remove applied filter
//$mail = wp_mail($to, $subject, $message, $headers);
if($mail)
{
echo 'Your message has been sent!';
}
else echo 'There was a problem sending your message. Please try again.';
}
// new name
function smartsms_mail_from_name() {
return "WebMaster";
//$name = get_option('blogname');
//$name = esc_attr($name);
//return $name;
}
// new email-adress
function smartsms_mail_from() {
return "[email protected]";
//$email = get_option('admin_email');
//$email = is_email($email);
//return $email;
}
function smartsms_wp_mail_content_type() { return "text/html"; }
La méthode correcte consiste à appliquer un filtre à wp_mail_from et wp_mail_from_name. On pourrait penser que l’utilisation des en-têtes $ fonctionnerait et qu’elle fonctionnerait normalement, mais de nombreux plugins filtrent et ne retirent pas leur filtre une fois qu’ils ont envoyé leur courrier électronique, ce qui laisse ces détails dans le courrier électronique du prochain envoi. Ci-dessous est un extrait de mon plugin qui utilise ces filtres. Ajustez le code à votre convenance. Notez comment je supprime les filtres une fois que j'ai envoyé le courrier via wp_mail()
:
public function send_notify_email($alertMessage) {
$options = get_option(self::$settings_option_field); // Get settings
$subject = sprintf(__("WordPress File Monitor Plus: Alert (%s)", "wordpress-file-monitor-plus"), site_url()); // build subject
$subject = apply_filters("sc_wpfmp_format_email_subject", $subject); // allow filter to alter subject
add_filter('wp_mail_from', array(__CLASS__, 'sc_wpfmp_wp_mail_from')); // add filter to modify the mail from
add_filter('wp_mail_from_name', array(__CLASS__, 'sc_wpfmp_wp_mail_from_name')); // add filter to modify the mail from name
add_filter('wp_mail_content_type', array(__CLASS__, 'sc_wpfmp_wp_mail_content_type')); // add filter to modify the mail content type
wp_mail($options['notify_address'], $subject, $alertMessage); // send mail
remove_filter('wp_mail_from', array(__CLASS__, 'sc_wpfmp_wp_mail_from')); // remove applied filter
remove_filter('wp_mail_from_name', array(__CLASS__, 'sc_wpfmp_wp_mail_from_name')); // remove applied filter
remove_filter('wp_mail_content_type', array(__CLASS__, 'sc_wpfmp_wp_mail_content_type')); // remove applied filter
}
/**
* Set from address for email notification
*
* @return void
*/
public function sc_wpfmp_wp_mail_from() {
$options = get_option(self::$settings_option_field); // Get settings
return $options['from_address']; // Return the from address
}
/**
* Set from name for email notification
*
* @return string $from_name
*/
public function sc_wpfmp_wp_mail_from_name() {
$from_name = __("WordPress File Monitor Plus", "wordpress-file-monitor-plus");
$from_name = apply_filters("sc_wpfmp_format_email_from_name", $from_name); // allow filter to alter the from name
return $from_name; // return from name
}
/**
* Set content type for email notification
*
* @return string
*/
public function sc_wpfmp_wp_mail_content_type() { return "text/html"; }