首页 > 解决方案 > MailMessage 只接受带有@domain 的发件人

问题描述

我在 .NET 中编写了一个代码来在我的应用程序中发送电子邮件:

氧气 + ASP.Net:

    mensagem:=MailMessage.Create(configemail[1],toUsers);
    mensagem.Subject:=title;
    mensagem.Body:=body;
    mensagem.IsBodyHtml:=IsBodyHtml;

当 configemail[1] 类似于“myemail@gmail.com”时,这可以正常工作。但是,我需要在不使用域的情况下发送电子邮件,例如“myemail”。我收到此错误:

指定的字符串不是电子邮件地址所需的格式

我相信会发生这种情况,因为代码验证变量是否在字符串中有@anydomain。

我是否能够覆盖它,并让用户尝试在其地址中不使用“@domain”的情况下发送电子邮件?

标签: asp.netemailpascalmailmessage

解决方案


据我所知,SMTP 要求所有收件人邮箱都有域部分。您可能能够通过其他协议与特定的邮件系统进行交互,这些协议允许您仅与本地邮箱进行交互,但您不应该期望SMTP工具成为这样做的手段。

根据RFC 5321

在 SMTP 中使用域名时,仅允许可解析的完全限定域名 (FQDN) ... 需要 FQDN 的规则有两个例外

保留的邮箱名称“postmaster”可以在没有域限定的 RCPT 命令中使用

这反过来又将我们引向了RCPT 命令的语法:

rcpt = "RCPT TO:" ( "<Postmaster@" Domain ">" / "<Postmaster>" /
              Forward-path ) [SP Rcpt-parameters] CRLF

因此,唯一可用的普遍适用的形式是Forward-Path,它通过几跳(在这里忽略一些对您没有帮助的遗留选项)将我们引向Mailbox语法:

Mailbox        = Local-part "@" ( Domain / address-literal )

因此,无论哪种方式,您都必须拥有@然后您的选择归结为域名或 IP 地址。请注意,这可能会给我们一个机会——您可以通过将地址指定为myemail@127.0.0.1.


推荐阅读