我正在尝试转换一些Python代码,以便在.Net网站中使用。代码检索以RFC822格式存储的消息,并再次使用以下方法将消息发送到SMTP服务器:
mail from: blah blah
rcpt to: blah blah
data
<send the text from the RFC822 file here>
.因此,不需要解析RFC822文件(幸运的是!)。在Python中,这只是:
smtp = smtplib.SMTP(_SMTPSERVER)
smtp.sendmail(_FROMADDR, recipient, msg)其中文件已被读入变量msg中。在C#中有什么简单的方法可以做到这一点吗?
内置的C# SMTP对象没有提供这样的方法,或者至少我还没有找到一种方法。它们似乎是基于建立一个MailMessage的原则,分别提供地址、主题和正文。SmtpClient有一个Send(string, string, string, string)方法,但是这同样需要一个独立的主题和主体,所以我想它为您构造了RFC822格式的消息。
如果必要的话,我可以写我自己的类来发送邮件。这是一个如此简单的要求,不会花很长时间。但是,如果有一种方法使用标准库,那么它们可能比我的代码更少buggy。
发布于 2014-09-25 10:27:54
你说得对,内置的东西不能解决这个问题。
我的建议是编写一些代码,使用TcpClient和StreamReader / StreamWriter与SMTP服务器交互。它不需要超过50行代码。
发布于 2014-09-27 00:45:43
我建议使用MimeKit解析消息文件,然后使用MailKit通过SMTP发送。MailKit基于MimeKit,因此它们很好地结合在一起,MailKit的SmtpClient优于System.Net.Mail的实现。
解析消息非常简单,如下所示:
var message = MimeMessage.Load (fileName);发送消息就像以下几行一样简单:
using (var client = new SmtpClient ()) {
client.Connect ("smtp.gmail.com", 465, true);
client.Authenticate ("username", "password");
client.Send (message);
client.Disconnect (true);
}发布于 2020-03-04 17:03:06
这很容易做到,您只需从nuget安装MailKit和MimeKit即可。请注意,如果您不需要身份验证,将"useSsl“设置为false是不够的,它不起作用。您需要设置MailKit.Security.SecureSocketOptions.None
var message = MimeMessage.Load("pathToEml");
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
client.Connect("smtp.yourserver.yourdomain", 25, MailKit.Security.SecureSocketOptions.None); //set last param to true for authentication
//client.Authenticate("username", "password");
client.Send(message);
client.Disconnect(true);
}https://stackoverflow.com/questions/26036195
复制相似问题