{"id":2255,"date":"2010-02-15T17:31:45","date_gmt":"2010-02-16T00:31:45","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=2255"},"modified":"2010-02-15T17:31:45","modified_gmt":"2010-02-16T00:31:45","slug":"osx-postfix-relay-envio-de-correos-usando-osx-y-postfix","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2010\/02\/15\/osx-postfix-relay-envio-de-correos-usando-osx-y-postfix\/","title":{"rendered":"OSX Postfix Relay &#8211; envio de correos usando OSX y Postfix"},"content":{"rendered":"<p>Todo este l\u00edo comenz\u00f3 cuando me toc\u00f3 configurar a mi Mac Mini (la cual es mi servidor headless estos d\u00edas) para que poder enviar correos desde PHP:<br \/>\n<code><br \/>\n< ?php\n$to = \"josevnz@mydomain.com\";\n$subject = \"Test from tepuyes server!\";\n$body = \"Hi,\\n\\nHow are you?\";\nif (mail($to, $subject, $body)) {\n  echo(\"\n\n<p>Message successfully sent!\");<br \/>\n } else {<br \/>\n  echo(\"<\/p>\n<p>Message delivery failed...<\/p>\n<p>\");<br \/>\n }<br \/>\n?><br \/>\n<\/code><\/p>\n<p><strong>Odio a PHP<\/strong>. En Windows se puede especificar un servidor SMTP pero en UNIX este lenguaje utiliza Sendmail o lo que haya por debajo. Se puede utilizar<a href=\"http:\/\/pear.php.net\/package\/Mail\"> Pear PHP mail<\/a> pero eso implica que tengo que cambiar mi c\u00f3digo.<\/p>\n<p>Ahhh, nada como <a href=\"http:\/\/kodegeek.com\/blog\/2008\/12\/28\/%C2%BFcomo-borrar-40000-correos-en-gmail-facil-usando-javamail-e-imap\/\">JavaMail<\/a> para estos casos \ud83d\ude00<\/p>\n<p>Bueno, volviendo al tema que nos interesa,  los correos nunca sal\u00edan de la cola. Y es que mi proveedor de Internet, <a href=\"http:\/\/www.gadgetell.com\/tech\/comment\/a-rant-and-rave-about-optimum-online\/\">Cablevision, bloquea cualquier conexi\u00f3n a servidores de correo en los puertos 25<\/a> en un intento por detener el SPAM.<\/p>\n<p>Intent\u00e9 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\u00e1quina detr\u00e1s del firewall). Trat\u00e9 de utilizar el servidor de correo de la compa\u00f1ia que hospeda a<a href=\"http:\/\/help.godaddy.com\/article\/363\"> mi dominio en DNS usando autenticaci\u00f3n<\/a>, y para ello configur\u00e9 lo siguiente en el archivo <strong>\/etc\/postfix\/main.conf<\/strong>:<br \/>\n<code><br \/>\nrelayhost = smtpout.secureserver.net:3535<br \/>\nsmtp_sasl_auth_enable = yes<br \/>\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd<br \/>\nsmtp_sasl_security_options = noanonymous<br \/>\nsmtp_tls_security_level = may<br \/>\nsmtp_tls_CApath = \/etc\/postfix\/certs<br \/>\nsmtp_tls_session_cache_database = btree:\/etc\/postfix\/smtp_scache<br \/>\nsmtp_tls_session_cache_timeout = 3600s<br \/>\nsmtp_tls_loglevel = 1<br \/>\ntls_random_source = dev:\/dev\/urandom<br \/>\n<\/code><\/p>\n<p>Y en el archivo <strong>\/etc\/postfix\/sasl_passwd<\/strong> pus\u00e9 mi usuario y clave con el cual voy a hacer el relay:<\/p>\n<p><code><br \/>\nsmtpout.secureserver.net: josevnz@mydomain.com:mycoolpassword<br \/>\n<\/code><\/p>\n<p>Necesitamos usar un certificado digital. La gente de Verisign ofrece uno el cual podemos bajar desde aqui: <a href=\"https:\/\/www.verisign.com\/support\/roots.html\">https:\/\/www.verisign.com\/support\/roots.html<\/a> (en este caso yo lo copi\u00e9 en <strong>\/private\/tmp\/roots.zip<\/strong>)<\/p>\n<p>Luego un poco de carpinter\u00eda ya que hay que decirle a Postfix que use los nuevos par\u00e1metros:<\/p>\n<p><code><br \/>\nsudo mv \/private\/tmp\/roots.zip \/etc\/postfix\/certs<br \/>\nsudo unzip -j roots.zip<br \/>\nsudo openssl x509 -inform der -in thawte\\ Primary\\ Root\\ CA\\ -\\ G2_ECC.cer -out  thawte\\ Primary\\ Root\\ CA\\ -\\ G2_ECC.pem<br \/>\nsudo c_rehash \/etc\/postfix\/certs<br \/>\nsudo postmap \/etc\/postfix\/sasl_passwd<br \/>\nsudo postfix stop<br \/>\nsudo postfix start<br \/>\n<\/code><\/p>\n<p>Sin embargo el servidor de &#8216;relay&#8217; que decid\u00ed utilizar tiene problemas de DNS:<br \/>\n<code><br \/>\nTepuyes-Server:certs josevnz$ sudo mailq<br \/>\n-Queue ID- --Size-- ----Arrival Time---- -Sender\/Recipient-------<br \/>\n41D3C1201BB      348 Mon Feb 15 18:12:43  josevnz@Tepuyes-Server.local<br \/>\n(Host or domain name not found. <strong>Name service error for name=smtpout.secureserver.net type=MX: Host not found, try again<\/strong>)<br \/>\n                                         josevnz@mydomain.com<br \/>\n<\/code><\/p>\n<p>\u00a1Que vaina!. Sin darme por vencido decid\u00ed utilizar a Gmail como relay, cambiando lo siguiente en <strong>\/etc\/postfix\/main.cf<\/strong>:<br \/>\n<code><br \/>\nrelayhost = <strong>smtp.gmail.com:587<\/strong><br \/>\nsmtp_sasl_auth_enable = yes<br \/>\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd<br \/>\nsmtp_sasl_security_options = noanonymous<br \/>\nsmtp_tls_security_level = may<br \/>\nsmtp_tls_CApath = \/etc\/postfix\/certs<br \/>\nsmtp_tls_session_cache_database = btree:\/etc\/postfix\/smtp_scache<br \/>\nsmtp_tls_session_cache_timeout = 3600s<br \/>\nsmtp_tls_loglevel = 1<br \/>\ntls_random_source = dev:\/dev\/urandom<br \/>\n<\/code><\/p>\n<p>Y adem\u00e1s en etc<strong>\/postfix\/sasl_passwd<\/strong>:<br \/>\n<code><br \/>\n<strong>smtp.gmail.com micuentaengmail@gmail.com:UltraSuperDuperPassword<\/strong><br \/>\n<\/code><\/p>\n<p>Reiniciamos a Postfix una vez mas:<br \/>\n<code><br \/>\nsudo postmap \/etc\/postfix\/sasl_passwd<br \/>\nsudo postfix stop<br \/>\nsudo postfix start<br \/>\n<\/code><\/p>\n<p>Esto me permiti\u00f3 resolver el problema. Comparto este truco el cual funciona al menos en OSX Leopard y ahora me permite mandar correos desde PHP \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Todo este l\u00edo comenz\u00f3 cuando me toc\u00f3 configurar a mi Mac Mini (la cual es mi servidor headless estos d\u00edas) para que poder enviar correos desde PHP: < ?php $to = \"josevnz@mydomain.com\"; $subject = \"Test from tepuyes server!\"; $body = \"Hi,\\n\\nHow are you?\"; if (mail($to, $subject, $body)) { echo(\" Message successfully sent!\"); } else { <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2010\/02\/15\/osx-postfix-relay-envio-de-correos-usando-osx-y-postfix\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[574],"tags":[573,431,491,572],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/2255"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=2255"}],"version-history":[{"count":16,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/2255\/revisions"}],"predecessor-version":[{"id":2271,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/2255\/revisions\/2271"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=2255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=2255"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=2255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}