web-dev-qa-db-ja.com

wp_mail()のフォーム入力メールアドレスに従ってアドレスから設定する方法

Wp_mailを使用してフォームを作成し、自分のEメールアドレスに送信しようとしています。私のwp_mail()コードは:

if($_POST["submit"]) {
    $to="my email";
    $subject ="My subject";     
    $sender=$_POST["sendername"];
    $senderEmail=$_POST["senderEmail"];
    $message=$_POST["message"];
    $name_title=$_POST["name_title"];   

    $mailBody = "<b><span style='color: red;'>Name:</span></b> $name_title $sender\n<br/>
                 <b>Email:</span></b> $senderEmail\n\n<br/><br/>
                 <b>Message:</b> $message";

    $mail_sent = wp_mail( $to, $subject, $mailBody );
    }

fromアドレスを変更するために、私はfunctions.phpに次のフィルタを追加しました。

/* adding support for html emails*/
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
function wpse27856_set_content_type(){
    return "text/html";
}

/* from address */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
    return $senderEmail;
}

/* from name*/
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
    return $sender;
}

そしてHTMLの形式は:

<form id="" name="" action="<?php echo get_permalink(); ?>" method="post">
<div class="form-input">
    <select name="name_title" class="name-title-input">
    <option value="" selected="selected">Select Title</option>
    <option value="Mr">Mr</option>
</div>
<div class="label-input-wrapper">
        <div class="form-label">Name</div><div class="form-input"><input type="text" name="sendername"/></div>
    </div>

    <div class="label-input-wrapper">
        <div class="form-label">E-Mail</div><div class="form-input"><input type="email" name="senderEmail" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required /></div>
    </div>
    <input type="submit" value="Submit" name="submit">
</form> 

メールフォームを私のEメールに送信するのではありません。ただし、フィルタを次のように変更すると、フォームが電子メールに送信されます。

/* from address */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
    return "[email protected]";
}

/* from name*/
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
    return "my name";
}

それでは、どのようにしてヘッダから送信者にEメールを送信させることができるのでしょうか。

4
Riffaz Starr

あなたが正しいと理解しているならば、あなたはただセットから得るのに問題があるのですか?最も簡単な方法は、 wp_mail 関数の emailヘッダー from を追加することです。

これは私の古いシンプルな電子メール送信機能の1つの例です。

function contact_send() {
    $title   = 'New message Received';
    $headers = array('From: '.$_POST['full_name'].' <'.$_POST['email_address'].'>');
    $message = '<h1>My message</h1>';

    //Send the email
    add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));
    $email = wp_mail('[email protected]', $title, $message, $headers);
    remove_filter('wp_mail_content_type', 'set_html_content_type');

    return $email;
}

wp_mail_from フックはあなたがあなたの wp_mail 関数で既に設定したEメールを提供します、あなたはそれが空白を受け取り空の変数を送り返していたので設定していません。 。

12
Chris Morris

このメールアドレスのフィルタリングのために:

add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
    return "My Name";
}

今すぐ電子メールアドレスの名前のフィルタを追加します。

add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
    return "change-this-to-your-email-address";
}

あなたのfunction.phpに。

5
Yogesh Shakya