Member 13336882 Ответов: 2

Получение электронных писем с помощью IMAPX VB.NET


Я старался следить за этой статьей

То, что я пытаюсь сделать, - это получить электронную почту с помощью IMAPX.Проблема в том, что когда я создаю класс для обработки всех функций с помощью этого кода :

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports ImapX
Imports ImapX.Collections
Imports System.Windows

Namespace ImapPackage

    Class ImapService

        Private Shared Property client As ImapClient

        Public Shared Sub Initialize()
            client = New ImapClient("imap.gmail.com", True)
            If Not client.Connect() Then
                Throw New Exception("Error connecting to the client.")
            End If
        End Sub

        Public Shared Function Login(ByVal u As String, ByVal p As String) As Boolean
            Return client.Login(u, p)
        End Function

        Public Shared Sub Logout()
            If client.IsAuthenticated Then
                client.Logout()
            End If

            MainWindow.LoggedIn = False
        End Sub

        Public Shared Function GetFolders() As List(Of EmailFolder)
            Dim folders = New List(Of EmailFolder)()
            For Each folder In client.Folders
                folders.Add(New EmailFolder With {.Title = folder.Name})
            Next

            client.Folders.Inbox.StartIdling()
            client.Folders.Inbox.OnNewMessagesArrived += AddressOf Inbox_OnNewMessagesArrived
            Return folders
        End Function

        Private Shared Sub Inbox_OnNewMessagesArrived(ByVal sender As Object, ByVal e As IdleEventArgs)
            MessageBox.Show($"A new message was downloaded in {e.Folder.Name} folder.")
        End Sub

        Public Shared Function GetMessagesForFolder(ByVal name As String) As MessageCollection
            client.Folders(name).Messages.Download()
            Return client.Folders(name).Messages
        End Function
    End Class
End Namespace


Исключение, которое я получаю :

1 • Тип папки электронной почты не определен
2 • публичное событие OnNewMessageArrived as EventHandler(Of IdleEVentArgs) является событием и не может быть вызвано напрямую.Используйте оператор RaiseEvent

2-я проблема не так уж серьезна, но как я могу исправить 1-ю ? Что я упускаю ?

Что я уже пробовал:

Все, что я пробовал, упоминается в посте выше .

2 Ответов

Рейтинг:
6

Richard Deeming

Для второй проблемы ваш преобразованный код немного выключен. VB.NET использование Добавитьобработчик[^] чтобы подключить обработчики событий, а не += синтаксис, который использует C#.

AddHandler client.Folders.Inbox.OnNewMessagesArrived, AddressOf Inbox_OnNewMessagesArrived


Рейтинг:
20

Jochen Arndt

Вы уже спрашивали в статье форум (Создание пользовательского почтового клиента в WPF с использованием языка C#[^]).

Пожалуйста, будьте немного терпеливы. Я думаю, что автор ответит (он все еще активен в CP, но может не входить в систему ежедневно). Он также получает уведомление по электронной почте о вашем посте на форуме, чтобы он знал об этом.

Тем не менее, EmailFolder класс определяется в Домашняя страница.язык XAML.в CS:

class EmailFolder
{
    public string Title { get; set; }
}
Таким образом, вы должны создать соответствующий VB.Чистый класс или просто использовать String вместо.