mutt y smtp

Buenas. He estado jugueteando un poco con el mutt (después de toda la publicidad que se le ha hecho por aquí XD, y para divertirme un poco) y sí, parece potente. Tengo 5 cuentas de correo pop en 3 servidores diferentes y la recogida del correo la hago cómodamente con getmail y procmail. El problema (2 problemas en realidad) viene con el envío del correo.

El primero es que quiero que las respuestas de correos que me llegan a una cuenta determinada se hagan a través del smtp de esa cuenta, y con el From adecuado. Lo del From es sencillo, con 'reverse_name', pero que use un smtp determinado... supongo que se puede hacer con hooks, pero no veo el modo. Y es que mis tres smtps protestan cuando el "from" no es una cuenta propia, así que no puedo usar uno común para todas las cuentas.

El segundo es que necesito un cliente smtp que soporte varios servidores smtp y autenticación. El ssmtp soporta autenticación, pero ni idea de cómo configurar varios servers (se me ocurre con varios ficheros de configuración y especificando con -C el fichero dependiendo del servidor, pero el man de ssmtp dice que -C se ignora). Con nbsmtp es muy sencillo especificar diferentes servidores, pero no soporta (por lo que yo sé) autenticación. ¿Algun cliente smtp que me pueda ir bien para lo que necesito?

Graciassss... :)
Supongo que me quedaré con thunderbird... XD

:(
nbSMTP SI soporta autenticación, SSL, .... http://nbsmtp.ferdyx.org

Asegúrate de bajarte la última versión del CVS porque en la 0.9 aún hay algunos bugs un poco 'anoying'.

Y la verdad... necesitamos testing para saber qué features se necesitan y qué bugs hay.

Salu2.Ferdy
Ferdy escribió:nbSMTP SI soporta autenticación, SSL, ....


Mierda, estuve en la página pero creía que la versión que tenía instalada era la 0.9 y no la 0.8, y ya ni me fijé en las features que añadísteis. Sorry. De hecho iba a pedirte en el post que añadieses la autenticación XD.

Ferdy escribió:Y la verdad... necesitamos testing para saber qué features se necesitan y qué bugs hay.


Lo probaré esta noche con mis 3 servers smtp y ya te diré qué tal ;).

En cuanto a lo de utilizar diferentes SMTPs dependiendo de la cuenta, ¿alguna forma de hacerlo? Ahora lo hago con send-hooks y basándome en a quién estoy enviando el correo (familia a un smtp, trabajo a otro, etc) redefiniendo en el hook la variable 'sendmail' para que use el smtp apropiado, pero así es un coñazo (cada vez que añado un contacto tengo que añadirlo a la lista apropiada). Preferiría hacerlo en función de la cuenta a la que me han escrito, y no en función de los destinos.

Saludos.
En cuanto a lo de utilizar diferentes SMTPs dependiendo de la cuenta, ¿alguna forma de hacerlo? Ahora lo hago con send-hooks y basándome en a quién estoy enviando el correo (familia a un smtp, trabajo a otro, etc) redefiniendo en el hook la variable 'sendmail' para que use el smtp apropiado, pero así es un coñazo (cada vez que añado un contacto tengo que añadirlo a la lista apropiada). Preferiría hacerlo en función de la cuenta a la que me han escrito, y no en función de los destinos.


Yo lo hacía con folder-hook's. Mis cuentas las recojo a distintos buzones de la misma cuenta, así que cuando me mandan un mail a mi dirección de hispalinux, como todos mis mensajes de hispalinux quiero que salgan con un from, pues tenía un set from en el folder-hook. Con el sendmail tiene que ser igual.

Espero que te sirva.

PD: Si encuentras cualquier cosa en nbSMTP en el wiki hay información y tal, pero no dudes en ponerte en contacto conmigo

Salu2.Ferdy
He probado tanto la versión 0.9 como la penúltima y última del CVS (0.91):

Mar 29 23:01:05 [nbSMTP] Creating connection to host (mailhost.teleline.es:25)
Mar 29 23:01:06 [nbSMTP] 220 ESMTP service ready on
Mar 29 23:01:06 [nbSMTP] EHLO teleline.es
Mar 29 23:01:06 [nbSMTP] 250-tsmtp3.ldap.ispe
Mar 29 23:01:06 [nbSMTP] 250-PIPELININGp
Mar 29 23:01:06 [nbSMTP] 250-ETRNL
Mar 29 23:01:06 [nbSMTP] 250-DSNN
Mar 29 23:01:06 [nbSMTP] 250-SIZE 26214400s
Mar 29 23:01:06 [nbSMTP] 250-AUTH PLAIN LOGIN
Mar 29 23:01:06 [nbSMTP] 250 AUTH=LOGIN
Mar 29 23:01:06 [nbSMTP] AUTH LOGIN xxxxxxxxxxxxxxxxxxxxxx=
Mar 29 23:01:07 [nbSMTP] 334 xxxxxxxxxxxxxxxxx
Mar 29 23:01:07 [nbSMTP] xxxxxxxxxxxxxxxxx=
Mar 29 23:01:10 [nbSMTP] 501 Invalid Login
Mar 29 23:01:10 [nbSMTP] The password wasn't accepted


Evidentemente las xxxx las he puesto yo (a pesar de que lo que sigue a 334 no parece comprometido, prefiero omitirlo XD).

Bueno, eso es lo que pasa. Ha probado con varios servidores y en todos ocurre lo mismo, el pass no es aceptado. Lo único que se me ocurre es que esté mal la función to64frombits. Los passwords son correctos, eso seguro.

Yo lo hacía con folder-hook's.


Lo probaré... en cuanto consiga hacer funcionar el smtp :). Pero sí, puede ser lo que necesito, gracias.
A nosotros nos está funcionando bien...

zeus:~/cvs/nbsmtp ferdy$ ./nbsmtp -f XXXXXXXX -h smtp -U ferdy -P XXXXXXX -s < mensaje-prueba


Y en el log:

Mar 29 23:26:01 localhost nbSMTP[6201]: Creating SSL connection to host (smtp:465)
Mar 29 23:26:02 localhost nbSMTP[6201]: Mail sent from XXXXXXXXX. Closing connection


He puesto con XXXXXXXXXX lo susceptible de SPAM o contraseñas. Hemos sacado la 0.91 estable hace unos minutos. Pruebala. Pero ya te digo que el SASL es una de las cosas que nos funciona bien

Salu2.Ferdy
Mismo error con la 0.91 estable y terra. Y algo peor; esto es lo que devuelve el server de iespana:
Mar 29 23:57:23 [nbSMTP] Creating connection to host (smtp.iespana.es:25)
Mar 29 23:57:26 [nbSMTP] 220 b0501.idoo.com i-mail 4.0e ready at Mon, 29 Mar 2004 21:55:57 GMT
Mar 29 23:57:26 [nbSMTP] EHLO iespana.es
Mar 29 23:57:27 [nbSMTP] 500 Syntax error, command unrecognizedt
Mar 29 23:57:27 [nbSMTP] Error after HELO/EHLO and before sending MAIL command
Mar 29 23:57:27 [nbSMTP] Error in send_mail

El de terra falla en la autenticación, pero el de iespana falla antes de enviar el MAIL. Con thunderbird sí puedo enviar correo, así que no es fallo de iespana.

Sin embargo, con el server de la UDC me funciona sin problemas (eso sí, no requiere autenticación, ayer me equivoqué en eso).

Saludos.

(he editado varias veces para intentar arreglar la anchura, pero no se puede)
Gracias de todas formas por avisar. El caso es que el server de iespana parece no cumplir el RFC... que listos.... en fin, veremos cómo lo podemos arreglar, no debe ser muy complicado.

Y el de terra lo comprobaré a lo largo de esta semana que ese si lo puedo probar... Pero digamos que la autenticación SASL que hacemos es calcada a la de fetchmail, de hecho base64.c no lo hemos ni editado... si pudieras hacer una traza con ethereal de cuando lo mandas con thunderbird y una traza de cuando lo mandas con nbsmtp y me las mandas por correo te lo agradecería.

Salu2.Ferdy
Ferdy escribió:Gracias de todas formas por avisar. El caso es que el server de iespana parece no cumplir el RFC... que listos.... en fin, veremos cómo lo podemos arreglar, no debe ser muy complicado.

De iespana ya estoy bastante hartito. Cuando no está caído, tarda hasta un día (sí, no exagero) en enviar un correo. Así que es probable que abandone las 2 cuentas que tengo. Pero bueno, si apañas el nbsmtp para que funcione, genial :).
Ferdy escribió:si pudieras hacer una traza con ethereal de cuando lo mandas con thunderbird y una traza de cuando lo mandas con nbsmtp y me las mandas por correo te lo agradecería.

Ok, emergiendo ethereal en estos momentos. Me miro el manual y te envío la traza cuando pueda.

Saludos.
Así da gusto !!!

La verdad es que iespana y similares tienden a romper los RFCs... pero bueno 'con que funcione con autluk sirve'.

En fin, que si puedes hacer las dos trazas, me vendría de puta madre, para ver qué diablos cambia. Si tienes problemas con ethereal, dimelo y te ayudo a sacar las trazas

Salu2.Ferdy
Ferdy escribió:'con que funcione con autluk sirve'.

Sí, supongo que sí [jaja]. ¿Te creerías que el 70% de mis colegas, ingenieros informáticos con la carrera terminada, sigue usando outlook y me llaman friky cuando les intento convencer de que cambien? ein?
Ferdy escribió:En fin, que si puedes hacer las dos trazas, me vendría de puta madre, para ver qué diablos cambia. Si tienes problemas con ethereal, dimelo y te ayudo a sacar las trazas

No problemo. Eso sí, voy a esperar a estar en casa esta noche porque aquí en la facul el tráfico de red es bastante intenso (tengo unos cuantos sshs, navegadores y el psi funcionando), y me apañaré mejor para filtrar las trazas en casa con el thunderbird y el nbsmtp usando la red en exclusiva (el man del ethereal es ligeramente extenso para leerlo todo ahora XD, mejor tener que filtrar lo menos posible).

Saludos.
Bueno, tengo las trazas. La traza de iespana de thunderbird fue muy reveladora. Resulta que iespana no requiere autenticación (yo estaba seguro de que sí, pero obviamente estaba equivocado, me di cuenta después de ver la traza de thunderbird).
iespana no soporta comandos EHLO, sólo HELO. Con nbsmtp, si uno se intenta autenticar, se manda un EHLO, iespana responde con error, y nbsmtp no continua. Si NO me intento autenticar, nbsmtp manda un HELO, al que iespana responde sin problemas, y el correo es enviado. Thunderbird, con autenticación activa, también manda un EHLO, pero si el server responde con un error, lo intenta con un HELO, y si responde sin problemas continúa sin autenticacion.

Puedes hacer que el nbsmtp sea a prueba de tontos como yo, que piensan que el servidor requiere autenticación cuando no la requiere XD. Es muy fácil de implementar.

En cuanto a la autenticación de terra, algo está claro: nbsmtp y thunderbird lo hacen de manera bastante distinta. Thunderbird envía un AUTH PLAIN con el login y el password, a lo que terra ya responde con un Authenticacion successful. nbsmtp primero envía sólo el login (supongo que para comprobar el método de autenticación) con un AUTH LOGIN. Aquí ya no sé si pensar que terra no sabe responder al AUTH LOGIN (responde un "334 xxxxxxx") o nbsmtp no sabe tratar la respuesta de terra.

Siento no poder enviarte las trazas, pero, ehm... tienen infomación comprometida XD. Si supiese editarlas para borrar las contraseñas, te las enviaba. De todas formas, a ver si con lo que te he dicho sobre terra te apañas ;).

Saludos.
Puedes hacer que el nbsmtp sea a prueba de tontos como yo, que piensan que el servidor requiere autenticación cuando no la requiere . Es muy fácil de implementar.


Si... eso haremos. La verdad es que ahora está pensado para utilizarlo con servidores que cumplan el estándar.

En cuanto a la autenticación de terra, algo está claro: nbsmtp y thunderbird lo hacen de manera bastante distinta. Thunderbird envía un AUTH PLAIN con el login y el password, a lo que terra ya responde con un Authenticacion successful. nbsmtp primero envía sólo el login (supongo que para comprobar el método de autenticación) con un AUTH LOGIN. Aquí ya no sé si pensar que terra no sabe responder al AUTH LOGIN (responde un "334 xxxxxxx") o nbsmtp no sabe tratar la respuesta de terra.


Son métodos distintos el AUTH LOGIN y el AUTH PLAIN. El servidor debería soportar ambos... pero si me pudieras pegar el tráfico generado tanto por nbSMTP como por Thunderbird en el caso de terra sustituyendo por XXXXXXXXX todas las cadenas que salgan codificadas en base64 (las que no son legibles). Será muy sencillo incluso implementar el AUTH PLAIN en nbSMTP.

PD: La respuesta 334 de terra es buena.

Salu2.Ferdy
Llámame burro, pero no veo manera de copiar y pegar desde el ethereal XD. Así que captura al canto (va mi ip pero es variable, no me importa):

http://www.xente.mundo-r.com/narf/img/ethereal/nbsmtp.gif
http://www.xente.mundo-r.com/narf/img/ethereal/thunder.gif

No las pongo como imágenes por si molestan.

Si necesitas algo más, avisa.

Saludos.
Parece ser que el mailhost de terra prefiere la autenticación AUTH PLAIN, pues nada, luego te mando un parche o hago commit al CVS con el AUTH PLAIN implementado.

Un Saludo.Ferdy
Bajate la última versión del CVS que tiene implementado lo del "HELO/EHLO hopping" y aplícale este parche: http://www.gentoo-es.org/~ferdy/nbsmtp-authplain.patch

No se si de aquí a que lo hagas lo habré subido al CVS. De todas formas yo lo he probado y funciona bien. Lo único que puede que me haya olvidado de liberar alguna cadena y tal; pero vamos que funciona perfectamente.

Salu2.Ferdy

Editando que es gerundio... menudo mensaje que había escrito... como se nota que es muy por la mañana
Me he bajado la última del CVS (he visto que es más moderna) y hay un pequeño fallo. Liberas serverinfo->auth_user y serverinfo->auth_pass en el caso de que falle el EHLO, pero eso no implica que no entre en

if (serverinfo->auth_user && serverinfo->auth_pass)

De hecho, entra y falla al intentar autenticarse. Lo he solucionado temporalmente con una guarrada (activo un flag en el caso de que falle el EHLO, y la compruebo en el if junto con las 2 cadenas).

También me temo que me falla terra. Por lo visto, se empeña en usar AUTH LOGIN en lugar de AUTH PLAIN, a pesar de que pregunta (supongo que es lo que haces, aún no lo he mirado):

Mar 31 21:13:13 [nbSMTP] EHLO terra.es
Mar 31 21:13:14 [nbSMTP] 250-tsmtp3.ldap.isp
Mar 31 21:13:14 [nbSMTP] 250-PIPELINING
Mar 31 21:13:14 [nbSMTP] 250-ETRN
Mar 31 21:13:14 [nbSMTP] 250-DSN
Mar 31 21:13:14 [nbSMTP] 250-SIZE 26214400
Mar 31 21:13:14 [nbSMTP] 250-AUTH PLAIN LOGIN
Mar 31 21:13:14 [nbSMTP] 250 AUTH=LOGIN
Mar 31 21:13:14 [nbSMTP] AUTH LOGIN xxxxxxxxxxxxxxxx==
Mar 31 21:13:15 [nbSMTP] 334 xxxxxxxxxxxxxxx
Mar 31 21:13:15 [nbSMTP] xxxxxxxxxxxxxx=
Mar 31 21:13:19 [nbSMTP] 501 Invalid Login
Mar 31 21:13:19 [nbSMTP] The password wasn't accepted


Voy a mirarlo a ver... luego te cuento.

Saludos.
Veamos... es más sencillo hacer serverinfo->auth_user = (char)NULL; y el auth_pass igual. Esto a la vez del free.

Por otro lado, tienes que especificarle que use AUTH PLAIN. La opción -M p lo hará.

Salu2.Ferdy
Bueno, he comentado la parte de AUTH LOGIN para forzar el AUTH PLAIN y tampoco me ha dejado entrar. Y esto era extraño, porque aparentemente el paquete con la contraseña codificada de los 2 programas era idéntico en el contenido.... aparentemente. Cambia en el penúltimo caracter. El de terra termina con "... xx xx xx 0d 0a", y el de nbsmtp con "... xx xx xx 00 0a". Es decir, para que la autenticación funcione es necesario que la cadena termine con el salto de linea, no con el caracter nulo.

Esto sólo lo supongo, tengo que programarlo a ver si lo acepta. Pero tiene pinta de ser eso lo que falla.

(edito que el anterior mensaje no estaba) Ok, había supuesto que era automático. Entonces lo descomentaré.
Bueno, he comentado la parte de AUTH LOGIN para forzar el AUTH PLAIN y tampoco me ha dejado entrar. Y esto era extraño, porque aparentemente el paquete con la contraseña codificada de los 2 programas era idéntico en el contenido.... aparentemente. Cambia en el penúltimo caracter. El de terra termina con "... xx xx xx 0d 0a", y el de nbsmtp con "... xx xx xx 00 0a". Es decir, para que la autenticación funcione es necesario que la cadena termine con el salto de linea, no con el caracter nulo.


Uhm... no, el RFC no dice nada de eso. El error debe estar en otro sitio... yo estoy usando la autenticacion AUTH PLAIN para todos mis mensajes... Mira que el error no esté en otro sitio. De hecho la implementación de AUTH PLAIN está casi calcada de la de fetchmail.

Salu2.Ferdy
Mmmm... pues yo creo que sí lo es :P. Los paquetes SMTP son calcados el uno al otro. Y ethereal, cuando selecciono el "Request parameter", en el caso del paquete de thunderbird selecciona hasta el 0d, pero sin incluirlo (no incluye ni 0x0d ni 0x0a). Es decir, selecciona sólo lo que es la contraseña. En el caso del paquete de nbsmtp selecciona hasta el último byte del paquete sin incluirlo (0x0a), pero incluyendo el 00. O sea, que al menos ethereal considera el caracter nulo como parte del Request parameter; no me extrañaría que el servidor smtp también lo haga, y por eso falle.

A ver si pruebo sustituyendo el 00...
Pues la verdad es que estoy haciendo varias pruebas y no doy con el quid de la cuestión... mira a ver si tu consigues algo.

Salu2.Ferdy
Ferdy escribió:Pues la verdad es que estoy haciendo varias pruebas y no doy con el quid de la cuestión... mira a ver si tu consigues algo.


Pues acabo de llegar a un punto... que simplemente no entiendo. He añadido lo siguiente a la función fd_puts:

int i;
for (i=0;i


Pues bien, la salida es la siguiente:

XX XX XX d a

Es decir, la función fd_puts SÍ escribe al socket el salto de linea, y no el \0. Pero la traza de ethereal muestra que lo que se ha enviado es un 00 0a.

¿Entiendes algo? ein?

Espera... espera un momento... que mientras escribía esto...

¡¡¡POR FIN!!!

Ya lo tengo. La linea que hace que falle es... (atención):

log_msg(LOG_DEBUG,(char *)buf);

En la función log_msg modificas el buffer que vas a enviar. Eso está bien para el log, pero te cargas el paquete.

Saludos ;). Me has hecho sufrir con esto, cabrón XD.

(edito) por si no quedaba claro, ya me he enviado un mensaje utilizando el smtp de terra, y lo he recibido sin problemas :).
Ahora lo implemento !!!!!!


Jajaja no caia en que el dichoso log_msg edita el buffer. De hecho llegué incluso a implementar un fd_printf por si acaso el problema estaba en los asprintf y tal...

En fin. Muchas gracias. Mandame un email a nbsmtp EN ferdyx PUNTO org. Con una dirección de correo y tu nombre para darte créditos !

Salu2.Ferdy
Enviado. Ahora, a configurar mutt :).

Saludos.
Te aseguro que eso es mucho más sencillo que dar con estas 'cositas' :D

Salu2.Ferdy
26 respuestas