Supongamos que tenemos un sitio WP en blanco y queremos establecer la configuración SMTP mediante programación en nuestro complemento o tema. ¿Cuál es la forma más fácil de hacerlo sin cambiar los archivos principales?
18
En primer lugar, si echamos un vistazo a la implementación de la wp_mail
función, veremos que esta función utiliza la PHPMailer
clase para enviar correos electrónicos. También podríamos notar que hay una función de llamada codificada $phpmailer->IsMail();
, que establece el uso de la mail()
función PHP . Significa que no podemos usar la configuración SMTP con él. Necesitamos llamar a la isSMTP
función de PHPMailer
clase. Y también necesitamos establecer nuestra configuración SMTP también.
Para lograrlo necesitamos obtener acceso a la $phpmailer
variable. Y aquí llegamos a la phpmailer_init
acción que se llama antes de enviar un correo electrónico. Entonces podemos hacer lo que necesitamos escribiendo nuestro manejador de acciones:
add_action( 'phpmailer_init', 'wpse8170_phpmailer_init' );
function wpse8170_phpmailer_init( PHPMailer $phpmailer ) {
$phpmailer->Host = 'your.smtp.server.here';
$phpmailer->Port = 25; // could be different
$phpmailer->Username = '[email protected]'; // if required
$phpmailer->Password = 'yourpassword'; // if required
$phpmailer->SMTPAuth = true; // if required
// $phpmailer->SMTPSecure = 'ssl'; // enable if required, 'tls' is another possible value
$phpmailer->IsSMTP();
}
Y eso es todo.
wp_mail
función de reescritura .Además de la respuesta @EugeneManuilov.
Configuraciones SMTP
De forma predeterminada, estos solo pueden establecerse, como @EugeneManuilov ya respondió, durante una devolución de llamada adjunta a un
do_action_ref_array()
.Fuente / núcleo .Excepciones SMTP
Por defecto, WordPress no le da ninguna salida de depuración. En cambio, solo regresa
FALSE
si se produjo un error. Aquí hay un pequeño complemento para solucionar esto:Repositorio
Los complementos están disponibles en este Gist en GitHub , así que considera revisar esos complementos desde allí para obtener actualizaciones.
fuente
Las otras respuestas a esta publicación, si bien proporcionan una solución de trabajo, no abordan el problema de seguridad de almacenar sus credenciales SMTP en un archivo de complemento o funciones.php. En algunos casos, eso puede estar bien, pero las mejores prácticas dictarían almacenar esta información de manera más segura. Realmente no hay una buena razón para no seguir las mejores prácticas cuando se trata de proteger sus credenciales.
Algunos sugerirían guardarlo en la base de datos como una opción, pero también proporciona los mismos problemas de seguridad dependiendo de la cantidad de usuarios administrativos que tenga su sitio y si esos usuarios deberían poder ver estas credenciales de inicio de sesión. Esta es también la misma razón para no usar un complemento para esto.
La mejor manera de hacerlo es definir constantes para la información de phpmailer en su archivo wp-config.php. En realidad, esto se ha discutido como una característica en el componente de correo , pero no se ha aceptado como una mejora real en este momento. Pero puede hacerlo usted mismo agregando lo siguiente a wp-config.php:
Una vez que se definen en wp-config.php, se pueden usar en cualquier lugar usando la constante definida. Por lo tanto, podría usarlos en un archivo de complemento o en su functions.php. (Específico para el OP, use un archivo de complemento).
Hay un poco más de detalles sobre esto en esta publicación y una idea general de github aquí .
fuente
.env
archivo gitignored en su lugar. Perowp-config.php
, de todos modos, nadie que pone algo sensible está usando el control de versiones ...