web-dev-qa-db-fra.com

Comment configurer SMTP pour un seul wp_mail () spécifique

Je veux juste configurer SMTP pour une instance spécifique de wp_mail().

J'ai testé des plugins tels que "Easy WP SMTP" et vérifié comment configurer SMTP manuellement, mais tous ils s'appliquent à l'ensemble du site puis tous les courriels du site sont envoyés via le compte SMTP .

Je ne souhaite pas envoyer d'autres courriels, tels que des lettres d'information ou des courriels d'approbation de commentaires, via le même compte SMTP.

2
Unnikrishnan R

Ce qui suit est un moyen de répondre à votre question. C'est en deux parties. Tout d'abord, vous créerez votre connexion sous forme de constantes à utiliser ultérieurement. Le meilleur moyen de le faire est dans wp-config.php. (Vous avez dit que vous le faites dans un plugin personnalisé. Si c'est quelque chose qui doit être portable, alors vous voudrez peut-être changer cela en enregistrement dans la base de données.) Deuxièmement, vous allez appliquer une fonction accrochée au phpmailer que WP utilise. Dans cette fonction, vous pouvez définir vos critères d'utilisation de la connexion SMTP au lieu de la valeur par défaut.

Vous pouvez configurer vos informations d'identification SMTP et les informations de connexion au serveur dans wp-config.php en tant que constantes, comme suit:

/*
 * 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

Une fois que vous avez ajouté cela à votre fichier wp-config.php, vous avez des constantes que vous pouvez utiliser pour vous connecter et envoyer n'importe quel email via SMTP. Vous pouvez le faire en associant l'action phpmailer_init et en l'utilisant pour configurer des critères de connexion à l'aide des constantes que vous avez définies ci-dessus.

Dans votre cas spécifique, vous souhaitez ajouter une logique conditionnelle à la fonction pour identifier la condition dans laquelle vous souhaitez envoyer via SMTP. Configurez votre conditionnel de sorte que seuls vos critères utilisent la connexion SMTP pour phpmailer et que tous les autres utilisent ce qui est déjà utilisé.

Comme nous ne savons pas ce que cela représente dans votre OP, je l’ai représenté ici avec un true === $some_criteria générique:

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
}

Ce concept est tiré du Gist suivant sur github: https://Gist.github.com/butlerblog/c5c5eae5ace5bdaefb5d

Instructions générales à ce sujet ici: http://b.utler.co/Y3

2
butlerblog