我正在尝试转换一些用于.Net网站的Python代码。该代码检索以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格式的消息。
如果有必要,我可以编写自己的课程来发送邮件。这是一个如此简单的要求,它不会花费很长时间。但是,如果有一种方法可以使用标准库,那么它们可能比我的代码更少。
答案 0 :(得分:2)
我建议使用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);
}
答案 1 :(得分:1)
你是对的,内置的东西并没有为此提供解决方案。
我的建议是简单地编写一些使用TcpClient和StreamReader / StreamWriter与SMTP服务器交互的代码。它不需要超过50行代码。
答案 2 :(得分:1)
这很容易做到,您只需要从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);
}