关于vb.net:”MimeKit.ParserOptions”的类型初始值设定项引发了异常

The type initializer for 'MimeKit.ParserOptions' threw an exception

除了使用MimeKit的DkimSigner和MailKit的Smtp客户端外,我还使用现有的System.Net.Mail.MailMessage进行测试,并带有MimeKit的支持以直接转换为MimeMessage。

我正在获取"'MimeKit.ParserOptions'的类型初始值设定项引发异常"。在堆栈跟踪中提到"在MimeKit.MimeMessage.CreateFromMailMessage(MailMessage消息)"

还有一个内部例外情况:"'MimeKit.Utils.CharsetUtils'的类型初始值设定项引发了异常。" Stacktrace:'位于MimeKit.ParserOptions..cctor()的MimeKit.ParserOptions..ctor()

我的开发箱上没有任何异常,但仅执行直到转换并签名,而不是实际的smtp发送。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    Dim netMail As New System.Net.Mail.MailMessage
    netMail.From = New System.Net.Mail.MailAddress("[email protected]")
    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\
sa.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("[email protected]","****")
        End If
        client.Send(mimeMail)
        client.Disconnect(True)
    End Using


有同样的问题,我通过在Visual Studio中打开NuGet控制台并安装了最新的System.Text.Encoding.CodePages包来解决了此问题:

install-Package System.Text.Encoding.CodePages


基于异常,错误是在转换过程中发生的,不是发送错误。

由于某些原因,MimeKit.ParserOptions的静态构造函数失败,因为MimeKit.Utils.CharsetUtils的静态构造函数失败。

查看MimeKit的代码,我能想到的就是您的服务器不支持UTF-8或Latin1。

例如System.Text.Encoding.GetEncoding (65001, new EncoderExceptionFallback (), new DecoderExceptionFallback ());Encoding.GetEncoding (28591, new EncoderExceptionFallback (), new DecoderExceptionFallback ());引发异常。

老实说,我什至不知道怎么可能。

您在服务器上使用什么.NET?