如何不经过身份验证直接向 SMTP 服务器发送邮件?

2024-03-22

我想通过直接连接到将电子邮件直接从脚本发送到 Gmail 电子邮件帐户smtp.gmail.com.

但是,我不希望脚本中包含 gmail 密码。据我所知,Gmail 似乎需要身份验证才能发送任何邮件,包括发送给自己的用户。

我的问题是,来自另一个 SMTP 服务器的邮件如何传送,因为该 SMTP 服务器没有 Gmail 凭据。 Gmail 是否只需要身份验证“匿名的“发送者,由于我的脚本在个人计算机上运行,​​因此它具有更高的安全性?这是我正在运行的 python 脚本:

import smtplib
import email
msg = email.message.Message()
msg["From"] = "[email protected] /cdn-cgi/l/email-protection"
msg["To"] = "[email protected] /cdn-cgi/l/email-protection"
msg["Subject"] = "Test message"
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.ehlo_or_helo_if_needed()
try:
    failed = server.sendmail("[email protected] /cdn-cgi/l/email-protection","[email protected] /cdn-cgi/l/email-protection", msg.as_string())
    server.close()
except Exception as e:
    print(e)

当我运行这个脚本时,输出是:

(530, b'5.5.1 Authentication Required. Learn more at
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 fw5sm21125889wib.0', '[email protected] /cdn-cgi/l/email-protection')

我的问题是,外部 SMTP 服务器如何避免这个问题?他们所做的一切是否可以在本地脚本中复制,或者是否需要正确的反向 DNS 记录、SPF 记录等?


这是一个非常好的问题,我正在内联回复。

我想通过直接连接到 smtp.gmail.com,将电子邮件直接从脚本发送到 Gmail 电子邮件帐户。

首先smtp.gmail.com不是接受邮件(来自其他邮件服务器)的邮件服务器,而是允许Gmail用户登录并发送或检查电子邮件。如果我们想找出接受其他邮件服务器邮件的 Gmail 邮件服务器。我们可以在终端上运行以下cmd:

dig mx gmail.com +short

output:

10 alt1.gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
5 gmail-smtp-in.l.google.com.
30 alt3.gmail-smtp-in.l.google.com.
20 alt2.gmail-smtp-in.l.google.com. 

Since gmail-smtp-in.l.google.com.具有最低的价值5我们使用它作为首选邮件服务器

但是,我不希望脚本中包含 gmail 密码。据我所知,Gmail 似乎需要身份验证才能发送任何邮件,包括发送给自己的用户。

正好有一个使用smtp.gmail.com登录并向各自的帐户发送/检查电子邮件,因此我们需要用户凭据。但是,我们不需要凭据即可将电子邮件发送到其邮件服务器,即gmail-smtp-in.l.google.com(如下示例)

我的问题是,来自另一个 SMTP 服务器的邮件如何传送,因为该 SMTP 服务器没有 Gmail 凭据。 Gmail是否只需要对“匿名”发件人进行身份验证,并且由于我的脚本在个人计算机上运行,​​因此它的安全性更高?这是我正在运行的 python 脚本:

正如我在上面的讨论中明确表示的那样,我们不需要 Gmail 凭据即可连接到Gmail 邮件服务器,但是如果我们连接到Gmail 邮件服务器使用个人计算机,我们可以发送几封电子邮件,但要发送更多电子邮件,我们需要使用 DKIM、SPF 等(这是一个完全不同的范围)建立域声誉和责任。

以下 python 脚本将电子邮件发送到 gmail 帐户,无需身份验证。

import smtplib

fromaddr = '[email protected] /cdn-cgi/l/email-protection'
toaddrs  = ['[email protected] /cdn-cgi/l/email-protection']
# string inside msg below must have "Subject: <subject line>\n"
# for a subject to be sent, and "To: " for the recipient to be shown in the email
msg = '''To: [email protected] /cdn-cgi/l/email-protection
    Subject: Subject line here\n
    The body goes here
    .
'''

msg = msg.format(fromaddr =fromaddr, toaddr = toaddrs[0])
# The actual mail send
server = smtplib.SMTP('gmail-smtp-in.l.google.com:25')
server.starttls()
server.ehlo("example.com")
server.mail(fromaddr)
server.rcpt(toaddrs[0])
server.data(msg)
server.quit()  

或者尝试以下 Telnet 片段

telnet gmail-smtp-in.l.google.com 25

HELO sendingdomain.com

MAIL FROM:<[email protected] /cdn-cgi/l/email-protection>

RCPT TO:<[email protected] /cdn-cgi/l/email-protection>

DATA
From: <[email protected] /cdn-cgi/l/email-protection>
To: <[email protected] /cdn-cgi/l/email-protection>
Subject: Just a test email

The body of the mail goes here.          
.

QUIT
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何不经过身份验证直接向 SMTP 服务器发送邮件? 的相关文章

随机推荐

  • 从第二个元素开始对 python 中的列表进行排序

    我想对列表进行排序 但我希望对其进行排序 不包括第一个元素 例如 a T 4 2 1 3 现在我希望对列表进行排序 但第一个元素应保留在其位置 a T 1 2 3 4 我知道这可以通过使用排序算法来完成 但是是否有一种单行方法或更多方法可以
  • Google Cloud Dataflow (Python):读取和写入 .csv 文件的函数?

    我无法弄清楚 GCP Dataflow Python SDK 中读取和写入 csv 文件 或任何非 txt 文件 的精确函数 对于BigQuery 我已经弄清楚了以下功能 beam io Read beam io BigQuerySourc
  • 当引用改变时如何重新渲染

    Code import DrawControl from react mapbox gl draw export default function MapboxGLMap let drawControl null return
  • Toast LENGTH_LONG 和 LENGTH_SHORT 的持续时间是多少

    我需要 LENGTH LONG 和 LENGTH SHORT 的确切持续时间 以毫秒 ms 为单位 我还需要知道 LENGTH LONG 的 Toast 消息的持续时间在任何手机和任何 API 版本中是否具有相同的持续时间 有人知道持续时间
  • 可观察管道中的异常处理

    我创建了一个可观察对象 其中包含通过运行异步方法将一个项目转换为另一个项目 IObservable
  • ffmpeg:记录/捕获流并同时进行场景检测

    是否可以同时捕获 录制 RTSP 流and使用单个 ffmpeg 命令捕获场景变化事件 我几乎可以做我想做的事 ffmpeg i rtsp mystream map 0 v map 0 a c v copy c a copy f segme
  • 找不到参数的方法 api() [目录 'libs']

    打开文件 这是我的 gradle 文件 apply plugin com android application android compileSdkVersion 27 buildToolsVersion 27 0 1 defaultCo
  • 如何将 _ITERATOR_DEBUG_LEVEL 添加到 CMake?

    我是 CMake 新手 我想将 ITERATOR DEBUG LEVEL 设置为 0 发布版本 和 2 调试版本 以修复尝试编译依赖于其他项目的项目时出现的问题 Error iterator debug level 值 2 与值 0 不匹配
  • Angular:ngc 还是 tsc?

    我一直在使用tsc 但是看到angular io强调ngc 我想知道两者是否有优势 或者我是否应该选择其中一个 提前致谢 tsc 和 ngc 具有不同的目的 并不是要选择其中之一 tsc 是一个 TypeScript 编译器 如果您的应用程
  • C# 从 OpenXML 返回内存流,导致损坏的 Word 文件

    我对来自 OpenXML 的 MemoryStream 有疑问 如果我在一个方法中完成所有步骤 我可以成功打开 Word 文件 更改它并通过 HttpResponse 下载它 但是 如果我尝试通过返回 MemoryStream 在两个不同的
  • 如何使用Android自动填充API

    我已经使用 android webview 组件构建了一个小型浏览器 并且希望使用 Android AutoFill API 集成密码 凭据管理器支持 我已阅读文档 但完全迷失了方向 找不到任何与 webviews 等复杂事物集成的示例 这
  • 嵌套 TagBuilder -作为 TagBuilderTree-

    TagBuilder 是构建 HTML 元素的一个很好的实现 但是某些 HTML 元素可以有其他元素 我称之为 子元素 我无法从 Mvc 类中找到任何类 问题 我应该实现几个支持嵌套标签的类 TagBuilderTree 和 TagBuil
  • 在 Visual Studio C++ 项目中在哪里输入 DLL 依赖项?

    我正在将一些在 Linux 和 Mac 上运行的 Qt 项目文件 pro 转换为 Visual Studio 项目文件 vcproj Qt Visual Studio 加载项可以很好地转换除 DLL 依赖项之外的所有内容 我应该将它们放在
  • 关于变量/函数命名约定的思考

    我一生都在断断续续地编码 我主要编写 Perl 代码 但也编写一些 Java PHP C C 我什至尝试过 Emacs Lisp 并且偶尔也编写过 shell 脚本 然而 我从来没有真正参与这个主题来获得任何专业知识 其他事情对我来说有更高
  • Android 从 java 代码设置文本视图颜色

    我有一个列表 并为此编写了一个自定义适配器 我想为此设置一些文本颜色 例如橙色代码 F06D2F 我正在展示我的代码片段getView method TextView text new TextView this context text
  • 获取单元测试时引用项目的路径

    我正在尝试使用单元测试来测试我的 ASP Net Web 应用程序中的类的功能 此类从硬盘驱动器加载一些文件 以执行 xsl 转换 Xsl GetXSLFromFile AppDomain CurrentDomain BaseDirecto
  • 如何在 Java 中解析 EDIFACT? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 解析 EDIFACT 可能是一项艰巨的任务 如何从 EDIFACT 文件正确创建语法和语义正确的树 ww
  • for 循环的增长顺序复杂

    对于以下代码片段 N 的增长顺序是多少 int sum 0 for int i 1 i lt N i i 2 for int j 1 j lt N j j 2 for int k 1 k lt i k sum 我发现有 lgN 项 但我一直
  • 什么是过度获取或不足获取?

    我有时会玩 graphQL 在 graphQL 之前 我们通常使用 REST API 许多开发者表示 graphQL 修复了 REST 的一些问题 例如过度获取和不足获取 我对这个术语感到困惑 有人可以解释一下在这种情况下什么是过度获取和不
  • 如何不经过身份验证直接向 SMTP 服务器发送邮件?

    我想通过直接连接到将电子邮件直接从脚本发送到 Gmail 电子邮件帐户smtp gmail com 但是 我不希望脚本中包含 gmail 密码 据我所知 Gmail 似乎需要身份验证才能发送任何邮件 包括发送给自己的用户 我的问题是 来自另