Überprüfen Sie, ob wp_mail ordnungsgemäß funktioniert.
-
-
Die verbleibenden Fragen lautennun: Wasist "mv_mail_token ()" und wasgibt es zurück und woher kommt die Konstante "sender_signature" und wasenthält sie?Now the remaining questions are: What is `mv_mail_token()` and what does it return and where does the constant `sender_signature` come from and what does it contain?
- 0
- 2013-06-23
- kaiser
-
Kaiser,hör zu,bitte versuche die Fragen zubeantworten ... wp_mail_token ()gibt einen String zurück und sender_signaturefunktioniertgut.Kaiser, listen, please try to answer the questions ... wp_mail_token() returns a string and sender_signature does at well.
- 1
- 2013-06-24
- helle
-
[debuggist] (https://gist.github.com/franz-josef-kaiser/4063197)[debug gist](https://gist.github.com/franz-josef-kaiser/4063197)
- 2
- 2013-06-24
- kaiser
-
5 Antworten
- Stimmen
-
- 2015-11-01
Wordpress verwendet die PHPMailer-Klasse,um E-Mails über die Funktion
mail
von PHP zu senden.Da die
mail
-Funktion von PHPnach der Ausführungnur sehr wenige Informationen zurückgibt (nur TRUE oder FALSE),empfehleich,Ihremv_optin_mail
-Funktion vorübergehend aufein Minimum zu reduzieren,umfestzustellen,ob Die Funktionenwp_mail
funktionieren.Beispiel:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
Da Sie die PHP-Funktion
mail
bereitsgetestet haben,sollte die Maileintreffen.Wenn diesnicht der Fallist,liegt das Problemin den anderen Anweisungen Ihrer Funktion oderin der PHPMailer-Klasse.
In solchen Fällenbenenne ichmeine Funktionnormalerweisein Folgendes um:
function mv_optin_mail_backup( $id, $data ) {
Undfügen Sieeine temporäre Funktionmit 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; }
Wennich herausgefunden habe,wo das Problem liegt,verwendeich die Sicherungsversionerneut.
Umeine E-Mail direktmit PHPMailer zu senden,können Sie Folgendestun (nichtfür die Produktion,sondernnur 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!"; } }
Wordpress relies on the PHPMailer class to send email through PHP's
mail
function.Since PHP's
mail
function returns very little information after execution (only TRUE or FALSE), I suggest temporarily stripping down yourmv_optin_mail
function to a minimum in order to see if thewp_mail
functions works.Example:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
Since you've tested PHP's
mail
function already, the mail should arrive.If it does not, the problem lies in the other statements of your function or in the PHPMailer class.
In cases like this, I usually rename my function to something like:
function mv_optin_mail_backup( $id, $data ) {
And add a temporary function with the same name to mess around with like so:
function mv_optin_mail( $id, $data ) { $mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult; }
When I have figured out what the problem is, I start using the backup version again.
To send a mail using PHPMailer directly you can do something like this (not for production, just for debugging):
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!"; } }
-
- 2017-05-21
Mit der Aktion 'wp_mail_failed' können Sieeinen Sendefehler abfangen.
https://developer.wordpress.org/reference/hooks/wp_mail_failed/
You can use the 'wp_mail_failed' action to catch a send error.
https://developer.wordpress.org/reference/hooks/wp_mail_failed/
-
- 2015-11-01
Normalerweisetesteich,ob
wp_mail()
E-Mails ordnungsgemäß sendet,indemichmich aufmeiner Websitemit einer anderen E-Mail-Adresse registriere und sehe,ob die E-Maileintrifft.Wenn dies der Fallist,bedeutet dies,dass WordPress E-Mails ordnungsgemäß sendet (es verwendetwp_mail()
zum Senden von Registrierungs-E-Mails) und Sie sollten Ihre E-Mail-Sendefunktion auf Fehler überprüfen.Um dies zutun,sollten Sie,wie von @Tobias vorgeschlagen,alles aus Ihrer E-Mail-Sendefunktionentfernen undnur das Grundlegendebelassen:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Außerdem werden die von WordPressgesendeten E-Mails (wie alle von PHPs
mail()
-Funktiongesendeten E-Mailsmöglicherweise voneinigen E-Mail-Servernblockiert (oder als Spammarkiert),sodass diesimmer der FallistEinegute Idee,SMTP (mehrere Plugins,die diestun)für E-Mails auf der Live-Website zu verwenden.What I usually do to test if
wp_mail()
is sending e-mails properly is just registering on my website with another e-mail address and seeing if the e-mail arrives. If it does, it means that WordPress is properly sending e-mails (it useswp_mail()
to send registration e-mails) and you should inspect your mail sending function for any errors. To do that, as @Tobias suggested, you should strip everything from your mail sending function and only leave the basic:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Additionally, the e-mails sent by WordPress (as all e-mails sent by PHP's
mail()
function might be blocked by some e-mail servers (or marked as spam) so it's always a good idea to use SMTP (multiple plugins that do that) for e-mails on the live website. -
- 2014-04-22
Ich würde zunächst WP_DEBUG in wp-config aktivieren undprüfen,ob diesetwas über Ihren Code anzeigtoder den Codefür die Funktion wp_mail.Dasist allesfür das Debuggenmit WP.
Sie können auch Easy WP SMTP verwenden und das Debuggen aktivieren und/odereinrichtenSMTP verwenden.Esgibt ähnliche Plugins auf WordPress.org,aberich weiß,dass dieseseine gute Debug-Option hat.Wenn soetwas wie GMailfunktioniert,wissen Sie,dasses sich umeine Servereinstellung handelt undnicht um diesen Code.
I would start by enabling WP_DEBUG in wp-config and see if that shows you anything about your code or the code for the wp_mail function. That is about it for debugging right out of the box with WP.
Also, you can use Easy WP SMTP and enable debugging and/or set that up to use SMTP. There are similar plugins on WordPress.org but I know this one has a good debug option. If something like GMail works then you'll know it is a server setting and not this code.
-
- 2020-04-14
In diesem Dokument waren sehrinteressante Vorschlägeenthalten.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooter
Insbesonderebei der Arbeitmit Azure Virtual Machineblockierte die SELinux-Konfiguration die ausgehenden Verbindungen.
Wenn Sieeinen Fehler wie sehen
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
Möglicherweise stoßen Sie auf SELinux,das PHP verhindert oder der Webserver kann keine E-Mails senden. Diesistbesonders wahrscheinlich am RedHat/Fedora/Centos. Mit dem Befehlgetsebool
können wir überprüfen,ob Der httpd-Daemon darfeine Verbindung über das Netzwerk herstellen und Senden Sieeine E-Mail:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
Dieser Befehlgibt einen Booleschen Wertein oder aus. Wennes ausgeschaltetist,können wireseinschalten:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
Wenn Sie PHP-FPM überfastcgi ausführen,sind Sie Möglicherweisemuss dies auf denfpm-Daemon undnicht auf httpd angewendet werden.
Very interesting suggestions were in this document.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
In particular working with Azure Virtual Machine the SELinux config was blocking the outgoing connections.
If you see an error like
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
, you may be running into SELinux preventing PHP or the web server from sending email. This is particularly likely on RedHat / Fedora / Centos. Using thegetsebool
command we can check if the httpd daemon is allowed to make a connection over the network and send an email:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
This command will return a boolean on or off. If it's off, we can turn it on:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
If you're running PHP-FPM via fastcgi, you may need to apply this to the fpm daemon rather than httpd.
Ich versuche,
wp_mail
zu verwenden (Test auf lokalem Computer),aberes wird keine E-Mailempfangen. Für diephp.ini
istsmtp_port = 25
festgelegt,und diephpmail()
funktioniertbisher.Hierist der Codemeiner Mail-Funktion:
Ichbekomme keine Fehler. Gibteseine Möglichkeit,die Fehlerprotokollierungfür WordPress umzuschalten?
Die
noreply_address
lautetnoreply@root