Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 25 Noviembre 2015, 22:53 pm



Título: Enviando Email C++ 2.0
Publicado por: Kaxperday en 25 Noviembre 2015, 22:53 pm
Parte 1.0:

https://foro.elhacker.net/programacion_cc/fallo_al_enviar_email_a_servidor-t444524.0.html

Parte 2.0:

Buenas, sigo intentando crear una función para enviar correos electronicos en C++. Por lo visto voy a necesitar una cuenta de correo ya conocida, y el servidor smtp al que pertenece esa cuenta.

Comence conectando al puerto 25 de smtp.live.com (servidor smtp de hotmail), pero tras el "HELO" saltaba a "STARTTLS", es decir el servidor rechazaba que introdujera más datos (como usuario de corre y contraseña) ya que requería usar "STARTTLS" para pasar a una conexión cifrada TLS/SSL.

Ahí es donde nació el problema por lo que abro el hilo. Pues informandome de los puertos que usa hotmail, gmail etc, traté de conectarme ("connect") a ellos con SSL y no respondía las peticiones, algo por lo que desconozco la causa actualmente:

Código
  1. CRYPTO_malloc_init();
  2. SSL_library_init();
  3. OpenSSL_add_all_algorithms();
  4. SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method());
  5. SSL* ssl;
  6. BIO* bio = BIO_new_ssl_connect(ctx);
  7. if (bio == NULL) {
  8. SSL_CTX_free(ctx);
  9. return false;
  10. }
  11. BIO_get_ssl(bio, &ssl);
  12. SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
  13. BIO_set_conn_hostname(bio, (host + ":465").c_str());
  14. if (BIO_do_connect(bio) <= 0) {
  15. BIO_free_all(bio);
  16. SSL_CTX_free(ctx);
  17. return false;
  18. }

En yahoo pude comprobar que permite acceder al servidor con las credenciales en texto plano, por lo que desde un correo de yahoo podría mandar fácilmente a otro, pero iría en texto plano, y además no tengo correo yahoo vaya.

https://www.fastmail.com/help/technical/ssltlsstarttls.html

¿Por qué no no responde mis petición SSL a su puerto 465 donde se supone que usa SMTP bajo SSL?. Creo que tengo que comenzar en texto plano con HELO, y luego usar el comando STARTTLS, pero no se si es un comando y apenas encuenro documentación sobre como funciona, solo programas hechos que ya lo implementan, otras soluciones dicen que basta con conectarse directamente al puerto SSL del servidor SMTP, pero como ya dije ignora mis peticiones.

Saludos.

Edito: Ojo me trato de conectar con un cliente SSL, no con uno TLS, pero no creo que sea eso no tiene mucho sentido.

Citar
STARTTLS

220 2.0.0 SMTP server ready
il.com Hello

Después de esto ¿qué?, no me acepta conexiones SSL.. en ningun puerto..


Edito: Muy buenas chicos, he probado con gmail y funciona el SSL, ya que al parecer, el hotmail soporta solo TLS no SSL, por eso no respondía pero gmail si y ya me pide autentificacion, perfecto :), aunque una pena no poder hacerlo para hotmail.

De todas formas ¿no podría tener un servidor SMTP propio de el proovedor de internet??? Vendría de perlas, porque sino las credenciales deberían de ir dentro de la app para mandar el correo, un saludo.

Edito: Tras mucho sufrimiento me consigo loguear en gmail y me dice que vaya a la web. " Please log in via your web browser and
534-5.7.14 then try again."