web-dev-qa-db-ja.com

Wp_mail()で名前とEメールアドレスからカスタムEメールを設定する

私は管理者/フロントエンドのセクションからユーザーに電子メールを送信するカスタムプラグインを書いています。私はwp_email()を使ってメールを送信していますが、メールは正常に送信されています。私は自分のプラグインだけをインストールし、私のホスティングサーバーとしてhostgatorを使って普通のWPインストールでこれをテストしています。電子メールが送信されるときはいつでも、電子メールはWP管理者アカウントの電子メールアドレスからではなく、xyz @ gator39.hostgator.comから送信されます。ここ でカスタムフックを設定し 、カスタムヘッダーを設定することも試みましたが、どれも機能しません。私がどんな過ちを犯しているのかよくわかりません。この問題を解決するためのガイドをお願いします。下記のコード

編集

私はまた別の専用のwindowsサーバーからそれをテストして同じエラーを受けてみました。

// 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);

下記のBradyの回答の後、以下のようにコードを編集しました…しかしEメールは送られませんでした。しかし、「メッセージは正常に送信されました」というメッセージが表示されます。

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

正しい方法は、wp_mail_fromとwp_mail_from_nameにフィルタを適用することです。あなたは$ヘッダを使うことでうまくいくと思いますが、通常はそうするでしょうが、メールを送ったときにフィルタをかけてからフィルタをはずさないプラグインがたくさんあります。以下はこれらのフィルタを使った私のプラグインの断片です。あなたの好みに合わせてコードを調整してください。 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