出于教育目的,我需要使用SMTP的基本和简单规则通过SMTP服务器发送电子邮件 .
我能够使用smtp4dev做到这一点 . 我 telnet localhost 25
和命令是:
我想使用Gmail SMTP服务器做同样的事情 . 但是,它需要身份验证和TLS . 我可以't figure out how to do that for Gmail. Here'的 telnet smtp.gmail.com 587
截图:
我搜索并发现了许多链接,包括Wikipedia's article关于 STARTTLS
命令 . 但是我使用命令行(或者自己用编程语言发送命令)的SMTP服务器 . 有人可以帮忙吗?
4 回答
要通过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=
从命令行获取此信息:
然后继续使用“mail from:”,就像在你的例子中一样
示例会话:
不幸的是,由于我被迫使用Windows服务器,我无法以上述答案建议的方式使用openssl .
但是我能够得到一个名为stunnel的类似程序(可以从here下载)来工作 . 我从www.tech-and-dev.com得到了这个想法,但我不得不稍微改变说明 . 这是我做的:
在Windows框中安装telnet客户端 .
下载stunnel . (我下载并安装了一个名为stunnel-4.56-installer.exe的文件) .
一旦安装,你需要找到
stunnel.conf
配置文件,在我的情况下我安装到C:\Program Files (x86)\stunnel
然后,您需要在文本查看器(如记事本)中打开此文件 . 查找
[gmail-smtp]
并删除下面客户端行上的分号(在stunnel.conf文件中,以分号开头的每一行都是注释) . 你应该得到类似的东西:完成此操作后,保存
stunnel.conf
文件和 reload 配置(要执行此操作,请使用stunnel GUI程序,然后单击configuration => Reload) .现在你应该准备好在windows telnet客户端发送电子邮件了!
转到开始=>运行=> cmd .
打开cmd后,输入以下内容并按Enter键:
然后,您应该看到类似于以下内容的内容:
然后,您需要输入以下内容并按Enter键进行回复:
这应该给你以下回应:
如果你得到这个,那么你需要键入以下内容并按Enter键:
这应该给你以下响应:
现在,您应该已准备好使用Gmail详细信息进行身份验证 . 要执行此操作,请键入以下内容并按Enter键:
这应该给你以下响应:
这意味着我们已准备好使用我们的Gmail地址和密码进行身份验证 .
但是,由于这是一个加密会话,我们将不得不发送base64编码的电子邮件和密码 . 要对您的电子邮件和密码进行编码,您可以使用转换器程序或在线网站对其进行编码(例如base64或在Google上搜索“base64在线编码”) . 我建议您在完成此操作之前不要再次触摸cmd / telnet会话 .
例如test@gmail.com将成为dGVzdEBnbWFpbC5jb20 =并且密码将变为cGFzc3dvcmQ =
完成此复制并将转换后的base64用户名粘贴到cmd / telnet会话中并按Enter键 . 这应该给你以下回应:
现在将转换后的base64密码复制并粘贴到cmd / telnet会话中,然后按Enter键 . 如果两个登录凭据都正确,则应该给出以下响应:
您现在应该按以下格式输入发件人电子邮件(应与用户名相同),然后按Enter键:
这应该给你以下回应:
您现在可以以类似的格式输入收件人电子邮件地址,然后按Enter键:
这应该给你以下回应:
现在,您需要键入以下内容并按Enter键:
哪个应该给你以下回复:
现在我们可以开始撰写消息了!为此,请按以下格式输入消息( Tip :在记事本中执行此操作并将整个消息复制到cmd / telnet会话):
完成电子邮件后输入一个点:
这应该给你以下回应:
现在,您需要输入以下内容并按Enter键结束会话:
这应该给你以下回应:
您的电子邮件现在应该在收件人的邮箱中!
没有人提到 - 我建议为此目的使用伟大的工具 - swaks
它有很多选项,几乎可以做你想要的一切 .
GMAIL: STARTTLS, SSLv3 (是的,2016年gmail仍然支持sslv3)
YAHOO: TLS aka SMTPS, tlsv1.2
我一直使用swaks通过gmail从nagios发送电子邮件通知最近5年没有任何问题 .
根据现有答案,以下是从命令行使用GMail帐户通过SMTP发送自动电子邮件的分步指南,而不会泄露密码 .
要求
首先,安装以下软件包:
Expect
OpenSSL
Core Utils(base64)
这些说明假设是Linux操作系统,但应该相当容易移植到Windows(通过Cygwin或本机等效的)或其他操作系统 .
身份验证
将以下shell脚本另存为
authentication.sh
:使其可执行并按如下方式运行:
出现提示时,请提供您的电子邮件地址和密码 . 这看起来像:
复制最后一行(
AGJ...==
),因为它将用于身份验证 .通知
将以下期望脚本保存为
notify.sh
(注意第一行是指期望程序):进行以下更改:
使用身份验证脚本生成的身份验证代码粘贴
YOUR_AUTHENTICATION_CODE
.使用用于生成验证码的电子邮件地址更改
YOUR_EMAIL_ADDRESS
.保存文件 .
例如(注意为电子邮件地址保留尖括号):
最后,使notify脚本可执行,如下所示:
发送电子邮件
从命令行发送电子邮件,如下所示: