web-dev-qa-db-fra.com

Définition du nom et de l'adresse électronique personnalisés de De courriel dans wp_email ()

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"; }
1
Nitesh

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"; }
4
Brady