asp.net - 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”的情况下发送电子邮件?
解决方案
据我所知,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
.
推荐阅读
- vue.js - 方法“watch”在组件定义中具有类型“object”。您是否正确引用了该函数?
- android - 如何检查 Jetpack Compose UI 测试中是否选择了单选按钮?
- angular - 如何从角度数组中的重复项中挑选一个对象?
- sql - 按顺序获取特定系列值
- reactjs - 有没有办法将 useVirtual 与 Material-UI Select 集成
- linq - Azure Cosmos DB .NET v3 Linq WHERE 条件为空结果
- c# - 使用 Linq 根据条件过滤对象列表
- angular - 如何使用 cypress-image-snapshot 而不在每次测试时生成新的屏幕截图?
- c# - How can I convert blob image from database to html image src
- spring - 有人可以帮我启动我的 Spring Boot 应用程序吗?进入循环,不再继续