首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过Gmail使用简单的SMTP命令发送电子邮件?

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

Stack Overflow用户
提问于 2012-06-15 15:10:11
回答 4查看 197.4K关注 0票数 69

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

我可以使用smtp4dev做到这一点。I telnet localhost 25和和命令是:

我想做同样的事情,使用Gmail SMTP服务器。但是,它需要身份验证和TLS。我不知道如何在Gmail上做到这一点。这是telnet smtp.gmail.com 587的屏幕截图

我搜索并找到了许多链接,包括关于STARTTLS命令的Wikipedia's article。但是我不能使用TLS,也不能使用命令行验证Gmail的SMTP服务器(或者我自己用编程语言发送命令)。有人能帮上忙吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-15 19:05:41

要通过gmail发送,您需要使用加密连接。仅使用telnet是不可能做到这一点的,但您可以使用openssl等工具

使用openssl中的starttls选项进行连接,将普通连接转换为加密连接...

openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof

或直接连接到ssl套接字...

openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof

EHLO本地主机

之后,使用base64编码的用户名/密码向服务器进行身份验证

普通AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ= 身份验证

要从命令行中获取以下内容:

代码语言:javascript
复制
echo -ne '\00user@gmail.com\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk

然后继续使用"mail from:“,如示例中所示

会话示例:

代码语言:javascript
复制
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
票数 117
EN

Stack Overflow用户

发布于 2013-08-15 23:11:34

不幸的是,当我被迫使用windows服务器时,我无法让openssl以上述答案所建议的方式工作。

然而,我能够获得一个类似的程序,它的名字叫斯图奈尔(可以从here上下载)。我是从www.tech-and-dev.com得到这个想法的,但我不得不稍微修改一下说明。下面是我所做的:

  1. 在windows机器上安装telnet客户端。
  2. Download stunnel。(我下载并安装了一个名为stunnel-4.56-installer.exe).
  3. Once的文件,然后您需要找到stunnel.conf配置文件,在我的示例中,它安装到C:\Program Files (x86)\stunnel
  4. Then,,您需要在记事本等文本查看器中打开此文件。查找[gmail-smtp]并删除下面客户机行上的分号(在stunnel.conf文件中,以分号开头的每一行都是注释)。你应该会得到类似这样的结果:

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

完成此操作后,请保存stunnel.conf文件并重新加载配置(为此,请使用 GUI程序,然后单击configuration=>Reload).

现在你应该已经准备好在windows telnet客户端中发送电子邮件了!

转到Start=>run=>cmd。

打开cmd后,键入以下内容并按Enter键:

代码语言:javascript
复制
telnet localhost 25

然后,您应该会看到类似以下内容:

代码语言:javascript
复制
220 mx.google.com ESMTP f14sm1400408wbe.2

然后,您需要通过键入以下内容并按enter键进行回复:

代码语言:javascript
复制
helo google

这将为您提供以下响应:

代码语言:javascript
复制
250 mx.google.com at your service

如果您获得了此信息,则需要键入以下内容并按enter键:

代码语言:javascript
复制
ehlo google

这将为您提供以下响应:

代码语言:javascript
复制
250-mx.google.com at your service, [212.28.228.49]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES

现在您应该准备好使用您的Gmail详细信息进行身份验证。为此,请键入以下命令并按enter键:

代码语言:javascript
复制
AUTH LOGIN

这将为您提供以下响应:

代码语言:javascript
复制
334 VXNlcm5hbWU6

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

但是,由于这是一个加密会话,我们将不得不发送以base64编码的电子邮件和密码。要对您的电子邮件和密码进行编码,您可以使用转换程序或在线网站对其进行编码(例如base64或在谷歌上搜索“base64 online encoding”)。我建议您在完成此操作之前,不要再接触cmd/telnet会话。

例如,test@gmail.com将变为dGVzdEBnbWFpbC5jb20=,而password将变为cGFzc3dvcmQ=

完成此操作后,复制并将转换后的base64用户名粘贴到命令/远程登录会话中,然后按enter键。这将为您提供以下响应:

代码语言:javascript
复制
334 UGFzc3dvcmQ6

现在,将转换后的base64密码复制并粘贴到命令/远程登录会话中,然后按enter键。如果两个登录凭据都正确,则会显示以下响应:

代码语言:javascript
复制
235 2.7.0 Accepted

您现在应按以下格式输入发件人电子邮件(应与用户名相同),然后按enter键:

代码语言:javascript
复制
MAIL FROM:<test@gmail.com>

这将为您提供以下响应:

代码语言:javascript
复制
250 2.1.0 OK x23sm1104292weq.10

现在,您可以按类似格式输入收件人电子邮件地址,然后按enter键:

代码语言:javascript
复制
RCPT TO:<recipient@gmail.com>

这将为您提供以下响应:

代码语言:javascript
复制
250 2.1.5 OK x23sm1104292weq.10

现在,您需要键入以下内容并按enter键:

代码语言:javascript
复制
DATA

这应该会给出以下响应:

代码语言:javascript
复制
354  Go ahead x23sm1104292weq.10

现在我们可以开始编写消息了!为此,请按以下格式输入您的邮件(提示:在记事本中执行此操作,并将整个邮件复制到命令/远程登录会话中):

代码语言:javascript
复制
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.

完成电子邮件后,请输入一个圆点:

代码语言:javascript
复制
.

这将为您提供以下响应:

代码语言:javascript
复制
250 2.0.0 OK 1288307376 x23sm1104292weq.10

现在,您需要通过键入以下命令并按enter键来结束会话:

代码语言:javascript
复制
QUIT

这将为您提供以下响应:

代码语言:javascript
复制
221 2.0.0 closing connection x23sm1104292weq.10
Connection to host lost.

你的电子邮件现在应该在收件人的邮箱里了!

票数 26
EN

Stack Overflow用户

发布于 2016-02-17 18:30:06

就像没有人提到的那样--我建议使用一个很棒的工具来实现这个目的-- swaks

代码语言:javascript
复制
# 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)

代码语言:javascript
复制
$ 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.

雅虎: TLS又名SMTPS,tlsv1.2

代码语言:javascript
复制
$ 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.

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11046135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档