发送电子邮件( 通过 SMTP) 和短信的几种简单方法
面向初学者的指南,
- 下载 MX 电子邮件工具(含源代码)- 63.16 KB
需要 Windows 2000 或更高版本。源代码需要 Visual C++ 7.0。
引言
有时您可能希望从应用程序发送电子邮件或 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
参考文献
- CodeProject 文章:在 .NET 1.1 中发送复杂电子邮件
- CodeProject 文章:使用 System.Web.Mail (CDOSYS) 进行 SMTP 身份验证
- CodeProject 文章:通过您的 .NET 应用程序使用您的 GMail 帐户发送电子邮件
- Blat - 支持 SMTP 授权选项的 Windows 命令行 SMTP 工具
使用 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 网关的 Wiki
- CodeProject 文章:使用 ASP.NET 2.0 的简易 SMTP 邮件
(上面的文章包含一些常见运营商地址的列表)
您也可以在 Code Project 网站上搜索“SMS”以查找包含常见运营商地址列表的其他文章。
使用“发送 SMS 短信”网页表单
网上有许多允许您发送 SMS 短信的网站。它们为您完成了繁重的工作。您只需填写表单并单击发送等。您无需知道运营商的 SMS 网关电子邮件地址格式。您只需要知道目标电话号码,以及可能该电话号码的运营商。其中一些服务是免费的,有些则不是。有些效果很好,有些则不然。
为了更好地利用这些网页表单,您可以进行以下黑客操作:让您的应用程序将数据转发到网页表单,或者让您的应用程序直接将数据提交到表单的处理脚本(绕过表单本身,使用您自己的表单等)。使用后一种方法,您可以向表单处理脚本发出 HTTP POST 请求。
注意:使用此类黑客操作可能违反服务的服务条款。并且服务可能会更改,这将需要更新您的代码。
如何通过 SMS 网页表单黑客实现 SMS
如何实现这一点取决于您的偏好和技能。以下参考文章提供了两种技术。
通过 SMS 网页表单黑客使用 SMS 的示例
如果您在参考文章链接中使用 Perl 自动化方法将表单提交记录到脚本中,然后您可以编辑该脚本以接受命令行参数等,以便您稍后使用该脚本时指定收件人和消息。
参考文献
历史
- 11/04/06 - 初次发布
- 11/24/06 - 添加了针对初学者的信息,说明如何实现或使用本文提出的一些想法