Para fines educativos, necesito enviar un correo electrónico a través de un servidor SMTP, utilizando las reglas fundamentales y simples de SMTP.
Pude hacer eso usando smtp4dev . Yo telnet localhost 25
yy comandos son:
Quiero hacer lo mismo, usando el servidor SMTP de Gmail. Sin embargo, requiere autenticación y TLS. No puedo averiguar cómo hacerlo para Gmail. Aquí hay una captura de pantalla de telnet smtp.gmail.com 587
:
Busqué y encontré muchos enlaces incluyendo Artículo de Wikipedia sobre el comando STARTTLS
. Pero no puedo usar TLS y autenticar en el servidor SMTP de Gmail mediante la línea de comandos (o enviar comandos a mí mismo en lenguajes de programación) ¿Alguien puede ayudar?
para enviar a través de Gmail, es necesario utilizar una conexión cifrada. esto no es posible solo con telnet, pero puede usar herramientas como openssl
cualquiera conecta usando la opción starttls en openssl para convertir la conexión simple a cifrada ...
openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof
o conectarse a un sock sock directamente ...
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
EHLO localhost
después de eso, autentíquese en el servidor usando el nombre de usuario/contraseña codificado en base64
AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =
para obtener esto desde la línea de comandos:
echo -ne '\[email protected]\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk
luego continúe con "mail from:" como en su ejemplo
sesión de ejemplo:
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
[... lots of openssl output ...]
220 mx.google.com ESMTP m46sm11546481eeh.9
EHLO localhost
250-mx.google.com at your service, [1.2.3.4]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
AUTH PLAIN AG5pY2UudHJ5QGdtYWlsLmNvbQBub2l0c25vdG15cGFzc3dvcmQ=
235 2.7.0 Accepted
MAIL FROM: <[email protected]>
250 2.1.0 OK m46sm11546481eeh.9
rcpt to: <[email protected]>
250 2.1.5 OK m46sm11546481eeh.9
DATA
354 Go ahead m46sm11546481eeh.9
Subject: it works
yay!
.
250 2.0.0 OK 1339757532 m46sm11546481eeh.9
quit
221 2.0.0 closing connection m46sm11546481eeh.9
read:errno=0
Desafortunadamente, como me veo forzado a usar un servidor de Windows, no he podido hacer que openssl funcione de la manera que sugiere la respuesta anterior.
Sin embargo, pude obtener un programa similar llamado stunnel (que se puede descargar desde aquí ) para que funcione. Obtuve la idea de www.tech-and-dev.com pero tuve que cambiar las instrucciones ligeramente. Aquí esta lo que hice:
stunnel.conf
, que en mi caso instalé para C:\Program Files (x86)\stunnel
Luego, necesita abrir este archivo en un visor de texto como bloc de notas. Busque [gmail-smtp]
y elimine el punto y coma en la línea del cliente que se encuentra debajo (en el archivo stunnel.conf, todas las líneas que comienzan con un punto y coma son comentarios). Deberías terminar con algo como:
[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
Una vez que haya hecho esto, guarde el archivo stunnel.conf
y reload the config (para hacer esto use el programa GUI stunnel, y haga clic en configuration => Reload).
¡Ahora debería estar listo para enviar correos electrónicos en el cliente de Windows Telnet!
Vaya a Inicio => ejecutar => cmd.
Una vez que cmd esté abierto, escriba lo siguiente y presione Enter:
telnet localhost 25
Entonces deberías ver algo similar a lo siguiente:
220 mx.google.com ESMTP f14sm1400408wbe.2
Luego deberá responder escribiendo lo siguiente y presionando entrar:
helo google
Esto debería darte la siguiente respuesta:
250 mx.google.com at your service
Si obtienes esto, debes escribir lo siguiente y presionar enter:
ehlo google
Esto debería darte la siguiente respuesta:
250-mx.google.com at your service, [212.28.228.49]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
Ahora debería estar listo para autenticarse con sus datos de Gmail. Para ello escribe lo siguiente y pulsa enter:
AUTH LOGIN
Esto debería darte la siguiente respuesta:
334 VXNlcm5hbWU6
Esto significa que estamos listos para autenticarse usando nuestra dirección y contraseña de Gmail.
Sin embargo, como se trata de una sesión cifrada, tendremos que enviar el correo electrónico y la contraseña codificados en base64. Para codificar su correo electrónico y contraseña, puede usar un programa convertidor o un sitio web en línea para codificarlo (por ejemplo base64 o buscar en google para ’codificación en línea de base64’) Le recomiendo que no vuelva a tocar la sesión cmd/telnet hasta que haya hecho esto.
Por ejemplo [email protected] se convertiría en dGVzdEBnbWFpbC5jb20 = y la contraseña se convertiría en cGFzc3dvcmQ =
Una vez que haya hecho esta copia, pegue su nombre de usuario base64 convertido en la sesión cmd/telnet y presione enter. Esto debería darte la siguiente respuesta:
334 UGFzc3dvcmQ6
Ahora copie y pegue su contraseña de base64 convertida en la sesión cmd/telnet y presione enter. Esto debería darte la siguiente respuesta si ambas credenciales de inicio de sesión son correctas:
235 2.7.0 Accepted
Ahora debe ingresar el correo electrónico del remitente (debe ser el mismo que el nombre de usuario) en el siguiente formato y presionar intro:
MAIL FROM:<[email protected]>
Esto debería darte la siguiente respuesta:
250 2.1.0 OK x23sm1104292weq.10
Ahora puede ingresar la dirección de correo electrónico del destinatario en un formato similar y presionar intro:
RCPT TO:<[email protected]>
Esto debería darte la siguiente respuesta:
250 2.1.5 OK x23sm1104292weq.10
Ahora deberás escribir lo siguiente y presionar enter:
DATA
Lo que debería darte la siguiente respuesta:
354 Go ahead x23sm1104292weq.10
¡Ahora podemos empezar a redactar el mensaje! Para hacer esto, ingrese su mensaje en el siguiente formato (Consejo: haga esto en el bloc de notas y copie el mensaje completo en la sesión cmd/telnet):
From: Test <[email protected]>
To: Me <[email protected]>
Subject: Testing email from telnet
This is the body
Adding more lines to the body message.
Cuando hayas terminado el correo electrónico introduce un punto:
.
Esto debería darte la siguiente respuesta:
250 2.0.0 OK 1288307376 x23sm1104292weq.10
Y ahora necesita terminar su sesión escribiendo lo siguiente y presionando entrar:
QUIT
Esto debería darte la siguiente respuesta:
221 2.0.0 closing connection x23sm1104292weq.10
Connection to Host lost.
¡Y tu correo electrónico debería estar ahora en el buzón del destinatario!
Como nadie lo ha mencionado, sugeriría usar una gran herramienta para tal fin - swaks
# yum info swaks
Installed Packages
Name : swaks
Arch : noarch
Version : 20130209.0
Release : 3.el6
Size : 287 k
Repo : installed
From repo : epel
Summary : Command-line SMTP transaction tester
URL : http://www.jetmore.org/john/code/swaks
License : GPLv2+
Description : Swiss Army Knife SMTP: A command line SMTP tester. Swaks can test
: various aspects of your SMTP server, including TLS and AUTH.
Tiene muchas opciones y puede hacer casi todo lo que quieras.
GMAIL: STARTTLS, SSLv3 (y sí, en 2016 gmail aún es compatible con sslv3)
$ echo "Hello world" | swaks -4 --server smtp.gmail.com:587 --from [email protected] --to [email protected] -tls --tls-protocol sslv3 --auth PLAIN --auth-user [email protected] --auth-password 7654321 --h-Subject "Test message" --body -
=== Trying smtp.gmail.com:587...
=== Connected to smtp.gmail.com.
<- 220 smtp.gmail.com ESMTP h8sm76342lbd.48 - gsmtp
-> EHLO www.example.net
<- 250-smtp.gmail.com at your service, [193.243.156.26]
<- 250-SIZE 35882577
<- 250-8BITMIME
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-PIPELINING
<- 250-CHUNKING
<- 250 SMTPUTF8
-> STARTTLS
<- 220 2.0.0 Ready to start TLS
=== TLS started with cipher SSLv3:RC4-SHA:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com"
~> EHLO www.example.net
<~ 250-smtp.gmail.com at your service, [193.243.156.26]
<~ 250-SIZE 35882577
<~ 250-8BITMIME
<~ 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
<~ 250-ENHANCEDSTATUSCODES
<~ 250-PIPELINING
<~ 250-CHUNKING
<~ 250 SMTPUTF8
~> AUTH PLAIN AGFhQxsZXguaGhMGdATGV4X2hoYtYWlsLmNvbQBS9TU1MjQ=
<~ 235 2.7.0 Accepted
~> MAIL FROM:<[email protected]>
<~ 250 2.1.0 OK h8sm76342lbd.48 - gsmtp
~> RCPT TO:<[email protected]>
<~ 250 2.1.5 OK h8sm76342lbd.48 - gsmtp
~> DATA
<~ 354 Go ahead h8sm76342lbd.48 - gsmtp
~> Date: Wed, 17 Feb 2016 09:49:03 +0000
~> To: [email protected]
~> From: [email protected]
~> Subject: Test message
~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
~>
~> Hello world
~>
~>
~> .
<~ 250 2.0.0 OK 1455702544 h8sm76342lbd.48 - gsmtp
~> QUIT
<~ 221 2.0.0 closing connection h8sm76342lbd.48 - gsmtp
=== Connection closed with remote Host.
YAHOO: TLS también conocido como SMTPS, tlsv1.2
$ echo "Hello world" | swaks -4 --server smtp.mail.yahoo.com:465 --from [email protected] --to [email protected] --tlsc --tls-protocol tlsv1_2 --auth PLAIN --auth-user [email protected] --auth-password 7654321 --h-Subject "Test message" --body -
=== Trying smtp.mail.yahoo.com:465...
=== Connected to smtp.mail.yahoo.com.
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Sunnyvale/O=Yahoo Inc./OU=Information Technology/CN=smtp.mail.yahoo.com"
<~ 220 smtp.mail.yahoo.com ESMTP ready
~> EHLO www.example.net
<~ 250-smtp.mail.yahoo.com
<~ 250-PIPELINING
<~ 250-SIZE 41697280
<~ 250-8 BITMIME
<~ 250 AUTH PLAIN LOGIN XOAUTH2 XYMCOOKIE
~> AUTH PLAIN AGFhQxsZXguaGhMGdATGV4X2hoYtYWlsLmNvbQBS9TU1MjQ=
<~ 235 2.0.0 OK
~> MAIL FROM:<[email protected]>
<~ 250 OK , completed
~> RCPT TO:<[email protected]>
<~ 250 OK , completed
~> DATA
<~ 354 Start Mail. End with CRLF.CRLF
~> Date: Wed, 17 Feb 2016 10:08:28 +0000
~> To: [email protected]
~> From: [email protected]
~> Subject: Test message
~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
~>
~> Hello world
~>
~>
~> .
<~ 250 OK , completed
~> QUIT
<~ 221 Service Closing transmission
=== Connection closed with remote Host.
He estado usando swaks para enviar notificaciones de correo electrónico de nagios a través de gmail durante los últimos 5 años sin ningún problema.
Basado en las respuestas existentes, aquí hay una guía paso a paso para enviar correos electrónicos automáticos a través de SMTP, usando una cuenta de GMail, desde la línea de comandos, sin revelar la contraseña.
Primero, instale los siguientes paquetes de software:
Estas instrucciones asumen un sistema operativo Linux, pero deben ser razonablemente fáciles de portar a Windows (a través de Cygwin o equivalentes nativos) u otro sistema operativo.
Guarde el siguiente script de shell como authentication.sh
:
#!/bin/bash
# Asks for a username and password, then spits out the encoded value for
# use with authentication against SMTP servers.
echo -n "Email (shown): "
read email
echo -n "Password (hidden): "
read -s password
echo
TEXT="\0$email\0$password"
echo -ne $TEXT | base64
Hazlo ejecutable y ejecútalo de la siguiente manera:
chmod +x authentication.sh
./authentication.sh
Cuando se le solicite, proporcione su dirección de correo electrónico y contraseña. Esto se verá algo como:
Email (shown): [email protected]
Password (hidden):
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==
Copie la última línea (AGJ...==
), ya que se utilizará para la autenticación.
Guarde la siguiente secuencia de comandos expect como notify.sh
(tenga en cuenta que la primera línea se refiere al programa expect):
#!/usr/bin/expect
set address "[lindex $argv 0]"
set subject "[lindex $argv 1]"
set ts_date "[lindex $argv 2]"
set ts_time "[lindex $argv 3]"
set timeout 10
spawn openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
expect "220" {
send "EHLO localhost\n"
expect "250" {
send "AUTH PLAIN YOUR_AUTHENTICATION_CODE\n"
expect "235" {
send "MAIL FROM: <YOUR_EMAIL_ADDRESS>\n"
expect "250" {
send "RCPT TO: <$address>\n"
expect "250" {
send "DATA\n"
expect "354" {
send "Subject: $subject\n\n"
send "Email sent on $ts_date at $ts_time.\n"
send "\n.\n"
expect "250" {
send "quit\n"
}
}
}
}
}
}
}
Realice los siguientes cambios:
YOUR_AUTHENTICATION_CODE
con el código de autenticación generado por el script de autenticación.YOUR_EMAIL_ADDRESS
con la dirección de correo electrónico utilizada para generar el código de autenticación.Por ejemplo (tenga en cuenta que los corchetes angulares se conservan para la dirección de correo electrónico):
send "AUTH PLAIN AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==\n"
send "MAIL FROM: <[email protected]>\n"
Por último, haga que el script de notificación sea ejecutable de la siguiente manera:
chmod +x notify.sh
Envíe un correo electrónico desde la línea de comando de la siguiente manera:
./notify.sh [email protected] "Command Line" "March 14" "15:52"