web-dev-qa-db-ja.com

登録に使用されるEメールアドレスを変更するにはどうすればいいですか?

Webサイト管理者が登録EメールとEメール通知を送信するために使用したものとは異なるEメールアドレスを使用したいのですが。たとえば、[email protected]を使用してWPをインストールしましたが、[email protected]から送信されるすべての登録および通知メールが必要です。

アカウントのメールアドレスをWPダッシュボード設定>一般から変更できると言われましたが、マルチサイトオプションを有効にしました。オプションは現在[ネットワーク設定]> [ネットワーク管理者のメールアドレス]になっていると思いますが、登録用に別のメールアドレスを設定する方法が見つかりません設定に表示されるオプションの通知。

また、SMTPを使用するとGmailでさまざまな電子メールアドレスを処理できることが指摘されましたが、私のサーバーはCloudflareの背後にあり、SendGridプラグインをAPIモードでインストールしました。 SMTPを使用して電子メールヘッダーで送信されます。

1
rraallvv

SMTPを立ち上げたので、の前にという決定をする必要があるだろうと私は述べます。あなたがそれに行く方向はおそらくあなたが "from"アドレスをどう扱うべきかに影響するでしょう。

「単純な」アプローチは単に「差出人」アドレスをフィルタリングすることです - あなたが送信にSMTPを使用していない場合です。

これは次のようなものです。

/**
 * Start by getting the subject line of the notification
 * email. This assumes the use of the use of the WP default,
 * so if some other process of registration is used, then
 * change accordingly.
 */
add_filter( 'wp_new_user_notification_email', 'my_get_notification_subject' );
function my_get_notification_subject( $args ) {
    global $my_notifiction_subject;
    $my_notifiction_subject = $args['subject'];
    return $args;
}

/**
 * Filter for wp_mail so that we can check the subject line
 * of the email being sent against the value of the default
 * notification email (set in the filter above). If the 
 * message is the notification email, then set a global 
 * that we can check in the "from" and "from_name" filters
 * to change the "from" info.
 */
add_filter( 'wp_mail', 'my_check_wp_mail' );
function my_check_wp_mail( $args ) {
    // Needed globals.
    global $my_notifiction_subject, $my_change_from;
    // Start with setting change "from" notification to false.
    $my_change_from = false;
    if ( isset( $my_notifiction_subject ) ) {
        if ( $args['subject'] == $my_notifiction_subject ) {
            $my_change_from = true;
        }
    }
    return $args;
}

/**
 * If the wp_mail filter set the $my_change_from global
 * to true, then the email being sent is the notification
 * email, so we'll use this filter to change the "from"
 * address.
 */
add_filter( 'wp_mail_from', 'my_wp_mail_from' );
function my_wp_mail_from( $from_email ) {
    global $my_change_from;
    if ( $my_change_from ) {
        $from_email = "[email protected]";
    }
    return $from_email;
}

/**
 * Same as above but it changes the "from name" to go
 * with the address.
 */
add_filter( 'wp_mail_from_name', 'my_wp_mail_from_name' );
function my_wp_mail_from_name( $from_name ) {
    global $my_change_from;
    if ( $my_change_from ) {
        $from_name = "No Reply";
    }
    return $from_name;
}

上記の説明(ただし、各フィルタについてもコメントされています)。

  1. wp_new_user_notification_emailフィルタを使用して、通知電子メールの件名行の値を使用してグローバルを設定します(したがって、別の関数で取得できます)。これはデフォルトのWP新規ユーザー通知を想定していることに注意してください。他のプロセスが使用されている場合、またはそのデフォルトが何らかの理由で変更されている場合は、それに対応するためにこれを変更する必要があります。
  2. 件名をwp_mailフィルタで設定したグローバル変数と照合するには、wp_new_user_notification_emailフィルタ( "filter" - wp_mail()関数と混同しないように)を使用してください。それは、送信されているEメールが新しいユーザー通知であるかどうかを教えてくれます。そうであれば、送信元電子メールを変更する必要があるかどうかに関してブール値(true | false)を切り替えるためにグローバル変数を使用します。
  3. wp_mail_fromおよびwp_mail_from_nameフィルタを使用して、$my_change_from(#2で言及されているグローバルブール値)をチェックし、fromアドレスと名前を変更するかどうかを決定します。

これと同じ概念を実行する方法は他にもあります。これは考えられるアプローチの1つです。

SMTPを使用することになった場合、これはうまくいかないので別の話になります。その場合、両方に実際のアドレスが必要になり、phpmailer_initを処理するときにはその情報に基づいて接続を確立する必要があります。

1
butlerblog