エックスサーバのX10プランを契約している。
他レンタルサーバも幾つか使ってみたけど安定感、レスポンスはピカイチ。
ところが先日のリプレース以降、特定の条件でメールの送信に失敗するようになった。
よくある解決法としては「WP-Mail-SMTP」プラグインをインストールして
SMTPサーバー経由でメールを送信しましょう、というもの。
早速、試してみたけどNG。
WordPressユーザー登録時のメールは送信されるし、
テストで登録した顧客データへはメールが送信できる。
どういったパターンでメール送信に失敗しているのか、細かく見ていくと・・・
「プラス(“+”)が含まれていないメールアドレスには送信できない」ことが分かった!!
なにそれ・・・?汗
エラーメッセージからコードを解析していくと・・・
1. order_edit_form.php – エラーメッセージ(英文) ‘Failure in sending e-mails.’
2. order_edit_form.php – uscesMail.settings.data = “action=order_item_ajax&mode=sendmail・・・”
3. item_post.php – order_item_ajax()
4. function.php – usces_ajax_send_mail()
5. function.php – usces_send_mail()
foreach($to_mailes as $to_maile){ // if (strpos($to_maile, '..') !== false || strpos($to_maile, '.@') !== false || strpos($to_maile, '+') !== false){ if (true){ $headers = "From: " . $from_address . "\r\n"; $res = @mb_send_mail($to_maile, $subject, $message, $headers ); }elseif( !empty( $to_maile ) ){ $headers = ( !empty($para['headers']) ) ? $para['headers'] : ''; $res = @wp_mail( $to_maile , $subject , $message, $headers ); }else{ $res = false; } sleep(1); }
理由はよく分からないけど@wp_mailでメールの送信に失敗しているらしい。
偶然にも「your-email-address@gmail.com」を
「your-email-address+SYSTEM-NAME@gmail.com」のように
プラス(“+”)を含んだメールアドレスでテストしていたので発見が遅れてしまった。
RFC準拠してないメールアドレス宛には@mb_send_mailで送信したい、という意図のように見てとれる。
仕方がないので全てのメールアドレスを@mb_send_mailで送信するよう、ロジックを書き換えた。
Welcartのバージョンアップ時に忘れずにメンテしないと。
アクションフックとかを使うと良いのだろうけど、このロジックは直接書き換えないとダメ・・・だよね?