背景:我们有一个用asp-classic和asp.net 编写的内部 Intranet 系统- iis服务器没有安装php(在 php 中看到了一些漂亮的解决方案,例如这样,但我们不能真正使用这些。) - 我们需要显示给我们的用户在他们的 imap 邮箱中有多少未读邮件。他们的 imap 邮箱内部托管在运行 postfix 和 dovecot imap 的 linux 机器上。
我的问题: 如何通过 .net(vb 或 c#)中的 Dovecot Imap 连接到 Postfix 邮件系统并确定未读邮件的数量?
我已经尝试过: 我们使用了Limilabs 邮件 dll和以下内容:
Imports System.Net.Security
Imports System
Imports Limilabs.Mail
Imports Limilabs.Client.IMAP
Imports Limilabs.Client
Function RetrieveUnread(_server, _user, _password)
Using imap As New Limilabs.Client.IMAP.Imap
'#### Handler needed because of self signed certificates
RetrieveUnread = vbNull
AddHandler imap.ServerCertificateValidate, AddressOf ValidateCertificate
imap.ConnectSSL(_server)
Try
imap.Login(_user, _password)
Catch ex As Exception
RetrieveUnread = "Failed to login"
End Try
If CStr(RetrieveUnread) <> "Failed to login" Then
imap.SelectInbox()
Dim uids As List(Of Long) = imap.Search(Flag.Unseen) 'Find all unseen messages.
'Console.WriteLine("Number of unseen messages is: " & CStr(uids.Count))
RetrieveUnread = CStr(uids.Count)
End If
imap.Close()
End Using
End Function
Private Sub ValidateCertificate(ByVal sender As Object, ByVal e As ServerCertificateValidateEventArgs)
Const ignoredErrors As SslPolicyErrors = SslPolicyErrors.RemoteCertificateChainErrors Or SslPolicyErrors.RemoteCertificateNameMismatch ' name mismatch
Dim nameOnCertificate As String = e.Certificate.Subject
If (e.SslPolicyErrors And Not ignoredErrors) = SslPolicyErrors.None Then
e.IsValid = True
Return
End If
e.IsValid = False
End Sub
然而,虽然这种方法有效,但这种方法依赖于第三方,如果许可没有到位/不是最新的并且对于我们需要做的事情来说过于臃肿,DLL 将失败。我们只是好奇这是否可以在本机 .net 代码中完成。