Todo este lío comenzó cuando me tocó configurar a mi Mac Mini (la cual es mi servidor headless estos días) para que poder enviar correos desde PHP: Message successfully sent!"); Message delivery failed... ");
< ?php
$to = "josevnz@mydomain.com";
$subject = "Test from tepuyes server!";
$body = "Hi,\n\nHow are you?";
if (mail($to, $subject, $body)) {
echo("
} else {
echo("
}
?>
Odio a PHP. En Windows se puede especificar un servidor SMTP pero en UNIX este lenguaje utiliza Sendmail o lo que haya por debajo. Se puede utilizar Pear PHP mail pero eso implica que tengo que cambiar mi código.
Ahhh, nada como JavaMail para estos casos 😀
Bueno, volviendo al tema que nos interesa, los correos nunca salían de la cola. Y es que mi proveedor de Internet, Cablevision, bloquea cualquier conexión a servidores de correo en los puertos 25 en un intento por detener el SPAM.
Intenté utilizar el servidor de correo que ellos sugieren (mail.optonline.net) pero este se quejaba que mi maquina no tenia un registro A en DNS que pudiera ser resuelto (sorpresa, es una máquina detrás del firewall). Traté de utilizar el servidor de correo de la compañia que hospeda a mi dominio en DNS usando autenticación, y para ello configuré lo siguiente en el archivo /etc/postfix/main.conf:
relayhost = smtpout.secureserver.net:3535
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
smtp_tls_CApath = /etc/postfix/certs
smtp_tls_session_cache_database = btree:/etc/postfix/smtp_scache
smtp_tls_session_cache_timeout = 3600s
smtp_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
Y en el archivo /etc/postfix/sasl_passwd pusé mi usuario y clave con el cual voy a hacer el relay:
smtpout.secureserver.net: josevnz@mydomain.com:mycoolpassword
Necesitamos usar un certificado digital. La gente de Verisign ofrece uno el cual podemos bajar desde aqui: https://www.verisign.com/support/roots.html (en este caso yo lo copié en /private/tmp/roots.zip)
Luego un poco de carpintería ya que hay que decirle a Postfix que use los nuevos parámetros:
sudo mv /private/tmp/roots.zip /etc/postfix/certs
sudo unzip -j roots.zip
sudo openssl x509 -inform der -in thawte\ Primary\ Root\ CA\ -\ G2_ECC.cer -out thawte\ Primary\ Root\ CA\ -\ G2_ECC.pem
sudo c_rehash /etc/postfix/certs
sudo postmap /etc/postfix/sasl_passwd
sudo postfix stop
sudo postfix start
Sin embargo el servidor de ‘relay’ que decidí utilizar tiene problemas de DNS:
Tepuyes-Server:certs josevnz$ sudo mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
41D3C1201BB 348 Mon Feb 15 18:12:43 josevnz@Tepuyes-Server.local
(Host or domain name not found. Name service error for name=smtpout.secureserver.net type=MX: Host not found, try again)
josevnz@mydomain.com
¡Que vaina!. Sin darme por vencido decidí utilizar a Gmail como relay, cambiando lo siguiente en /etc/postfix/main.cf:
relayhost = smtp.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
smtp_tls_CApath = /etc/postfix/certs
smtp_tls_session_cache_database = btree:/etc/postfix/smtp_scache
smtp_tls_session_cache_timeout = 3600s
smtp_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
Y además en etc/postfix/sasl_passwd:
smtp.gmail.com micuentaengmail@gmail.com:UltraSuperDuperPassword
Reiniciamos a Postfix una vez mas:
sudo postmap /etc/postfix/sasl_passwd
sudo postfix stop
sudo postfix start
Esto me permitió resolver el problema. Comparto este truco el cual funciona al menos en OSX Leopard y ahora me permite mandar correos desde PHP 🙂
Demasiado -util -tu -informacion…
funciono -correctamente -…… -gracias –