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

2023-12-14

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

我能够使用smtp4dev. I telnet localhost 25和 命令是:

enter image description here

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

enter image description here

我搜索并发现了很多链接,包括维基百科的文章 about STARTTLS命令。但我无法使用 TLS 并使用命令行(或自己用编程语言发送命令)对 Gmail 的 SMTP 服务器进行身份验证。有人可以帮忙吗?


要通过 Gmail 发送,您需要使用加密连接。单独使用 telnet 是不可能的,但您可以使用类似的工具openssl

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

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

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

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

EHLO 本地主机

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

AUTH 平原 AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ=

从命令行获取:

echo -ne '\[email protected]\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: <[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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如果使用java满足某些条件,如何为某一行设置颜色?

    我有一个jtable 表格摘要 其中一栏是 EXPIRY 我想突出显示客户的行 其到期日已在当前日期失效 我已经有了逻辑 但我无法使该行变成红色或任何其他颜色 这是我的代码 int count tableSummary getRowCoun
  • “\n”分隔符问题

    我有一个 stringbuilder 对象 其中添加了一行数据 添加每一行后 我在末尾附加一个 n 以指示新行 这个 stringbuilder 对象最终确定后被写入一个平面文件 当我在记事本中打开平面文件时 每行后面都会出现一个小矩形 并
  • Twitter API 更新限制错误 403

    我正在尝试使用 twitter4j api 从 twitter api 检索数据 一段时间后检索数据我收到以下错误 Exception in thread main 403 The request is understood but it
  • JQgrid动态添加Dropdown

    我想在 JQGrid 中动态添加下拉菜单 例如 我有以下类型的网格 现在 当我单击按钮时 应在网格中添加一个新行 对于新行 第一列数据将是下拉列表 第二个超链接 第三个下拉列表和第四个复选框 即它应该与第一行相同 对于每个按钮 单击新行时应
  • 什么可能导致 System.TypeLoadException?

    我正在使用 C 使用 VS2008 开发 Honeywell Dolphin 6100 的应用程序 Honeywell Dolphin 6100 是一款带有条形码扫描仪的移动计算机 使用类似 Windows CE 5 0 的操作系统 我想添
  • 无法通过 Azure Powershell 在新应用程序注册模块中设置“preAuthorizedApplications”对象

    简短的场景 多租户前端 javascript React JS Web 应用程序从浏览器调用多租户 ASP NET Core 2 2 WebAPI 验证 当用户登录时 基于用户的原始 Azure Active Directory 前端应用程
  • self = [超级初始化] 重新审视

    我偶然发现了这个帖子在 Objective C 中 为什么我应该检查 self super init 是否不为零 我能够了解这个语法 id initWithString NSString aString self super init if
  • 带有controlsfx通知组件的javafx NullPointerException

    我想开发一个使用controlsfx通知在系统托盘模式下显示一些通知的应用程序 在正常模式下 我的应用程序运行良好 并且可以成功显示通知 但是当我在系统托盘中隐藏阶段时 会发生 NullPointerException 我不知道如何解决这个
  • 将多个 pandas 数据帧导出到 csv 文件的最有效方法是什么?

    我有多个 pandas 数据框 df1 df2 df3 我想将它们全部导出到 csv 文件 df1 to csv df1 csv index False df2 to csv df2 csv index False df3 to csv d
  • 以两个不同的名称将 docker 容器添加到网络

    我正在尝试新的 docker 网络功能 我使用容器链接将旧设置迁移到新的桥接网络 到目前为止 我已经在同一主机上的多个容器之间启动并运行了专用桥接网络 现在我正在寻找一种方法来复制同一容器的多个链接别名 假设我有一个名为myBox加入 do
  • 只需从 PHP 中的字符串获取图像 URL [重复]

    这个问题在这里已经有答案了 从这样的字符串 img src images mylondon jpg 我正在尝试检索仅在 PHP 中其他地方使用的 url 我知道正则表达式是可行的方法 但我现在无法理解它们 有人可以帮忙吗 preg matc
  • DBGrid 停止当前行移动

    使用 d5 TDBGrid SQLite3 和 ZEOS 数据库有 2000 个项目 一列是 Active 布尔值 第二列是 ItemName 文本 IndexFiledNames 是 ItemName OnDblclick 切换 活动 开
  • Apache 中用于 POST/DELETE/PUT 的 URL 重写

    我的网址是这样的 http 10 243 123 1 v1 data register 我想重定向 重写这个网址到 https 10 243 123 1 data register This is HTTP POST PUT DELETE
  • 添加新行时,Google 表格条件格式会发生变化

    因此 我单击 A 和 1 之间的单元格来选择整个工作表 然后单击 格式 然后单击 条件格式 并设置规则 基本上 我有大约 15 种不同的条件 但所有条件都在 F 到 O 列中 所以我使用 F O 例如 如果文本恰好是 是 则将背景更改为绿色
  • 如果水平进度条位于工具栏上方,则不可见(适用于 Android 5)

    我尝试通过以下 XML 将水平进度条放置在工具栏顶部 my activity xml
  • hadoop getmerge到另一台机器

    是否可以存储输出hadoop dfs getmerge命令到另一台机器 原因是我的本地机器没有足够的空间 作业输出为 100GB 我的本地存储为 60GB 另一个可能的原因可能是我想在另一台机器上本地处理另一个程序中的输出 并且我不想将其传
  • R data.table 使用标准名称创建新列

    我想根据比率计算为我的 data table 创建新列 我的变量的名称有点标准 所以我认为必须有一种方法可以轻松实现这一点数据表 但是我不知道如何实现这一点 以下是我的示例数据和代码 set seed 1200 ID lt seq 1001
  • 复数 FFT 然后逆 FFT MATLAB

    我正在使用 Matlab 中的 FFT 函数来尝试分析行波激光模型的输出 模型的时域形式为 实数 虚数 其思想是将 FFT 应用于复数输出 以获得频域中的相位和幅度信息 load time domain field data data lo
  • 为什么我不能使用 boost::variant 访问这个自定义类型?

    下面的代码 include
  • 如何通过 Gmail 使用简单的 SMTP 命令发送电子邮件?

    出于教育目的 我需要使用 SMTP 的基本且简单的规则通过 SMTP 服务器发送电子邮件 我能够使用smtp4dev I telnet localhost 25和 命令是 我想做同样的事情 使用 Gmail SMTP 服务器 但是 它需要身