Configurando Ubuntu/Exim4 para mandar mensajes a través de Google por SMTP(configuación múltiple smarthost)
Autor: JB | Archivado en: Linux, Uncategorized el día 17/Dic/2008
Exim (EXperimental Internet Mailer) es un agente de transporte de correo (Mail Transport Agent, usualmente MTA) desarrollado por la Universidad de Cambridge y puede ser utilizado en la mayoría de los sistemas Unix (entre ellos Linux).
Wikipedia
Para instalarlo y configurarlo como smarthost de gmail me guié por el siguiente enlace
Using Exim4 to send Messages through GMail
El problema viene cuando quieres dependiendo del emisor quieres mandarlo a través de una dirección correspondiente, es decir, configurar un smarthost “múltiple”.
Por ejemplo, si tenemos hosteados midominio1.com y midominio2 .com con google apps y queremos que cualquier mensaje que se mande via SMTP desde nuestro servidor (a través de PHP o cualquier otra aplicación ) con una cuenta @midominio1.com se mande desde la cuenta noreply@midominio1.com y si se manda desde midominio2.com lo mismo.
Para ello mi sugerencia es la siguiente:
1.- Instalamos exim4
#apt-get install exim4 y hacemos los pasos que se explican en Using Exim4 to send Messages through GMail
También en español he visto el siguiente enlace Exim 4.69 con Gmail
2.- Para varios smarthosts creamos passwd.client.midominio1 y passwd.client.midominio2 poniendo en cada uno lo siguiente:
1 2 3 4 5 | smtp.gmail.com:milogin@midominio1.com:mipassword gmail-smtp.l.google.com:milogin@midominio1.com:mipassword *.google.com:milogin1@midominio1.com:mipassword |
y lo mismo con el dominio2.com 3.- Una vez hemos hecho esto, vamos a crear los diferentes smarthost para ello hacemos #nano etc/exim4/conf.d/router/200_exim4-config_primary y cambiamos:
1 2 3 4 5 6 7 8 9 | smarthost: debug_print = "R: smarthost for $local_part@$domain" driver = manualroute domains = ! +local_domains transport = remote_smtp_smarthost route_list = * DCsmarthost byname host_find_failed = defer same_domain_copy_routing = yes no_more |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | smarthost_midominio1:
condition = ${if eq {${lc:$sender_address_domain}} {midominio1.com} {true} fail }
debug_print = "R: smarthost for $local_part@$domain"
driver = manualroute
domains = ! +local_domains
transport = remote_smtp_smarthost_midominio1
route_list = * DCsmarthost byname
host_find_failed = defer
same_domain_copy_routing = yes
no_more
smarthost_midominio2:
condition = ${if eq {${lc:$sender_address_domain}} {midominio2.com} {true} fail }
debug_print = "R: smarthost for $local_part@$domain"
driver = manualroute
domains = ! +local_domains
transport = remote_smtp_smarthost_midominio2
route_list = * DCsmarthost byname
host_find_failed = defer
same_domain_copy_routing = yes
no_more |
1 2 3 4 5 6 7 8 9 10 | remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port=587
hosts_try_auth = <; ${if exists{CONFDIR/passwd.client} \
{\
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host_address}}\
}\
{} \
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | remote_smtp_smarthost_midominio1:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port=587
hosts_try_auth = <; ${if exists{CONFDIR/passwd.client.midominio1} \
{\
${lookup{$host}nwildlsearch{CONFDIR/passwd.client.midominio1}{$host_address}}\
}\
{} \
}
remote_smtp_smarthost_midominio2:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port=587
hosts_try_auth = <; ${if exists{CONFDIR/passwd.client.midominio2} \
{\
${lookup{$host}nwildlsearch{CONFDIR/passwd.client.midominio2}{$host_address}}\
}\
{} \
} |













Estimado JB. Creo que tu post me será muy útil, pero necesito entender algo. Espero que no sea una pregunta muy tonta, pero la verdad he googleado harto y no logro encontrar un instructivo claro a este respecto.
Cuando tú enseñas como usar dos smarthost, dices que hay que crear dos archivos con nombre passwd.client.dominio[12] , pero me hace pensar que tienes cuentas en dos servicios distintos. En cambio, si yo tengo dos cuentas de gmail: cuenta1@gmail.com y cuenta2@gmail.com , entonces ¿cómo lo hago?, porque el dominio sería el mismo, ¿o no? Es decir,
midominio1 = midominio2 = gmail
Gracias
Hola Santiago,
En tu caso deberías de cambiar la condición en este fichero:
etc/exim4/conf.d/router/200_exim4-config_primary
condition = ${if eq {${lc:$sender_address_domain}} {midominio1.com} {true} fail }
Y comparar con el nombre completo del mail, es decir, debería de ser:
condition = ${if eq {${lc:$sender_address}} {cuenta@gmail.com} {true} fail }
o
condition = ${if eq {${lc:$local_part@$sender_address_domain}} {cuenta@gmail.com} {true} fail }
No lo he probado, por lo que no sé si va, pero este sería el concepto.
Un saludo, espero que te sirva
Gracias por la pronta respuesta. Lo probaré hoy día y ahí cuento cómo me fue.