webentwicklung-frage-antwort-db.com.de

So richten Sie SMTP nur für ein bestimmtes wp_mail () ein

Ich möchte SMTP nur für eine bestimmte Instanz von wp_mail() einrichten.

Ich habe Plugins wie "Easy WP SMTP" getestet und auch überprüft, wie SMTP manuell eingerichtet wird, aber alle diese gelten für die gesamte Site und dann wird jede E-Mail von der Site über das SMTP-Konto gesendet .

Ich möchte keine anderen E-Mails wie Newsletter oder Kommentargenehmigungs-E-Mails über dasselbe SMTP-Konto senden.

2
Unnikrishnan R

Das Folgende ist eine Möglichkeit, Ihre Frage zu behandeln. Es besteht aus zwei Teilen. Zuerst würden Sie Ihre Verbindung als Konstanten erstellen, die später verwendet werden sollen. Der beste Weg dies zu tun ist in wp-config.php. (Sie haben erwähnt, dass Sie dies in einem benutzerdefinierten Plugin tun. Wenn dies etwas ist, das portierbar sein soll, möchten Sie dies möglicherweise ändern, um die Einstellungen stattdessen in der Datenbank zu speichern.) Zweitens wenden Sie eine Funktion an, die mit der verknüpft ist phpmailer, den WP verwendet. In dieser Funktion können Sie Ihre Kriterien definieren, in denen Sie die SMTP-Verbindung anstelle der Standardverbindung verwenden möchten.

Sie können Ihre SMTP-Anmeldeinformationen und Serververbindungsinformationen in der Datei wp-config.php wie folgt als Konstanten einrichten:

/*
 * Set the following constants in wp-config.php
 * These should be added somewhere BEFORE the
 * constant ABSPATH is defined.
 */
define( 'SMTP_USER',   '[email protected]' );    // Username to use for SMTP authentication
define( 'SMTP_PASS',   'smtp password' );       // Password to use for SMTP authentication
define( 'SMTP_Host',   'smtp.example.com' );    // The hostname of the mail server
define( 'SMTP_FROM',   '[email protected]' ); // SMTP From email address
define( 'SMTP_NAME',   'e.g Website Name' );    // SMTP From name
define( 'SMTP_PORT',   '25' );                  // SMTP port number - likely to be 25, 465 or 587
define( 'SMTP_SECURE', 'tls' );                 // Encryption system to use - ssl or tls
define( 'SMTP_AUTH',    true );                 // Use SMTP authentication (true|false)
define( 'SMTP_DEBUG',   0 );                    // for debugging purposes only set to 1 or 2

Sobald Sie dies zu Ihrer wp-config.php-Datei hinzugefügt haben, verfügen Sie über Konstanten, mit denen Sie eine Verbindung herstellen und E-Mails über SMTP senden können. Sie können dies tun, indem Sie sich an die Aktion phpmailer_init binden und diese verwenden, um Verbindungskriterien unter Verwendung der oben definierten Konstanten einzurichten.

In Ihrem speziellen Fall möchten Sie der Funktion eine bedingte Logik hinzufügen, um den Zustand zu identifizieren, in dem Sie über SMTP senden möchten. Richten Sie Ihre Bedingung so ein, dass nur Ihre Kriterien die SMTP-Verbindung für den phpmailer verwenden und alle anderen die bereits verwendeten verwenden.

Da wir nicht wissen, was das von Ihrem OP ist, habe ich es hier mit einem generischen true === $some_criteria dargestellt:

add_action( 'phpmailer_init', 'send_smtp_email' );
function send_smtp_email( $phpmailer ) {

    if ( true === $some_criteria ) {
        if ( ! is_object( $phpmailer ) ) {
            $phpmailer = (object) $phpmailer;
        }

        $phpmailer->Mailer     = 'smtp';
        $phpmailer->Host       = SMTP_Host;
        $phpmailer->SMTPAuth   = SMTP_AUTH;
        $phpmailer->Port       = SMTP_PORT;
        $phpmailer->Username   = SMTP_USER;
        $phpmailer->Password   = SMTP_PASS;
        $phpmailer->SMTPSecure = SMTP_SECURE;
        $phpmailer->From       = SMTP_FROM;
        $phpmailer->FromName   = SMTP_NAME;
    }

    // any other case would not change the sending server
}

Dieses Konzept stammt von Gist on Github: https://Gist.github.com/butlerblog/c5c5eae5ace5bdaefb5d

Allgemeine Hinweise dazu hier: http://b.utler.co/Y3

2
butlerblog