65.9K
CodeProject 正在变化。 阅读更多。
Home

发送电子邮件( 通过 SMTP) 和短信的几种简单方法

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.28/5 (24投票s)

2006年11月4日

CPOL

7分钟阅读

viewsIcon

355636

downloadIcon

4946

面向初学者的指南, 介绍如何在没有足够资源访问权限的情况下发送电子邮件( 通过 SMTP) 和短信。

引言

有时您可能希望从应用程序发送电子邮件或 SMS 短信,但遇到了以下一些障碍:

  • 您无法访问 SMTP 服务器或 SMS 网关
  • 您无法设置自己的 SMTP 服务器或 SMS 网关
  • 您的 SMTP 服务器或 SMS 网关被您的互联网服务提供商 (ISP) 或您组织的防火墙阻止
  • 您无权发送外部电子邮件(电子邮件只能发送到组织内的地址)等。

对于这些问题,有一些解决方法,本文将进行介绍。您可能听说过或没有听说过某些解决方法。为了简洁起见,本文仅介绍解决方法的工作原理。通常,不会提供解决方法的源代码或可执行演示,但会链接到包含相关源代码或可执行演示的文章。

本文分为发送电子邮件的解决方法和发送 SMS 短信的解决方法。

SMTP 电子邮件解决方法

SMS 短信解决方法

SMTP 电子邮件解决方法

使用 SMTP 授权/身份验证

您可能知道或不知道,当您连接到 SMTP 服务器时,您可以提供登录凭据(例如用户名和密码)来授权/验证您的身份。这允许您发送电子邮件到任何地方。电子邮件客户端检索 POP3 或 IMAP 电子邮件并通过 SMTP 发送电子邮件就是这样工作的。但是,用于应用程序开发或命令行使用的独立 SMTP 工具通常不提供连接到 SMTP 服务器时使用授权的示例。此外,这些工具中的一半或更多工具不包含提供登录凭据进行授权的选项,这意味着您可能只能在组织内部发送电子邮件等(无法发送外部电子邮件)。这些工具只是假设您不需要授权。

注意:使用 SMTP 授权可能会使您的电子邮件帐户面临风险,因为某些工具以未加密的纯文本形式使用/需要登录凭据。例如,需要在命令行或文本配置文件中提供帐户信息。因此,请谨慎使用。

如何实现 SMTP 身份验证/授权

由于市面上有大量的 SMTP 工具,其中一些确实支持 SMTP 授权,因此本文不提供任何此类工具。但提供了一些链接供参考。在构建应用程序时,请遵循 SMTP 协议(或其 RFC 规范),包括 SMTP 身份验证/授权选项,或使用支持此功能的 SMTP 库。如果使用 .NET,该库包含了所有内容,您只需将其集成到应用程序中(请参阅参考链接,特别是第一个链接)。

使用 SMTP 身份验证/授权的示例

您可以在 Windows 上使用 Blat,或在 Unix/Linux 平台上使用类似 msmtp 的工具。此处的示例是为 Blat 设计的,并且仅显示一种用例。您可以指定更多选项。

Blat -to recipient@addr.com -subject "theSubject" -body "theMessage" 

-server SMTPServer@addr.com -u YourUsername -pw YourPassword

参考文献

使用 DNS MX(邮件)服务器查找

您可以对要发送电子邮件的电子邮件地址的域执行 DNS MX(邮件)服务器查找。然后,您可以直接连接到这些 SMTP 服务器来发送电子邮件。由于目的地在该服务器的域/组织内,因此无需身份验证。这种方法可能存在一些安全和道德问题,并且您可能仍会偶尔被阻止发送电子邮件,但这是一种替代解决方法。

如何实现 DNS MX 查找 + SMTP 发送电子邮件

使用此方法的工具不多。我包含了一个 Windows 命令行工具(含 Visual C++ 7.0 的源代码),该工具使用此方法,并基于以下参考中的第一个链接的代码。该工具需要 Windows 2000 或更高版本,并且一次只能发送 1 封电子邮件。由于我没有正确编写该工具,因此它可能不支持 Unicode,尽管它对 ASCII 格式的英文应该效果很好。代码只是对参考文章中提供的主要代码片段的 Windows 控制台或命令行可执行包装器。有关此工具代码的详细信息,请下载并查看源代码以及参考文章链接。如果有人为该代码实现了 COM/ActiveX DLL 包装器,那将很棒(我自己不熟悉构建 COM 应用程序)。

使用 DNS MX 查找 + SMTP 发送电子邮件的示例

示例基于我构建的工具。可执行文件位于您可以从此文章下载的 Visual C++ 7.0 项目的 *Bin/Release* 目录下。示例仅显示一种用例。您可以指定更多选项。

mxmail "fromName" from@addr.com to@addr.com "subject" -t 

"message"

参考文献

SMS 短信解决方法

使用 SMTP 和移动/手机运营商的 SMS 网关

您可以将 SMS 短信作为短电子邮件发送(长消息可能会被截断)。为此,您通过 SMTP 发送一封普通的短电子邮件,但发送到一个具有以下模式的地址:phoneNumber@carrierDomain.com,例如 xxxxxxxxxx@vmobl.com。这可能也需要 SMTP 电子邮件解决方法,因为您很可能发送到外部电子邮件地址。此方法易于操作,但需要知道运营商的 SMS 网关电子邮件地址格式。您可以在以下一些 URL 引用中找到这些地址,或搜索“运营商 SMS 网关”等。

如何通过运营商网关寻址实现 SMS

使用 SMTP 库或工具通过电子邮件发送 SMS 短信(请参阅本文中的 SMTP 解决方法)。但您必须先进行运营商到网关电子邮件地址的转换 - 这应该很容易做到。要获取一些转换映射,请搜索网络或尝试以下参考链接。

通过运营商网关寻址使用 SMS 的示例

示例基于我构建的工具。可执行文件位于您可以从此文章下载的 Visual C++ 7.0 项目的 *Bin/Release* 目录下。示例仅显示一种用例。示例假设您已完成转换。

mxmail "fromName" from@addr.com 2105211202@vmobl.com "subject" -t 

"message"

参考文献

使用“发送 SMS 短信”网页表单

网上有许多允许您发送 SMS 短信的网站。它们为您完成了繁重的工作。您只需填写表单并单击发送等。您无需知道运营商的 SMS 网关电子邮件地址格式。您只需要知道目标电话号码,以及可能该电话号码的运营商。其中一些服务是免费的,有些则不是。有些效果很好,有些则不然。

为了更好地利用这些网页表单,您可以进行以下黑客操作:让您的应用程序将数据转发到网页表单,或者让您的应用程序直接将数据提交到表单的处理脚本(绕过表单本身,使用您自己的表单等)。使用后一种方法,您可以向表单处理脚本发出 HTTP POST 请求。

注意:使用此类黑客操作可能违反服务的服务条款。并且服务可能会更改,这将需要更新您的代码。

如何通过 SMS 网页表单黑客实现 SMS

如何实现这一点取决于您的偏好和技能。以下参考文章提供了两种技术。

通过 SMS 网页表单黑客使用 SMS 的示例

如果您在参考文章链接中使用 Perl 自动化方法将表单提交记录到脚本中,然后您可以编辑该脚本以接受命令行参数等,以便您稍后使用该脚本时指定收件人和消息。

参考文献

历史

  • 11/04/06 - 初次发布
  • 11/24/06 - 添加了针对初学者的信息,说明如何实现或使用本文提出的一些想法
© . All rights reserved.