web-dev-qa-db-ja.com

Wp_mailが正しく機能しているかどうかを確認しますか?

私はwp_mail(ローカルマシンでのテスト)を使おうとしていますが、メールが届きません。 php.iniにはsmtp_port = 25が設定されており、php mail()はこれまでのところ動作しています。

  • wp_mailが機能しているかどうかを確認する方法
  • 失敗するもの

これが私のメール機能のコードです。

function mv_optin_mail($id, $data){

    $url = $id."-".mv_mail_token($id, $data['token']);

    add_filter( 'wp_mail_content_type', 'set_html_content_type' );
    add_filter( 'wp_mail_charset', 'utf8' );

    $headers[] = 'From: '.sender_signature.' <'.noreply_address.'>';    

    ob_start();
    include("optin-mail.php");
    $html_mail = ob_get_contents();
    ob_end_clean();

    wp_mail( $data['email'], 'Some Subject', $html_mail, $headers );
    remove_filter( 'wp_mail_content_type', 'set_html_content_type' );
    remove_filter( 'wp_mail_charset', 'utf8' );
}

エラーは出ません。 WordPressのエラーログインを切り替える方法はありますか?

noreply_addressnoreply@rootです

2
helle

Wordpressは、PHPのmail関数を通じて電子メールを送信するためにPHPMailerクラスに依存しています。

PHPのmail関数は実行後にほとんど情報を返さないため(TRUEまたはFALSEのみ)、mv_optin_mail関数が機能するかどうかを確認するために、一時的にwp_mail関数を最小限にすることをお勧めします。

例:

$mailResult = false;
$mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' );
echo $mailResult;

PHPのmail関数はすでにテスト済みなので、メールは届くはずです。

そうでない場合、問題はあなたの関数の他のステートメントかPHPMailerクラスにあります。

このような場合、私は通常私の関数の名前を次のように変更します。

function mv_optin_mail_backup( $id, $data ) {

そして同じような名前で一時的な関数を追加してください。

function mv_optin_mail( $id, $data ) {
    $mailResult = false;
    $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' );
    echo $mailResult;
}

問題が何であるかを理解したら、バックアップ版をもう一度使い始めます。

PHPMailerを使って直接メールを送信するには、次のようにします(本番用ではなく、デバッグ用のみ)。

add_action( 'phpmailer_init', 'my_phpmailer_example' );
function my_phpmailer_example( $phpmailer ) {
    $phpmailer->isSMTP();
    //$phpmailer->Host = 'smtp.example.com';
    //    $phpmailer->SMTPAuth = true; // Force it to use Username and Password to authenticate
    $phpmailer->Port = 25;
    //    $phpmailer->Username = 'yourusername';
    //    $phpmailer->Password = 'yourpassword';

    // Additional settings…
    //$phpmailer->SMTPSecure = "tls"; // Choose SSL or TLS, if necessary for your server
    $phpmailer->setFrom( "[email protected]", "From Name" );
    $phpmailer->addAddress( "[email protected]", "Your name" );
    $phpmailer->Subject    = "Testing PHPMailer";           
    $phpmailer->Body     = "Hurray! \n\n Great.";
    if( !$phpmailer->send() ) {
        echo "Mailer Error: " . $phpmailer->ErrorInfo;
    } else {
        echo "Message sent!";
    }                       

}       
4
Tobias Beuving

送信エラーをキャッチするために 'wp_mail_failed'アクションを使うことができます。

https://developer.wordpress.org/reference/hooks/wp_mail_failed/

4
gbones

私がwp_mail()が正しく電子メールを送信しているかどうかをテストするために私が通常することは私のウェブサイトに別の電子メールアドレスで登録してその電子メールが届くかどうかを見ることです。もしそうなら、それはWordPressが適切に電子メールを送信していることを意味し(登録電子メールを送信するためにwp_mail()を使用します)、エラーがないかあなたのメール送信機能を調べるべきです。 @Tobiasが示唆しているように、これを行うには、メール送信機能からすべてを削除し、基本部分だけを残してください。

function wpse_100047() {
    echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' );
}

さらに、WordPressによって送信される電子メール(PHPのmail()関数によって送信されるすべての電子メールが一部の電子メールサーバーによってブロックされる(またはスパムとしてマークされる)可能性があるため)常にSMTP(複数のプラグインを使用) )ライブウェブサイト上の電子メールのために。

3

私はwp-configで WP_DEBUG を有効にすることから始めて、それがあなたのコードまたはwp_mail関数のためのコードについて何かを示しているかどうか確かめてください。それはWPですぐにデバッグできるということです。

また、 Easy WP SMTP を使用してデバッグを有効にしたり、SMTPを使用するように設定したりすることもできます。 WordPress.orgにも似たようなプラグインがありますが、これには良いデバッグオプションがあることを私は知っています。 GMailのようなものが動作するならば、あなたはそれがサーバ設定であって、このコードではないことを知っているでしょう。

2
Andrew T