背景: 我們已經寫在asp-classic和asp.net的內部網系統 - 可是沒有安裝php的iis服務器(看在PHP一些漂亮的解決方案,如this但我們無法真正使用這些) - 我們需要向用戶展示他們在他們的imap郵箱中有多少封未讀郵件。他們的imap郵箱在內部託管在運行postfix和dovecot imap的Linux機器上。獲取.NET IMAP未讀電子郵件計數,而臃腫的第三方庫
我的問題: 如何將一個通過達夫科特連接的imap到Postfix郵件系統在.NET(VB或C#),並確定未讀郵件的數量?
我已經嘗試過: 我們使用Limilabs mail 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代碼完成。
''RECENT''可能不是特別有用,特別是當他們的郵件被其他連接訪問時。你可以做一個'SEARCH UNREAD',並計算響應,這可能更接近OP的要求。 – Max
@Max我認爲它是'SEARCH UNSEEN'而不是'SEARCH UNREAD'。否則,你是對的。 – sloth
你是對的,對不起:) – Max