Sae*_*ati 64 email gmail smtp smtpclient smtp-auth
出于教育目的,我需要使用SMTP的基本和简单规则通过SMTP服务器发送电子邮件.
我能够使用smtp4dev做到这一点.我telnet localhost 25
和命令是:
我想使用Gmail SMTP服务器做同样的事情.但是,它需要身份验证和TLS.我无法弄清楚如何为Gmail做到这一点.这是截图telnet smtp.gmail.com 587
:
我搜索并发现了很多链接,包括维基百科关于STARTTLS
命令的文章.但是我无法使用TLS并使用命令行对Gmail的SMTP服务器进行身份验证(或者使用编程语言自行发送命令).有人可以帮忙吗?
Gry*_*ius 106
要通过gmail发送,您需要使用加密连接.单独使用telnet是不可能的,但你可以使用openssl之类的工具
要么使用openssl中的starttls选项进行连接,要将普通连接转换为加密连接...
openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof
或直接连接到ssl sockect ...
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
EHLO localhost
之后,使用base64编码的用户名/密码对服务器进行身份验证
AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =
从命令行获取此信息:
echo -ne '\00user@gmail.com\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk
Run Code Online (Sandbox Code Playgroud)
然后继续使用"mail from:",就像在你的例子中一样
示例会话:
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
Run Code Online (Sandbox Code Playgroud)
Exi*_*ile 24
不幸的是,由于我被迫使用Windows服务器,我无法以上述答案建议的方式使用openssl.
但是我能够得到一个名为stunnel的类似程序(可以从这里下载)来工作.我从www.tech-and-dev.com得到了这个想法,但我不得不稍微改变说明.这是我做的:
stunnel.conf
配置文件,在我的情况下我安装到C:\Program Files (x86)\stunnel
然后,您需要在文本查看器(如记事本)中打开此文件.[gmail-smtp]
在下面的客户端行中查找并删除分号(在stunnel.conf文件中,以分号开头的每一行都是注释).你应该得到类似的东西:
[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
Run Code Online (Sandbox Code Playgroud)
完成此操作后,保存stunnel.conf
文件并重新加载配置(为此,请使用stunnel GUI程序,然后单击configuration => Reload).
现在你应该准备好在windows telnet客户端发送电子邮件了!
转到开始=>运行=> cmd.
打开cmd后,输入以下内容并按Enter键:
telnet localhost 25
Run Code Online (Sandbox Code Playgroud)
然后,您应该看到类似于以下内容的内容:
220 mx.google.com ESMTP f14sm1400408wbe.2
Run Code Online (Sandbox Code Playgroud)
然后,您需要输入以下内容并按Enter键进行回复:
helo google
Run Code Online (Sandbox Code Playgroud)
这应该给你以下回应:
250 mx.google.com at your service
Run Code Online (Sandbox Code Playgroud)
如果你得到这个,那么你需要键入以下内容并按Enter键:
ehlo google
Run Code Online (Sandbox Code Playgroud)
这应该给你以下响应:
250-mx.google.com at your service, [212.28.228.49]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
Run Code Online (Sandbox Code Playgroud)
现在,您应该已准备好使用Gmail详细信息进行身份验证.要执行此操作,请键入以下内容并按Enter键:
AUTH LOGIN
Run Code Online (Sandbox Code Playgroud)
这应该给你以下响应:
334 VXNlcm5hbWU6
Run Code Online (Sandbox Code Playgroud)
这意味着我们已准备好使用我们的Gmail地址和密码进行身份验证.
但是,由于这是一个加密会话,我们将不得不发送base64编码的电子邮件和密码.要对您的电子邮件和密码进行编码,您可以使用转换器程序或在线网站对其进行编码(例如base64或在google上搜索"base64在线编码").我建议您在完成此操作之前不要再次触摸cmd/telnet会话.
例如test@gmail.com将成为dGVzdEBnbWFpbC5jb20 =并且密码将变为cGFzc3dvcmQ =
完成此复制并将转换后的base64用户名粘贴到cmd/telnet会话中并按Enter键.这应该给你以下回应:
334 UGFzc3dvcmQ6
Run Code Online (Sandbox Code Playgroud)
现在将转换后的base64密码复制并粘贴到cmd/telnet会话中,然后按Enter键.如果两个登录凭据都正确,则应该给出以下响应:
235 2.7.0 Accepted
Run Code Online (Sandbox Code Playgroud)
您现在应该按以下格式输入发件人电子邮件(应与用户名相同),然后按Enter键:
MAIL FROM:<test@gmail.com>
Run Code Online (Sandbox Code Playgroud)
这应该给你以下回应:
250 2.1.0 OK x23sm1104292weq.10
Run Code Online (Sandbox Code Playgroud)
您现在可以以类似的格式输入收件人电子邮件地址,然后按Enter键:
RCPT TO:<recipient@gmail.com>
Run Code Online (Sandbox Code Playgroud)
这应该给你以下回应:
250 2.1.5 OK x23sm1104292weq.10
Run Code Online (Sandbox Code Playgroud)
现在,您需要键入以下内容并按Enter键:
DATA
Run Code Online (Sandbox Code Playgroud)
哪个应该给你以下回复:
354 Go ahead x23sm1104292weq.10
Run Code Online (Sandbox Code Playgroud)
现在我们可以开始撰写消息了!为此,请按以下格式输入消息(提示:在记事本中执行此操作并将整个消息复制到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.
Run Code Online (Sandbox Code Playgroud)
完成电子邮件后输入一个点:
.
Run Code Online (Sandbox Code Playgroud)
这应该给你以下回应:
250 2.0.0 OK 1288307376 x23sm1104292weq.10
Run Code Online (Sandbox Code Playgroud)
现在,您需要输入以下内容并按Enter键结束会话:
QUIT
Run Code Online (Sandbox Code Playgroud)
这应该给你以下回应:
221 2.0.0 closing connection x23sm1104292weq.10
Connection to host lost.
Run Code Online (Sandbox Code Playgroud)
您的电子邮件现在应该在收件人的邮箱中!
由于没有人提到-我会建议为上述目的使用伟大的工具- 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.
Run Code Online (Sandbox Code Playgroud)
它有很多选择,几乎可以完成您想要的所有事情。
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.
Run Code Online (Sandbox Code Playgroud)
Yahoo:TLS aka 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.
Run Code Online (Sandbox Code Playgroud)
过去5年中,我一直在使用swaks通过gmail从nagios发送电子邮件通知,没有任何问题。
归档时间: |
|
查看次数: |
178223 次 |
最近记录: |