在开发应用程序时,经常需要发送电子邮件或短信。然而,可能会遇到以下障碍:
本文将介绍一些解决这些问题的替代方案。这些替代方案可能已经听说过,也可能没有。为了简洁,本文只描述这些替代方案的工作原理,不提供源代码或可执行演示,但会提供相关文章的链接,这些文章包含源代码或可执行演示。
可能知道,当连接到SMTP服务器时,可以提供登录凭据(例如用户名和密码)来授权/认证自己。这允许发送邮件到任何地方。这是邮件客户端用于检索POP3或IMAP邮件并通过SMTP发送邮件的方式。然而,用于应用程序开发或命令行使用的独立SMTP工具通常不提供使用授权时连接到SMTP服务器的示例。此外,这些工具中有一半或更多不包括提供登录凭据进行授权的选项,这意味着可能只能发送邮件到组织内(不能发送外部邮件)。这些工具假设不需要授权。
注意:使用SMTP授权可能会危及邮件账户,因为一些工具使用/要求以未加密的明文形式提供登录凭据。例如,需要在命令行或文本配置文件中提供账户信息。因此,请谨慎使用。
由于有很多SMTP工具,其中一些支持SMTP授权,本文不提供这样的工具。但提供了一些参考链接。在构建应用程序时,遵循SMTP协议(或其RFC规范),包括SMTP认证/授权的选项,或者使用支持此类支持的SMTP库。如果使用.NET,库中已经包含了所有内容,只需要将其实现到应用程序中(参见参考链接,特别是第一个链接)。
可以在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(邮件)服务器查找。然后,可以直接连接到这些SMTP服务器发送邮件。由于目标在这些服务器的域/组织内,因此不需要认证。这种方法可能存在一些安全和道德问题,可能仍然会被阻止发送邮件,但这是另一种替代方案。
没有很多工具使用这种方法。包含了一个Windows命令行工具(带有Visual C++ 7.0的源代码),它使用这种方法,基于以下参考链接中的第一个链接的代码。这个工具需要Windows 2000或更高版本,一次只能发送1封邮件。该工具也可能不支持Unicode,因为没有正确编写工具,尽管它应该可以很好地处理ASCII格式的英文。代码只是一个Windows控制台或命令行可执行文件包装器,用于参考文章中提到的主要代码片段。有关这个工具的代码的详细信息,请下载并查看源代码以及参考文章链接。如果有人实现了COM/ActiveX DLL包装器到该代码(不熟悉构建COM应用程序)就好了。
示例基于构建的工具。可执行文件位于可以从本文下载的Visual C++ 7.0项目的Bin/Release目录下。示例只显示了一个用例。可以指定更多的选项。
mxmail "fromName" from@addr.com to@addr.com "subject" -t "message"
可以将短信作为短电子邮件发送(长消息可能会被截断)。为此,通过SMTP发送一封正常的短电子邮件,但发送到以下模式的地址:
phoneNumber@carrierDomain.com
例如:
xxxxxxxxxx@vmobl.com
这可能也需要SMTP邮件替代方案,因为可能会发送到外部电子邮件地址。这种方法很容易做到,但需要知道运营商短信网关电子邮件地址格式。可以在以下URL参考链接中找到这些,或者搜索类似"运营商短信网关"的内容。
使用SMTP库或工具通过电子邮件发送短信(参见本文中的SMTP替代方案)。但必须首先进行运营商到网关电子邮件地址的转换 - 这应该很容易做到。要获取一些转换映射,请在Web上搜索或尝试以下参考链接。
示例基于构建的工具。可执行文件位于可以从本文下载的Visual C++ 7.0项目的Bin/Release目录下。示例只显示了一个用例。示例假设已经完成了转换。
mxmail "fromName" from@addr.com 2105211202@vmobl.com "subject" -t "message"
有很多网站允许发送短信。它们为做了艰苦的工作。只需填写表单并点击发送等。不需要知道运营商的短信网关电子邮件地址格式。只需要知道目的地电话号码,可能还需要知道该电话号码的运营商。其中一些服务是免费的,一些不是。有些工作得很好,有些则不是。
为了更好地利用这些网页表单,可以以以下方式破解它们:让应用程序将数据转发到网页表单,或者让应用程序直接将数据提交到表单的处理脚本(绕过表单本身,使用自己的表单等)。使用后一种方法,可以对表单处理脚本进行HTTP POST请求。
使用此类破解可能违反服务的服务条款。而且,服务可能会更改服务,这将需要更新代码。