从<>发送电子邮件null发件人地址

时间:2015-04-20 11:05:55

标签: c# .net powershell smtp

Send-MailMessage
 -From "from@example.com"
 -To "to@example.com"
 -Subject "Subject" `
 -SmtpServer "localhost" -Body "Test Message"

我使用Send-MailMessage发送电子邮件,PowerShell相当于使用System.Net.Mail.MailMessage。

有没有办法从空发件人地址发送电子邮件?如果没有,我可以使用任何powershell / .NET替代品。

From是必需的,所以不能省略。 null,""等等是不可接受的,因为Send-MailMessage验证from是一个电子邮件地址。


<> Null sender address&#34;发件人地址是接收有关投放问题的电子邮件的电子邮件地址(邮件列表会更改此内容但不会更改From:电子邮件标题,以便他们而非人员发送给他们,获取有关交付问题的消息)。一个特殊的空发件人地址(MAIL FROM:&lt;&gt;)用于表示没有人关心,也不应发送退回通知。自己发送退回邮件时会使用空发件人,有时也会在其他时间使用。<#34;

2 个答案:

答案 0 :(得分:1)

您不能使用SmtpClient和MailMessage执行此操作,因此使用此或Send-MailMessage是不可能的。不幸的是,这意味着您要么找到支持它的第三方库,要么自己编写代码直接通过SMTP发送。

您可能最好通过单元测试来测试系统的这一部分。

答案 1 :(得分:0)

使用telnet手动

open localhost 25

HELO Foo
MAIL FROM: <>   <--- the null address

自动化。

实际上并不是完整的工作代码,但应该给人一般的印象GetFile和SmtpStream都是流。解决方案是通过直接与SMTP协议交互来提供预先创建的.eml文件。

        GivenAClientIsConnectedToAnAgentInTheWAITINGState();

        SmtpStream.WriteAsciiString("MAIL FROM:<>{0}", Environment.NewLine);
        SmtpStream.ReceiveAsAsciiString();

        SmtpStream.WriteAsciiString("RCPT TO:<{0}>{1}",mailboxAddress, Environment.NewLine);
        SmtpStream.ReceiveAsAsciiString();

        SmtpStream.WriteAsciiString("DATA{0}", Environment.NewLine);
        SmtpStream.ReceiveAsAsciiString();
        SmtpStream.SendEmail(_fileRepository.GetFile("NullSenderMessage.eml"));
        SmtpStream.SendDataTerminator();
        SmtpStream.ReceiveAsAsciiString();
        SmtpStream.WriteAsciiString("QUIT");