メルマガプラグインで有名なSubscribe2の、送信するメールのメールヘッダーを変更します。
以下のソースでは、差出人(From)と文字コード(Content-type)を変更しています。
functions.phpに記述するだけです。
/* Subscribe2のメールヘッダーを変更する */
function change_s2_mail_header(){
$fromName = "差出人のなまえなど";
if ( function_exists('mb_encode_mimeheader') ) {
$fromName = mb_encode_mimeheader($fromName);
}
$header['From'] = $fromName ." <". get_option('admin_email') .">"; //
$header['Content-Type'] = "text/plain; charset=\"ISO-2022-JP\"";
return $header;
}
add_filter('s2_email_headers','change_s2_mail_header');
Subscribe2のフック「s2_email_headers」をadd_filterに通してメールヘッダーの内容を変更しています。
差出人の変更はプラグインでも出来るようですが、
functions.phpで何とかしたかったのでちょっと試行錯誤してみました。
きっかけと経緯
Subscribe2を導入してメール送信テストをしていましたが、
記事を更新したときに通知されるメールがどうもキャリアメール宛にうまく送信できずにいました。
あれこれ調べてみると、
手動で配信する「メールを送信」によるメール(こちらでは受信できた)と、
記事を公開したときに配信されるメール(設定ではプレーンテキストでの配信)の
メールヘッダーが微妙に違っていたのです。
「メールで送信」で送信したメールの文字コードがISO-2022-JPになっていたのに対して、
記事を公開したときに配信されるメールは、UTF-8となっており、
キャリアメールはどうやらUTF-8ではメールサーバーで弾いている?らしく届かなかったみたいです。
(どうしてキャリアメールだけ受信できなかったのかは原因がはっきりしていないのですが、
文字コードを変更したら受信できるようになりました。)
Subscribe2のソースを見ていると、文字コードを設定するところでbloginfo('charset')を利用しており、
メールヘッダーのフックがあったため、ここで差し替えが出来るかも!?
…と試行錯誤した結果が上記のソースコードです。
※ WP ver3.5以降は、bloginfo('charset')は常にUTF-8を返すとのことで、
設定画面から文字コードの変更は出来なくなっているようです。