0

Ich beziehe mich auf einen früheren Post irgendwo in der Vergangenheit (vgl Hyperlink). Ich konnte keine Kommentare hinzufügen, und ich habe auch nicht erwogen, eine Antwort zu schreiben, da sich mein Problem leicht unterscheidet. Bitte entschuldigen Sie, wenn ich im falschen Abschnitt gepostet oder einen neuen Thread zu diesem Thema eröffnet habe, ich bin noch neu in diesem Forum.Mit IMAP in VB.Net Mails von MS Exchange Server abzurufen

Bitte lassen Sie mich das folgende Problem veranschaulichen: Ähnlich wie post möchte ich auf E-Mails und Anhänge von einem MS Exchange Server zugreifen und abrufen. Ich habe hauptsächlich den Code verwendet, der oben im Hyperlink angegeben wurde, aber ich konnte keine Verbindung zum Mail-Server herstellen (ich habe den Port 587 benutzt). Meiner Meinung nach war es eine erfolgreiche Verbindung, aber der Code stoppt, wenn die folgende Zeile erreicht

Dim Read_Stream2 = New StreamReader(Sstream) 

Zu sagen, dass der Datenstrom nicht gelesen werden kann.

Ich habe auch eine Frage zu dieser bestimmten Linie, da ich nicht herausfinden kann, warum es notwendig ist, den NetworkStream in einen SslStream und dann in ein StreamReader-Objekt zu konvertieren. Könnte jemand bitte diese Notwendigkeit erklären?

Wie für das übrige Problem, beachten Sie bitte meinen Code so weit unten. Wenn es mit IMAP zu umständlich wäre, würde ich auch gerne Hinweise dazu bekommen, wie man dieses Ziel mit POP3 erreichen kann. Vielen Dank im Voraus für jede Hilfe zur Verfügung gestellt.

Imports System.Net.Sockets 
Imports System.IO 
Imports System.Text 
Imports System.Net.Security 

Public Class emailDownloader 

Dim ServerNm As String 
Dim UsrNm As String 
Dim PassStr As String 
Dim _IntPort As Integer 
Dim ImapClient As New Net.Sockets.TcpClient 
Dim NetworkS_stream As NetworkStream 
Dim m_sslStream As SslStream 
Dim Read_Stream As StreamReader 
Dim StatResp As String 
Dim m_buffer() As Byte 

Function Login(ByVal Sstream As SslStream, ByVal Server_Command As String) 
    ImapClient = New TcpClient(ServerNm, _IntPort) 
    NetworkS_stream = ImapClient.GetStream 'Read the stream 

    Sstream = New SslStream(NetworkS_stream) 

    Dim Read_Stream2 = New StreamReader(Sstream) 
    Server_Command = Server_Command ' + vbCrLf 
    m_buffer = System.Text.Encoding.ASCII.GetBytes(Server_Command.ToCharArray()) 
    Sstream.Write(m_buffer, 0, m_buffer.Length) 
    Dim Server_Reponse As String 
    Server_Reponse = Read_Stream2.ReadLine() 
    Return Server_Reponse 

End Function 

Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click 
    lbMailsRetrieved.Items.Clear() 
    ServerNm = tbServerName.Text 
    _IntPort = tbPortName.Text 
    UsrNm = tbUserName.Text 
    PassStr = tbPasswort.Text 
    StatResp = Login(m_sslStream, "LOGIN " + UsrNm + " " + PassStr + " ") & vbCrLf 
    lbMailsRetrieved.Items.Add(StatResp) 
End Sub 

End Class

Es gab eine Lösung zunächst in C# programmiert, die here gefunden werden kann. Ich habe den Code ein wenig modifiziert und es funktioniert für den Austausch (und nur das).

Imports Microsoft.Exchange.WebServices.Data 
Imports System.Collections.Generic 
Imports System.ComponentModel 
Imports System.Data 
Imports System.Drawing 
Imports System.Linq 
Imports System.Net.Sockets 
Imports System.Text 
Imports System.Threading.Tasks 
Imports System.Windows.Forms 


Namespace ReadMailFromExchangeServer 

Public Class Form1 
    Inherits Form 
    Private exchange As ExchangeService 

    Public Sub New() 
     InitializeComponent() 
     lstMsg.Clear() 
     lstMsg.View = View.Details 
     lstMsg.Columns.Add("Date", 150) 
     lstMsg.Columns.Add("From", 250) 
     lstMsg.Columns.Add("Subject", 400) 
     lstMsg.Columns.Add("Has Attachment", 50) 
     lstMsg.Columns.Add("Id", 100) 

     lstMsg.FullRowSelect = True 
    End Sub 

    Private Sub btnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click 
     ConnectToExchangeServer() 
     'Dim ts As New TimeSpan(0, -1, 0, 0) 
     'Dim [date] As DateTime = DateTime.Now.Add(ts) 
     'Dim filter As New SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, [date]) 

     If exchange IsNot Nothing Then 
      Dim findResults As FindItemsResults(Of Item) = exchange.FindItems(WellKnownFolderName.Inbox, New ItemView(50)) 
      'Original 
      'Dim findResults As FindItemsResults(Of Item) = exchange.FindItems(WellKnownFolderName.Inbox, filter, New ItemView(50)) 
      For Each item As Item In findResults 

       Dim message As EmailMessage = EmailMessage.Bind(exchange, item.Id) 
       Dim listItem As New ListViewItem({message.DateTimeReceived.ToString(), _ 
             message.From.Name.ToString() + _ 
             "(" + message.From.Address.ToString() + ")", _ 
             message.Subject, (If((message.HasAttachments), "Yes", "No")), _ 
             message.Id.ToString()}) 
       lstMsg.Items.Add(listItem) 
      Next 
      If findResults.Items.Count <= 0 Then 

       lstMsg.Items.Add("No Messages found!!") 
      End If 
     End If 

    End Sub 

    Public Sub ConnectToExchangeServer() 

     lblMsg.Text = "Connecting to Exchange Server.." 
     lblMsg.Refresh() 
     Try 
      exchange = New ExchangeService(ExchangeVersion.Exchange2007_SP1) 
      exchange.Credentials = New WebCredentials("abc", "xyz") 
      exchange.AutodiscoverUrl("efg") 

      lblMsg.Text = "Connected to Exchange Server : " + exchange.Url.Host 

      lblMsg.Refresh() 
     Catch ex As Exception 
      lblMsg.Text = "Error Connecting to Exchange Server!!" + ex.Message 
      lblMsg.Refresh() 
     End Try 

    End Sub 

    Private Sub btnLoadAttachment_Click(sender As Object, e As EventArgs) Handles btnLoadAttachment.Click 
     If exchange IsNot Nothing Then 
      If lstMsg.Items.Count > 0 Then 
       Dim item As ListViewItem = lstMsg.SelectedItems(0) 

       If item IsNot Nothing Then 
        Dim msgid As String = item.SubItems(4).Text.ToString() 
        Dim message As EmailMessage = EmailMessage.Bind(exchange, New ItemId(msgid)) 
        If message.HasAttachments AndAlso TypeOf message.Attachments(0) Is FileAttachment Then 
         Dim fileAttachment As FileAttachment = TryCast(message.Attachments(0), FileAttachment) 
         'Change the below Path    
         fileAttachment.Load("C:[my_path]" + fileAttachment.Name) 
         lblAttach.Text = "Attachment Downloaded : " + fileAttachment.Name 
        Else 
         MessageBox.Show("No Attachments found!!") 
        End If 
       Else 
        MessageBox.Show("Please select a Message!!") 
       End If 
      Else 
       MessageBox.Show("Messages not loaded!!") 

      End If 
     Else 
      MessageBox.Show("Not Connected to Mail Server!!") 
     End If 
    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) 

    End Sub 


    Private Sub InitializeComponent() 
     Me.btnRead = New System.Windows.Forms.Button() 
     Me.lstMsg = New System.Windows.Forms.ListView() 
     Me.btnLoadAttachment = New System.Windows.Forms.Button() 
     Me.lblMsg = New System.Windows.Forms.Label() 
     Me.label1 = New System.Windows.Forms.Label() 
     Me.lblAttach = New System.Windows.Forms.Label() 
     Me.SuspendLayout() 
     ' 
     'btnRead 
     ' 
     Me.btnRead.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None 
     Me.btnRead.FlatStyle = System.Windows.Forms.FlatStyle.Flat 
     Me.btnRead.Location = New System.Drawing.Point(39, 284) 
     Me.btnRead.Name = "btnRead" 
     Me.btnRead.Size = New System.Drawing.Size(174, 23) 
     Me.btnRead.TabIndex = 0 
     Me.btnRead.Text = "Read Mails" 
     Me.btnRead.UseVisualStyleBackColor = True 
     ' 
     'lstMsg 
     ' 
     Me.lstMsg.Location = New System.Drawing.Point(27, 70) 
     Me.lstMsg.Name = "lstMsg" 
     Me.lstMsg.Size = New System.Drawing.Size(664, 191) 
     Me.lstMsg.TabIndex = 1 
     Me.lstMsg.UseCompatibleStateImageBehavior = False 
     ' 
     'btnLoadAttachment 
     ' 
     Me.btnLoadAttachment.FlatStyle = System.Windows.Forms.FlatStyle.System 
     Me.btnLoadAttachment.Location = New System.Drawing.Point(517, 284) 
     Me.btnLoadAttachment.Name = "btnLoadAttachment" 
     Me.btnLoadAttachment.Size = New System.Drawing.Size(174, 23) 
     Me.btnLoadAttachment.TabIndex = 2 
     Me.btnLoadAttachment.Text = "Load Attachments" 
     Me.btnLoadAttachment.UseVisualStyleBackColor = True 
     ' 
     'lblMsg 
     ' 
     Me.lblMsg.AutoSize = True 
     Me.lblMsg.Location = New System.Drawing.Point(36, 361) 
     Me.lblMsg.Name = "lblMsg" 
     Me.lblMsg.Size = New System.Drawing.Size(38, 13) 
     Me.lblMsg.TabIndex = 3 
     Me.lblMsg.Text = "Ready" 
     ' 
     'label1 
     ' 
     Me.label1.AutoSize = True 
     Me.label1.Location = New System.Drawing.Point(24, 54) 
     Me.label1.Name = "label1" 
     Me.label1.Size = New System.Drawing.Size(82, 13) 
     Me.label1.TabIndex = 4 
     Me.label1.Text = "Today's Messages" 
     ' 
     'lblAttach 
     ' 
     Me.lblAttach.AutoSize = True 
     Me.lblAttach.Location = New System.Drawing.Point(514, 361) 
     Me.lblAttach.Name = "lblAttach" 
     Me.lblAttach.Size = New System.Drawing.Size(148, 13) 
     Me.lblAttach.TabIndex = 5 
     Me.lblAttach.Text = "No attachmment downloaded" 
     ' 
     'Form1 
     ' 
     Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 
     Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 
     Me.ClientSize = New System.Drawing.Size(812, 591) 
     Me.Controls.Add(Me.lblAttach) 
     Me.Controls.Add(Me.label1) 
     Me.Controls.Add(Me.lblMsg) 
     Me.Controls.Add(Me.btnLoadAttachment) 
     Me.Controls.Add(Me.lstMsg) 
     Me.Controls.Add(Me.btnRead) 
     Me.Name = "Form1" 
     Me.Text = "Form1" 
     Me.ResumeLayout(False) 
     Me.PerformLayout() 

    End Sub 
    Friend WithEvents btnRead As System.Windows.Forms.Button 
    Friend WithEvents lstMsg As System.Windows.Forms.ListView 
    Friend WithEvents btnLoadAttachment As System.Windows.Forms.Button 
    Friend WithEvents lblMsg As System.Windows.Forms.Label 
    Friend WithEvents label1 As System.Windows.Forms.Label 
    Friend WithEvents lblAttach As System.Windows.Forms.Label 
End Class 

End Namespace

+0

vergessen zu erwähnen, dass der Code oben nicht IMAP zu verwenden ist, aber es ist die Arbeit erledigt hätte. – Sasquatch

Antwort

0

Für die Ausgabe am Anfang beschrieben, stellt die vorliegende Code eine Lösung. Daher möchte ich dies als Antwort markieren und diesen Thread schließen (ich weiß, normalerweise sollte man ihre eigene Antwort nicht als Antwort markieren). Hoffe, dieser Ansatz ist in Ordnung. Vielen Dank für Ihre Hilfe.

Verwandte Themen