it-swarm.com.de

Überprüfen Sie, ob wp_mail ordnungsgemäß funktioniert.

Ich versuche, wp_mail zu verwenden (Test auf lokalem Computer), aber es wird keine E-Mail empfangen. Der php.ini hat smtp_port = 25 gesetzt und die PHP-Funktion mail() funktioniert soweit.

  • wie kann ich überprüfen, ob wp_mail funktioniert?
  • was kann scheitern

Hier ist der Code meiner Mailfunktion:

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' );
}

Ich bekomme keine Fehler. Gibt es eine Möglichkeit, die Fehlerprotokollierung für WordPress umzuschalten?

Der noreply_address ist [email protected]

2
helle

Wordpress verwendet die PHPMailer-Klasse, um E-Mails über die Funktion mail von PHP zu senden.

Da die mail -Funktion von PHP nach der Ausführung nur sehr wenige Informationen zurückgibt (nur TRUE oder FALSE), empfehle ich, die mv_optin_mail -Funktion vorübergehend auf ein Minimum zu reduzieren, um zu überprüfen, ob die wp_mail -Funktionen funktionieren.

Beispiel:

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

Da Sie die Funktion mail von PHP bereits getestet haben, sollte die Mail ankommen.

Ist dies nicht der Fall, liegt das Problem in den anderen Anweisungen Ihrer Funktion oder in der PHPMailer-Klasse.

In solchen Fällen benenne ich meine Funktion normalerweise in etwas um:

function mv_optin_mail_backup( $id, $data ) {

Und fügen Sie eine temporäre Funktion mit demselben Namen hinzu, mit der Sie herumspielen können:

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

Wenn ich herausgefunden habe, woran es liegt, benutze ich wieder die Backup-Version.

Um eine E-Mail direkt mit PHPMailer zu senden, können Sie Folgendes tun (nicht für die Produktion, sondern nur zum Debuggen):

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

Mit der Aktion 'wp_mail_failed' können Sie einen Sendefehler abfangen.

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

4
gbones

Was ich normalerweise mache, um zu testen, ob wp_mail() E-Mails korrekt sendet, ist, dass ich mich auf meiner Website mit einer anderen E-Mail-Adresse registriere und sehe, ob die E-Mail eintrifft. Wenn dies der Fall ist, bedeutet dies, dass WordPress E-Mails ordnungsgemäß sendet (es verwendet wp_mail(), um Registrierungs-E-Mails zu senden), und Sie sollten Ihre E-Mail-Sendefunktion auf Fehler untersuchen. Um dies zu tun, sollten Sie, wie @Tobias vorschlug, alles von Ihrer E-Mail-Sendefunktion streichen und nur das Grundlegende verlassen:

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

Darüber hinaus werden die von WordPress gesendeten E-Mails (da alle von PHPs mail() -Funktion gesendeten E-Mails möglicherweise von einigen E-Mail-Servern blockiert werden (oder als Spam markiert sind). Daher ist es immer eine gute Idee, SMTP (mehrere Plugins, die dies tun) zu verwenden ) für E-Mails auf der Live-Website.

3

Ich würde damit beginnen, WP_DEBUG in wp-config zu aktivieren und zu sehen, ob das etwas über Ihren Code oder den Code für die Funktion wp_mail anzeigt. Das ist alles für das sofortige Debuggen mit WP.

Sie können auch Easy WP SMTP verwenden und das Debuggen aktivieren und/oder dies für die Verwendung von SMTP einrichten. Es gibt ähnliche Plugins auf WordPress.org, aber ich weiß, dass dieses Plugin eine gute Debug-Option hat. Wenn etwas wie GMail funktioniert, wissen Sie, dass es sich um eine Servereinstellung handelt und nicht um diesen Code.

2
Andrew T