WordPress E-Mails kontinuierlich senden. Wie man es stoppt?

Kürzlich werde ich die wp_mail-function testen. Ich habe den folgenden Code in eine Plugin-Datei geschrieben: wp_mail( 'me@example.net', 'The subject', 'The message' );

und ich habe meine Email anstelle von mir@example.net eingegeben. Jetzt schickt WordPress kontinuierlich eine E-Mail an mich. Ich weiß nicht, wie ich damit aufhören soll! Es gibt über 1000 Mails in nur 15 Minuten. Bitte hilf mir. Ich habe alle Plugins deaktiviert und lösche sogar die Datei pluggable.php.

Der Kontext ist:

 function twp_mail_action($result, $to, $cc, $bcc, $subject, $body){ $nt = new Notifygram(); $_apikey = get_option('twp_api_key'); $_apitoken = get_option('twp_api_token'); $_projectname = get_option('twp_project_name'); $nt->Notifygram($_apikey,$_apitoken, $_projectname ); $nt->notify($body); wp_mail( 'myemail@gmail.com', 'The subject', 'The message' ); } add_action( 'phpmailer_init', function( $phpmailer ){ $phpmailer->action_function = 'twp_mail_action'; } ); 

Solutions Collecting From Web of "WordPress E-Mails kontinuierlich senden. Wie man es stoppt?"

Das Problem

Ich denke, das Problem hier ist, dass Sie eine Endlosschleife erzeugen, indem Sie wp_mail() innerhalb des $phpmailer->action_function Callbacks platzieren, der nach jeder E-Mail $phpmailer->action_function .

Jedes Mal, wenn Sie eine E-Mail mit wp_mail() senden, rufen Sie wp_mail() erneut auf, und wieder und wieder … usw

Mögliche Problemumgehung

Sie sollten stattdessen zum Beispiel den folgenden Ansatz verwenden:

 function twp_mail_action($result, $to, $cc, $bcc, $subject, $body){ // Here we remove the phpmailer_init action callback, to avoid infinite loop: remove_action( 'phpmailer_init', 'wpse_phpmailer_init' ); // Send the test mail: wp_mail( 'myemail@gmail.com', 'The subject', 'The message' ); // Here we add it again add_action( 'phpmailer_init', 'wpse_phpmailer_init' ); } add_action( 'phpmailer_init', 'wpse_phpmailer_init' ); function wpse_phpmailer_init( $phpmailer ) { $phpmailer->action_function = 'twp_mail_action'; } 

Beachten Sie, dass dies nicht getestet ist. Testen Sie dies also nur auf einem Server, auf dem Sie die Mail-Warteschlange selbst löschen können, wenn beim Testen Fehler gemacht werden 😉

Besser:

Protokollieren Sie stattdessen Ihre Tests in einer Datei.

Begrenzen Sie die Zustellung von E-Mails

Es wäre interessant, wenn wir die Anzahl der gesendeten E-Mails pro Seite beim Testen begrenzen könnten.

Hier ist eine Idee für ein solches Plugin:

 < ?php /** * Plugin Name: Limit Delivered Emails * Description: Set an upper limit to number of sent emails per page load. * Plugin URI: https://wordpress.stackexchange.com/a/193455/26350 */ add_action( 'phpmailer_init', function( $phpmailer ) { $max_emails_per_page_load = 10; // <-- Edit this to your needs! if( did_action( 'phpmailer_init' ) > $max_emails_per_page_load ) $phpmailer->ClearAllRecipients(); } ); 

Wir löschen die to / cc / bc- Felder mit der ClearAllRecipients() -Methode, um die E-Mail-Zustellung zu stoppen.

Wir könnten auch einen nicht gefundenen Fehler mit

 throw new \phpmailerException( __( 'Too many emails sent!' ) ); 

anstatt zu verwenden:

 $phpmailer->ClearAllRecipients(); 

Dies hängt mit meiner Antwort auf die Verwendung der PHPMailer class zusammen.