{"id":48,"date":"2025-03-23T20:04:09","date_gmt":"2025-03-24T00:04:09","guid":{"rendered":"https:\/\/juredev.com\/blog\/?p=48"},"modified":"2025-04-07T22:26:19","modified_gmt":"2025-04-08T02:26:19","slug":"como-configurar-msmtp-con-php-para-enviar-correos-en-wordpress-sin-plugins","status":"publish","type":"post","link":"https:\/\/juredev.com\/blog\/2025\/03\/como-configurar-msmtp-con-php-para-enviar-correos-en-wordpress-sin-plugins\/","title":{"rendered":"C\u00f3mo Configurar msmtp con PHP para Enviar Correos en WordPress sin Plugins"},"content":{"rendered":"\n<p>Una soluci\u00f3n sencilla y ligera para tu VPS<\/p>\n\n\n\n<p>Este blog lo tengo alojado en un VPS con Debian 12, y cr\u00e9eme, el env\u00edo de correos me dio m\u00e1s de un dolor de cabeza al principio. Si alguna vez has usado la funci\u00f3n mail() de PHP en WordPress, seguro conoces sus fallos: correos que caen en spam, env\u00edos que nunca llegan o la falta de una autenticaci\u00f3n SMTP como Dios manda. Y si, como yo, tienes un VPS con recursos justitos, cargar tu WordPress con plugins para manejar eso es como pedirle a un caballo agotado que lleve una maleta extra: m\u00e1s CPU y memoria gastadas cuando no siempre te sobran.<\/p>\n\n\n\n<p>Aqu\u00ed es donde entra <strong>msmtp<\/strong>, una herramienta ligera que reemplaza a Sendmail y te da control total sobre c\u00f3mo se env\u00edan tus correos. Sin plugins, sin complicaciones innecesarias: solo correos que llegan a donde deben, menos carga en tu servidor y la libertad de personalizar todo a tu gusto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es msmtp y por qu\u00e9 deber\u00edas probarlo?<\/h2>\n\n\n\n<p><strong>msmtp<\/strong> es un cliente SMTP simple y directo que env\u00eda correos desde tu servidor usando protocolos seguros. Nada de adornos, solo lo esencial. Comparado con plugins como WP Mail SMTP o Easy WP SMTP, tiene ventajas claras:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bajo consumo<\/strong>: Solo usa recursos cuando env\u00eda un correo, sin dejar procesos pesados corriendo todo el tiempo.<\/li>\n\n\n\n<li><strong>Flexibilidad total<\/strong>: Puedes configurar varias cuentas SMTP o incluso reglas avanzadas seg\u00fan qui\u00e9n env\u00eda o recibe el correo.<\/li>\n\n\n\n<li><strong>Independencia<\/strong>: No depende de WordPress ni de sus actualizaciones, as\u00ed que no te preocupas por compatibilidad.<\/li>\n<\/ul>\n\n\n\n<p>Es perfecto para VPS peque\u00f1os, como el m\u00edo, servidores sin interfaz gr\u00e1fica o proyectos donde necesitas un SMTP a medida sin complicarte la vida.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lo que necesitas antes de empezar<\/h2>\n\n\n\n<p>Arm\u00e9 esta gu\u00eda pensando en c\u00f3mo configur\u00e9 mi propio VPS, as\u00ed que esto es lo que vas a necesitar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un VPS con Debian 12 (o alguna distro basada en Ubuntu).<\/li>\n\n\n\n<li>Acceso al servidor con permisos de root o al menos con sudo a mano.<\/li>\n\n\n\n<li>Una cuenta de correo con SMTP (puede ser Gmail, Outlook o cualquier proveedor que te ofrezca eso).<\/li>\n\n\n\n<li>Un m\u00ednimo de comodidad con la terminal (si sabes moverte con nano o vim para editar archivos, ya vas bien).<\/li>\n<\/ul>\n\n\n\n<p>En mi caso, utilizo Nginx como servidor web y PHP-FPM para gestionar PHP. Esta configuraci\u00f3n es com\u00fan en VPS modernos debido a su rendimiento y eficiencia. Si est\u00e1s usando Apache, no te preocupes; la l\u00f3gica general de la configuraci\u00f3n de <strong>msmtp <\/strong>ser\u00e1 similar, aunque algunos detalles como la ubicaci\u00f3n de archivos de configuraci\u00f3n y comandos pueden variar ligeramente.<\/p>\n\n\n\n<p>Si encuentras diferencias en los pasos debido a tu configuraci\u00f3n, es posible que necesites investigar un poco sobre c\u00f3mo adaptarlos a tu sistema. Sin embargo, la mayor\u00eda de los pasos te servir\u00e1n igual.<\/p>\n\n\n\n<p>Si te gustar\u00eda una gu\u00eda m\u00e1s detallada sobre c\u00f3mo configurar <strong>msmtp <\/strong>con Apache y PHP, incluyendo optimizaciones avanzadas, \u00a1d\u00e9jame saber en los comentarios! Si hay suficiente inter\u00e9s, exploraremos ese tema en un pr\u00f3ximo art\u00edculo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 1: Instalar y configurar msmtp<\/h2>\n\n\n\n<p>\u00bfSi te sientes listo? Vamos al grano.<\/p>\n\n\n\n<p><strong>Instalaci\u00f3n<\/strong><\/p>\n\n\n\n<p>Primero, actualiza tu servidor e instala <strong>msmtp<\/strong>. Abre la terminal y escribe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsudo apt update\nsudo apt install msmtp\n<\/code><\/pre>\n\n\n\n<p>\u00a1F\u00e1cil y r\u00e1pido!<\/p>\n\n\n\n<p><strong>Configurar el SMTP<\/strong><\/p>\n\n\n\n<p>Ahora toca crear un archivo de configuraci\u00f3n. Puedes hacerlo globalmente en <code>\/etc\/msmtprc<\/code> (ideal para este caso) o por usuario en <code>~\/.msmtprc<\/code>. Vamos con la opci\u00f3n global:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsudo nano \/etc\/msmtprc\n<\/code><\/pre>\n\n\n\n<p>Pega esta configuraci\u00f3n de ejemplo (ajustada para Gmail):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n# Configuraci\u00f3n b\u00e1sica\naccount default\nhost smtp.gmail.com\nport 587\nauth on\nuser tu_correo@gmail.com\npassword tu_contrase\u00f1a\ntls on\ntls_starttls on\nlogfile ~\/.msmtp.log\n<\/code><\/pre>\n\n\n\n<p>Sustituye <code>tu_correo@gmail.com<\/code> y <code>tu_contrase\u00f1a<\/code> por los datos de tu cuenta. <strong>Ojo<\/strong>: si usas Gmail con verificaci\u00f3n en dos pasos, necesitas una <a href=\"https:\/\/myaccount.google.com\/apppasswords\">contrase\u00f1a de aplicaci\u00f3n<\/a> (la generas en la configuraci\u00f3n de seguridad de tu cuenta de Google). Guarda el archivo con <code>Ctrl+O<\/code>, presiona <code>Enter<\/code> y sal con <code>Ctrl+X<\/code>.<\/p>\n\n\n\n<p>Para que nadie m\u00e1s pueda echarle un ojo tus credenciales, protege el archivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsudo chmod 600 \/etc\/msmtprc\n<\/code><\/pre>\n\n\n\n<p><strong>Probar que todo funciona<\/strong><\/p>\n\n\n\n<p>Env\u00eda un correo de prueba para asegurarte de que <strong>msmtp <\/strong>est\u00e1 bien configurado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\necho \"Correo de prueba desde msmtp\" | msmtp --debug --from=default -t destino@correo.com\n<\/code><\/pre>\n\n\n\n<p>Cambia <code>destino@correo.com<\/code> por un correo al que tengas acceso. Si algo falla, echa un vistazo al archivo de log en <code>~\/.msmtp.log<\/code> para ver qu\u00e9 pasa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 2: Conectar msmtp con PHP<\/h2>\n\n\n\n<p>Para que PHP deje de lado su <code>mail()<\/code> predeterminada y use msmtp, solo necesitas ajustar un par de detalles.<\/p>\n\n\n\n<p><strong>Editar php.ini<\/strong><\/p>\n\n\n\n<p>Busca el archivo <code>php.ini<\/code> de tu servidor. Si no sabes d\u00f3nde est\u00e1, usa: Primero, encuentra el archivo php.ini que usa tu servidor. Si no tienes idea de d\u00f3nde est\u00e1, este comando te lo dice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nphp --ini\n<\/code><\/pre>\n\n\n\n<p>O puedes buscar en carpetas como <code>\/etc\/php\/8.x\/fpm\/php.ini<\/code> (con Nginx, mi caso, suele estar ah\u00ed si usas PHP-FPM). Si utilizas Apache, la ruta podr\u00eda ser similar a <code>\/etc\/php\/8.x\/apache2\/php.ini<\/code>. \u00c1brelo con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsudo nano \/etc\/php\/8.x\/apache2\/php.ini\n<\/code><\/pre>\n\n\n\n<p>Busca la l\u00ednea <code>sendmail_path<\/code> (usa Ctrl+W en nano para encontrarla r\u00e1pido) y c\u00e1mbiala por:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsendmail_path = \"\/usr\/bin\/msmtp -t\"\n<\/code><\/pre>\n\n\n\n<p>Guarda los cambios con Ctrl+O, Enter, y sal con Ctrl+X.<\/p>\n\n\n\n<p><strong>Reiniciar PHP-FPM (es mi caso, nada de Apache aqu\u00ed)<\/strong><\/p>\n\n\n\n<p>Aplica los cambios reiniciando PHP-FPM:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsudo systemctl restart php8.x-fpm \n<\/code><\/pre>\n\n\n\n<p>(Nota: cambia 8.x por la versi\u00f3n de PHP que tengas instalada, como 8.1 o 8.2. Si no est\u00e1s seguro, usa php -v para verificarlo). \u00a0<\/p>\n\n\n\n<p><strong>Probar con un script PHP<\/strong><\/p>\n\n\n\n<p>Crea un archivo <code>test.php<\/code> en la ra\u00edz de tu sitio (o donde prefieras):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n&lt;?php\nmail('destino@correo.com', 'Asunto de prueba', 'Este es un correo enviado con msmtp y PHP.');\necho \"Correo enviado. Revisa tu bandeja (y el spam, por si acaso).\";\n?>\n<\/code><\/pre>\n\n\n\n<p>Actualiza <code>destino@correo.com<\/code> con tu email, luego abre el archivo en tu navegador (por ejemplo, <code>tudominio.com\/test.php<\/code>) o ejecuta <code>php test.php<\/code> desde la terminal. Revisa si el correo llega a tu bandeja de entrada de tu cuenta de correo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 3: Probarlo en WordPress<\/h2>\n\n\n\n<p>Con msmtp y PHP listos, toca ver c\u00f3mo funciona en WordPress:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Restablecer contrase\u00f1a<\/strong>: Ve a la p\u00e1gina de login, pide un enlace de recuperaci\u00f3n y verifica que te llegue el correo.<\/li>\n\n\n\n<li><strong>Notificaciones<\/strong>: Publica un comentario (si las tienes activadas) y comprueba si recibes la notificaci\u00f3n.<\/li>\n\n\n\n<li><strong>Formularios<\/strong>: Si usas uno (aunque no sea el foco), env\u00eda un mensaje de prueba.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u00bfAlgo no funciona?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Permisos<\/strong>: Aseg\u00farate de que <code>\/etc\/msmtprc<\/code> tenga <code>chmod 600<\/code>.<\/li>\n\n\n\n<li><strong>Prueba la entrega<\/strong>: Usa herramientas como <a href=\"https:\/\/www.mail-tester.com\/\">Mail Tester<\/a> para checar la calidad de tus env\u00edos.<\/li>\n\n\n\n<li><strong>Protege las credenciales<\/strong>: En lugar de dejarlas en el archivo, considera variables de entorno o herramientas como <code>pass<\/code>.<\/li>\n\n\n\n<li><strong>Controla el volumen<\/strong>: Si env\u00edas muchos correos, ajusta l\u00edmites para no parecer spam.<\/li>\n<\/ul>\n\n\n\n<p><strong>Trucos para optimizar y segurizar<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SPF, DKIM y DMARC<\/strong>: Configura estos registros en tu dominio para que los servidores conf\u00eden en tus correos.<\/li>\n\n\n\n<li><strong>Prueba la entrega<\/strong>: Usa herramientas como <a href=\"https:\/\/www.mail-tester.com\/\">Mail Tester<\/a> para chequear la calidad de tus env\u00edos.<\/li>\n\n\n\n<li><strong>Protege las credenciales<\/strong>: En lugar de dejarlas en el archivo, considera variables de entorno o herramientas como <code>pass<\/code>.<\/li>\n\n\n\n<li><strong>Controla el volumen<\/strong>: Si env\u00edas muchos correos, ajusta l\u00edmites para no parecer spam.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u00bfPor qu\u00e9 msmtp y no un plugin?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rendimiento<\/strong>: Sin plugins, tu WordPress no carga procesos extras.<\/li>\n\n\n\n<li><strong>Control<\/strong>: T\u00fa decides c\u00f3mo funciona todo, sin intermediarios.<\/li>\n\n\n\n<li><strong>Estabilidad<\/strong>: Menos riesgos de fallos por actualizaciones.<\/li>\n\n\n\n<li><strong>Seguridad<\/strong>: Al manejarlo en el servidor, reduces vulnerabilidades.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Para finalizar<\/h2>\n\n\n\n<p>Configurar msmtp con PHP es una forma pr\u00e1ctica de enviar correos desde WordPress sin plugins, ideal para VPS ligeros. Con pocos comandos, tendr\u00e1s un sistema fiable, seguro y que no depende de terceros. \u00bfTe animas a probarlo y hacer tu WordPress m\u00e1s \u00e1gil?<\/p>\n\n\n\n<p>Si tienes dudas o algo se atora en el camino, \u00a1deja un comentario abajo y te echo una mano!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una soluci\u00f3n sencilla y ligera para tu VPS Este blog lo tengo alojado en un VPS con Debian 12, y cr\u00e9eme, el env\u00edo de correos me dio m\u00e1s de un dolor de cabeza al principio. Si alguna vez has usado la funci\u00f3n mail() de PHP en WordPress, seguro conoces sus fallos: correos que caen en [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[24,15,19],"class_list":["post-48","post","type-post","status-publish","format-standard","hentry","category-guia","tag-linux","tag-php","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/posts\/48","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/comments?post=48"}],"version-history":[{"count":0,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/posts\/48\/revisions"}],"wp:attachment":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/media?parent=48"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/categories?post=48"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/tags?post=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}