发送电子邮件的最简单方法是什么?

13 delphi email

我想从我的Delphi程序发送一封简单的电子邮件.更具体地说,如果我的程序遇到异常,我想提供通过用户提供的任何指定电子邮件地址发送错误的选项,当然能够为任何情况发送电子邮件本身都是有益的.能够发送附件是一种奖励,但不是必需的.

我尝试了许多在线发现的例子,但大多数似乎没有用.其中一些需要参数,如SMTP服务器等,但如果我的用户可以自由输入自己的电子邮件地址,我的程序如何确定?另外我没有在我的电脑上安装默认的电子邮件客户端,所以如果我无法从我的程序发送电子邮件,那么我相信使用我的程序的任何人都会遇到同样的问题.

基本上我要问的是:

  • 如何发送电子邮件
  • 附件不是必需的,但会有其优点
  • 如何处理SMTP服务器,端口号等事情?
  • 如果未安装默认电子邮件客户端,则如何处理此问题

我希望我的帖子很容易理解.

谢谢

Mas*_*ler 5

如果您希望程序在发生异常时向您发送电子邮件,您应该查看MadExcept.它会自动为您完成,并包含完整的堆栈跟踪和其他有用的调试信息.


Cos*_*und 3

我将从可能的解决方案开始,然后解释为什么这些替代方案充其量是有问题的:

可能的解决方案

  • 不要从客户端计算机发送电子邮件,而是使用 Web 服务来传递消息。无论您的网站采用何种技术,它都可以处理发布的表单并发送电子邮件。只需将用户的问题发布到您的网络服务,然后让您的网络服务使用电子邮件将其发送给您或将其保存到数据库中。如果用户认为他已连接到 Internet,他可能会这么说,因为他的浏览器可以工作,但这仅表明 HTTP 正在工作:SMTP 可能被公司防火墙或 ISP 阻止。这是我的首选解决方案。
  • 使用您的SMTP 服务器和您的凭据发送电子邮件。从用户的地址发送电子邮件是非常不可靠的。您可以将用户的电子邮件地址包含在“回复”标头中,或者直接将其放入邮件正文中。您可以使用 Indy 组件来完成此操作,因为它是您的 SMTP 服务器和您的凭据,您知道所有详细信息。正如上一个项目符号中所提到的,这可能会失败,因为 SMTP 可能被用户的防火墙或 ISP 的防火墙阻止。

关于 SMTP

首先简单介绍一下 SMTP 协议本身,因为其他一切都是基于此:

  • SMTP 是发送电子邮件的协议还有其他特定于实现的协议,但所有电子邮件服务器都需要实现 SMTP。
  • SMTP 是在 SPAM 之前设计的。它允许任何计算机向任何服务器发送电子邮件。发送电子邮件(理论上)绝对不需要身份验证,并且服务器的 SMTP 服务器地址作为 MX 记录存储在 DNS 中。
  • SMTP 本身绝对不包含对发件人进行身份验证的方法,也不会尝试检查用户是否确实是“发件人”字段中的用户。

从用户的电子邮件地址发送电子邮件有什么问题

从用户地址发送电子邮件时的第一个选项是使用本地安装的客户端和自动化,这样他们就会看到一个已填写完毕的 Outlook(或 Firefox 或其他)电子邮件表单,只需单击“发送”即可。但您说您希望您的解决方案即使在没有安装本地电子邮件的情况下也能正常工作,因此这不是一个选项。

您提到您希望实现这一目标,要求用户提供她的电子邮件地址,不需要服务器详细信息,并且我假设不需要用户名和密码。SMTP 协议实际上允许这样做,因为它没有内置机制来验证发件人的身份。垃圾邮件发送者充分利用了这一点,这被称为“欺骗发件人地址”。为了防止这种情况发生,发生了两件事:

  • SMTP 主机不再接受来自任何人的电子邮件,它们尝试以某种方式对发送 SMTP 服务器进行身份验证。换句话说,您的SMTP 服务器将拒绝您发送给自己的虚假电子邮件!建议的解决方案是使用 SMTP 中继。但是之后...
  • SMTP 中继不再中继来自未知用户的电子邮件!SMTP 本身不提供任何身份验证机制,但通常的解决方法是首先读取电子邮件(因为该部分确实需要身份验证),然后再发送电子邮件。这是由您可能使用的发送 SMTP 组件自动完成的,但这仍然需要用户名和密码。

如果这还不够,请换一种方式考虑:您是否期望知道您的电子邮件地址的任何人都能够从您的电子邮件地址发送电子邮件?