我正在使用现有的System.Net.Mail.MailMessage进行测试,除了使用MimeKit的DkimSigner和MailKit的Smtp客户端之外,还支持MimeKit直接转换为MimeMessage。
我收到“'MimeKit.ParserOptions'的类型初始化程序引发异常。”使用堆栈跟踪提及'在MimeKit.MimeMessage.CreateFromMailMessage(MailMessage消息)'
还有一个Inner Excpetion:“'MimeKit.Utils.CharsetUtils'的类型初始值设定项引发异常。” Stacktrace:'在MimeKit.ParserOptions..ctor()在MimeKit.ParserOptions..cctor()
我的开发框没有任何异常,但只执行转换和签名而不是实际的smtp发送。
Dim netMail As New System.Net.Mail.MailMessage
netMail.From = New System.Net.Mail.MailAddress("no_reply@lionandlambchurch.com")
netMail.To.Add(txtTo.Text)
netMail.Subject = txtSubject.Text
netMail.Body = txtContent.Text
Dim mimeMail As MimeMessage = CType(netMail, MimeMessage)
Dim headersToSign = New List(Of HeaderId)
headersToSign.Add(HeaderId.From)
headersToSign.Add(HeaderId.To)
headersToSign.Add(HeaderId.Subject)
headersToSign.Add(HeaderId.Date)
Dim privateKeyPath = AppDomain.CurrentDomain.BaseDirectory + "\App_Data\rsa.private"
Dim signer = New Cryptography.DkimSigner(privateKeyPath, "lionandlambchurch.com", "key1")
Dim loggerPath = AppDomain.CurrentDomain.BaseDirectory + "\logs\smtp-mailkit.log"
mimeMail.Sign(signer, headersToSign, Cryptography.DkimCanonicalizationAlgorithm.Relaxed, Cryptography.DkimCanonicalizationAlgorithm.Simple)
' Don't attempt sending locally
If Request.Url.Host.ToLower().Contains("localhost") Then Return
Using client As New MailKit.Net.Smtp.SmtpClient(New ProtocolLogger(loggerPath))
client.Connect("relay-hosting.secureserver.net", 25, False)
If chkAuthenticate.Checked Then
client.Authenticate("no_reply@lionandlambchurch.com", "****")
End If
client.Send(mimeMail)
client.Disconnect(True)
End Using
答案 0 :(得分:0)
基于异常,错误发生在转换过程中,而不是发送。
由于某些原因,MimeKit.ParserOptions的静态构造函数失败,因为MimeKit.Utils.CharsetUtils的静态构造函数失败。
看看MimeKit的代码,我能想到的是你的服务器没有UTF-8或Latin1支持。
e.g。 System.Text.Encoding.GetEncoding (65001, new EncoderExceptionFallback (), new DecoderExceptionFallback ());
或Encoding.GetEncoding (28591, new EncoderExceptionFallback (), new DecoderExceptionFallback ());
正在抛出异常。
老实说,我不知道怎么会发生这种情况。
您在服务器上使用的是什么.NET?
答案 1 :(得分:0)
有同样的问题,我通过在Visual Studio中打开NuGet控制台并安装最新的 System.Text.Encoding.CodePages 包解决了这个问题:
install-Package System.Text.Encoding.CodePages