-->

如何通过Gmail使用简单的SMTP命令发送电子邮件?如何通过Gmail使用简单的SMTP命令发送电

2019-06-17 10:24发布

对于教育目的,我需要通过SMTP服务器发送电子邮件,使用SMTP的基本和简单的规则。

我能做到这一点使用smtp4dev 。 我telnet localhost 25和和命令:

我想要做同样的事情,使用Gmail的SMTP服务器。 但是,它需要认证和TLS。 我无法弄清楚如何做到这一点的Gmail。 下面是截图telnet smtp.gmail.com 587

我搜查,发现许多环节,包括维基百科的文章有关STARTTLS命令。 但我不能够使用TLS和(编程语言或发送命令自己)使用命令行验证Gmail的SMTP服务器。 任何人都可以帮忙吗?

Answer 1:

送过来的Gmail,你需要使用加密连接。 这是不可能通过telnet独自一人,但你可以使用的工具,如OpenSSL的

还可以连接使用STARTTLS选项OpenSSL中对加密的平原连接转换...

OpenSSL的的s_client.First -starttls SMTP -connect smtp.gmail.com:587 -crlf -ign_eof

连接到SSL sockect直接...

OpenSSL的的s_client.First -connect smtp.gmail.com:465 -crlf -ign_eof

EHLO本地主机

在此之后,验证到使用base64编码的用户名/密码的服务器

AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =

从命令行得到这样的:

echo -ne '\00user@gmail.com\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk

然后用“从邮件:”继续这样在你的榜样

例如会话:

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: <gryphius-demo@gmail.com>
250 2.1.0 OK m46sm11546481eeh.9
rcpt to: <somepoorguy@example.com>
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


Answer 2:

不幸的是,因为我被迫使用一个Windows服务器,我一直无法得到的OpenSSL在上面的回答暗示的方式工作。

不过,我是能够得到一个类似的程序调用安全通道(可从以下地址下载这里 )工作。 我从这个想法www.tech-and-dev.com但我不得不稍微改变指令。 下面是我做的:

  1. 在Windows中安装Telnet客户端。
  2. 下载安全通道。 (我下载并安装了一个文件称为Stunnel-4.56-Installer.exe的 )。
  3. 一旦安装,你再找到所需stunnel.conf配置文件,这在我来说,我安装到C:\Program Files (x86)\stunnel
  4. 然后,你需要打开一个文本查看器该文件,如记事本 。 寻找[gmail-smtp]并删除下面的客户端线分号(在stunnel.conf文件,每一个以分号开始行是注释)。 您应该结束了喜欢的东西:

     [gmail-smtp] client = yes accept = 127.0.0.1:25 connect = smtp.gmail.com:465 

    一旦你这样做了保存stunnel.conf文件并重新加载配置(要做到这一点使用的安全通道GUI程序,并单击配置=>刷新 )。

现在,你应该准备在windows telnet客户端发送邮件!
转到开始=>运行=> CMD。

一旦cmd是开放式的追随者,然后按Enter键:

telnet localhost 25

然后,你应该看到类似下面的内容:

220 mx.google.com ESMTP f14sm1400408wbe.2

然后,您需要通过键入以下并按Enter键回复:

helo google

这应该给你以下回应:

250 mx.google.com at your service

如果你得到这个你再需要键入以下命令并按回车键:

ehlo google

那么这应该给你以下回应:

250-mx.google.com at your service, [212.28.228.49]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES

现在,你应该准备好与您的Gmail的详细信息进行身份验证。 要做到这一点,键入以下并按回车键:

AUTH LOGIN

那么这应该给你以下回应:

334 VXNlcm5hbWU6

这意味着,我们已经准备好使用我们的Gmail地址和密码进行身份验证。

然而,因为这是一个加密的会话,我们将不得不在发送base64编码的电子邮件和密码。 要编码您的电子邮件地址和密码,你可以使用转换程序或在线网站对它进行编码(例如BASE64或谷歌搜索“的base64编码在线”)。 我建议你不要再触碰CMD / telnet会话,直到你已经做到了这一点。

例如test@gmail.com将成为dGVzdEBnbWFpbC5jb20 =和密码将成为cGFzc3dvcmQ =

一旦你这样做复制和粘贴您的base64转换为用户名的CMD / Telnet会话,然后按回车。 这应该给你以下答复:

334 UGFzc3dvcmQ6

现在,复制并粘贴到转换的base64密码进入CMD / Telnet会话,然后按回车。 这应该给你,如果这两个登录凭据是正确的回应如下:

235 2.7.0 Accepted

现在,您应该输入发件人的电子邮件(应该是相同的用户名)按以下格式并按回车键:

MAIL FROM:<test@gmail.com>

这应该给你以下回应:

250 2.1.0 OK x23sm1104292weq.10

现在,您可以用类似的格式,按输入收件人的电子邮件地址输入:

RCPT TO:<recipient@gmail.com>

这应该给你以下回应:

250 2.1.5 OK x23sm1104292weq.10

现在,你需要键入以下命令并按回车键:

DATA

这应该给你以下回应:

354  Go ahead x23sm1104292weq.10

现在我们可以开始编写消息! 要做到这一点请在以下格式的消息( 提示 :在记事本中做到这一点,整个消息复制到CMD / telnet会话):

From: Test <test@gmail.com>
To: Me <recipient@gmail.com>
Subject: Testing email from telnet
This is the body

Adding more lines to the body message.

当你完成的电子邮件进入点:

.

这应该给你以下回应:

250 2.0.0 OK 1288307376 x23sm1104292weq.10

现在,你需要通过键入以下并按Enter键结束会话:

QUIT

这应该给你以下回应:

221 2.0.0 closing connection x23sm1104292weq.10
Connection to host lost.

而您的电邮现在应该在收件人的邮箱!



Answer 3:

由于没有人提到-我会建议为上述目的使用伟大的工具- 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.

它有很多的选择和几乎可以做任何你想要的一切。

GMAIL:STARTTLS,SSLv3的 (是的,在2016年Gmail仍然支持SSLv3)和

$ echo "Hello world" | swaks -4 --server smtp.gmail.com:587 --from user@gmail.com --to user@example.net -tls --tls-protocol sslv3 --auth PLAIN --auth-user user@gmail.com --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:<user@gmail.com>
<~  250 2.1.0 OK h8sm76342lbd.48 - gsmtp
 ~> RCPT TO:<user@example.net>
<~  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: user@example.net
 ~> From: user@gmail.com
 ~> 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又名SMTPS,TLSv1.2工作

$ echo "Hello world" | swaks -4 --server smtp.mail.yahoo.com:465 --from user@yahoo.com --to user@gmail.com --tlsc --tls-protocol tlsv1_2 --auth PLAIN --auth-user user@yahoo.com --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:<user@yahoo.com>
<~  250 OK , completed
 ~> RCPT TO:<user@gmail.com>
<~  250 OK , completed
 ~> DATA
<~  354 Start Mail. End with CRLF.CRLF
 ~> Date: Wed, 17 Feb 2016 10:08:28 +0000
 ~> To: user@gmail.com
 ~> From: user@yahoo.com
 ~> 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.

我一直在使用swaks通过Gmail发送的nagios从电子邮件通知最近5年没有任何问题。



Answer 4:

基于现有的答案,这里有一个一步一步的指导,通过SMTP,发送自动电子邮件使用的GMail帐户,通过命令行,而不公开密码。

要求

首先,安装以下软件包:

  • 期望
  • OpenSSL的
  • 核心utils的的(Base64)

这些说明假设Linux操作系统,但应该是相当容易端口到Windows(通过Cygwin或原生当量),或其他操作系统。

认证

将下面的shell脚本为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

使其可执行文件,并按如下运行:

chmod +x authentication.sh
./authentication.sh

当出现提示时,请提供您的电子邮件地址和密码。 这将是这个样子:

Email (shown): bob@gmail.com
Password (hidden): 
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==

复制的最后一行( AGJ...== ),因为这将被用于验证。

通知

将下面的期待脚本notify.sh (注意:第一行是指期望程序):

#!/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"
            }
          }
        }
      }
    }
  }
}

做以下修改:

  1. 粘贴在YOUR_AUTHENTICATION_CODE与认证脚本生成的验证码。
  2. 更改YOUR_EMAIL_ADDRESS与用来生成验证码的E-mail地址。
  3. 保存文件。

例如(注意括号被保留用于e-mail地址的角度):

send "AUTH PLAIN AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==\n"
send "MAIL FROM: <bob@gmail.com>\n"

最后,使通知可执行脚本如下:

chmod +x notify.sh

发送电子邮件

在命令行发送的电子邮件如下:

./notify.sh recipient@domain.com "Command Line" "March 14" "15:52"


文章来源: How to send email using simple SMTP commands via Gmail?