wp_mail関数でちゃんとメールを送信する方法
WordPressのwp_mail関数は文字化けもなく(たぶん)、簡単にメールを送信できる便利なやつだけど、一部の受信メールサーバーには届いていないことが最近わかったから、その解決方法。
「届いてないよ」と言われて
一部の人にメール届いてないよと言われて、どうせメールの受信設定がおかしいか迷惑メール扱いになってんだろと思ってたんだけど、念の為にpostfixのログを見てみたら、ホントに届いていなかった。疑ってごめんね。
status=bounced (host ◯◯◯.sakura.ne.jp[△△△.△△.△△△.△△△] said: 553 5.1.8 <□□□@localhost.localdomain>... Domain of sender address □□□@localhost.localdomain does not exist (in reply to MAIL FROM command))
宛先はさくらインターネットのメールサーバーだったんだけど、「localhost.localdomain」なんてドメインねぇじゃん、受け取れるわけねぇじゃん、って事だよね。Gmail宛には届いてるからサーバによってここの部分は緩かったりするのね、初めて知った。
どうやってsender addressを変更すんの
ググったら、PHPのmail関数では第5引数に、頭に-f
を付けたアドレスを指定してあげればいいらしいのがわかった。
でもさー、mail関数だと環境によっては文字化けとかするよねー確かー嫌だなーwp_mailで何とかなんないのー。
なりました
でもwp_mail関数自体にはmail関数でいうところの第5引数にあたる引数はない。ググっても情報が出てこないからwp_mail関数のソースを追ってみた。内部ではphpMailer
を利用してたのね。で、phpMailerのソースを追ってみたらSender
ってメンバ変数にアドレスを設定すればいいみたい。publicだから直接アクセスもできるっぽい。
でも直接ソースをいじるのはなーって思いながら読み進めてくと最後の方にありました。
do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) );
まるっとphpMailerのインスタンスを引数に突っ込んであるから、これを使用して
add_action('phpmailer_init', 'add_mail_sender');
function add_mail_sender($phpmailer){
$phpmailer->Sender = 'xxx@example.com';
return $phpmailer;
}
これでオッケ。最後のreturn
はいらないかも。いや、試してないから分かんないけど。
これでめでたくwp_mail関数でsenderの設定ができて、さくらインターネットのサーバにも受け入れられるようになったよ。
コメント0