Enviar correo SMTP+SSL por telnet

No es precisamente telnet ya que telnet no implementa SSL, pero me parece un buen título para explicar a que se refiere este artículo.

Siguiendo con el artículo de “Correo POP3+SSL por telnet”, ahora explico cómo hacer telnet (a Gmail) para enviar correo.

Obtener usuario/clave

El usuario y clave son pasados codificados en base64, por lo que antes de empezar conviene tener el string de validación, con alguno de estos dos comandos:

$ perl -MMIME::Base64 -e 'print encode_base64("\000pilasguru\@gmail.com\000password")'
AHBpbGFzZ3VydUBnbWFpbC5jb20AcGFzc3dvcmQ=
$ printf "\0pilasguru@gmail.com\0password" | openssl enc -a
AHBpbGFzZ3VydUBnbWFpbC5jb20AcGFzc3dvcmQ=

como se aprecia, ambos devuelven el mismo string.

Conexión

El comando openssl con la opción s_client será el encargado de establecer la conexión:

s_client This implements a generic SSL/TLS client which can establish a transparent connection to a remote server speaking SSL/TLS. It’s intended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the OpenSSL ssl library.

de la siguiente forma:

$ openssl s_client -host smtp.gmail.com -port 587 -starttls smtp -crlf

CONNECTED(00000003)
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEdjCCA16gAwIBAgIIOuQOXm7sFPMwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTMwOTEwMDc1NDQ3WhcNMTQwOTEwMDc1NDQ3
WjBoMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEXMBUGA1UEAwwOc210
cC5nbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpMKDa
E9bW18yuVMulny5K5YLwf7ebEpINUVPZXvp7cO6vNjl+MCHjhbB2Rkg7QVJE8eNS
V0Hpq3vOuz+RQ2rPKfaeM3MFBZJ+tKscC39XmlVtmyBW5AVWy5dlO7718MQCN/L5
kpYSY6RinFrf5pIlf5XSGRCo3WYndguPP1A+X4gsDKjMaWhCP5KfczLHGTY+4T+d
31lDSah8CbFeMvKav0SFnyRYM36YAvAk2HH1/64Tolbx9tMAW6e6q8dU1U6W5u6+
Bt7WjW1iYwwfML+ZorKR9p+V070nDDN42ZE8HVZw+hOl9eMl48L/eX0eKbSGZ
....
J/3lYLI71meuut7O7G+BcFlXVphs5XSy65LkziTXikR+MRERjCKhv3AwP0oGB2+q
APMUqxtH6K6hmFE5ELtYjS4rKLbH08s8gy65y/EiaBaWKBlKG6s+r22uyxu2xmgo
LFf94N1gVJXuaZXlCgVwThCtbekh8wxjHtcVw2HCZfzQemEr7oshVOX2
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
---
SSL handshake has read 3474 bytes and written 470 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: 65AAADD952AE24108001D17D0FF6C5403E5CE85040F61346A1C80C8E753E394F
    Session-ID-ctx:
    Master-Key: F8B3C5E3C2C0435ED53542A36CBB8ECA635255FBAEF73F1ADDB7BC512657E9C9A9B7E7EB567227856648A4D54C63CCA7
    Key-Arg   : None
    Start Time: 1400863594
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
250 CHUNKING

A partir de aquí podemos establecer el diálogo SMTP con el servidor de gmail enviando el comando ehlo:

ehlo
250-mx.google.com at your service, [64.90.52.109]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250-PIPELINING
250 CHUNKING

Luego validando nuestro usuario con el string que otuvimos previamente:

AUTH PLAIN AHBpbGFzZ3VydUBnbWFpbC5jb20AcGFzc3dvcmQ=
235 2.7.0 Accepted

A partir de aqui, se pueden enviar los comandos SMTP estandar: MAIL FROM, MAIL TO, DATA y punto para terminar el mensaje.

Leave a Reply

  

  

  

Anti-Spam by WP-SpamShield