Microsoft bietet unter Windows verschiedene Möglichkeit eMails zu verschicken und zu empfangen. Der direkte Empfang und Versand kann z. B. über die Winsock realisiert werden; oftmals ist dieser Weg allerdings für den Laien sehr umständlich und für kleinere Projekte doch mit zu viel Aufwand verbunden, denn es gibt schließlich einfachere Wege. Einer dieser Wege ist die Nutzung des Outlook-Objekts - diese Möglichkeit kann aber nur genutzt werden, wenn Outlook auch installiert ist, Outlook Express lässt sich hierüber nämlich nicht steuern.

Der einfachste Weg eMails ohne Outlook zu senden und zu empfangen ist das MAPI-Control, und wird - gemäß Microsoft-Aussagen - ab Visual Basic 5.0 zu Verfügung gestellt, allerdings erst ab der Professionell Edition.

 Björn Kirsch  11/2000
 
  Voraussetzungen & Vorbereitungen  voriges Thema [ Top ] nächstes Thema

Um nun die MAPI-Control in eigenen Projekten zu verwenden, muss unter "Projekt -> Komponenten" die Einbindung des "Microsoft MAPI Control 6.0" erfolgen. Weiterhin sind die beiden Objekte "MAPISession" und "MAPIMessages" auf der Form unterzubringen

 
  SessionID, Verbindung & Mails abfragen voriges Thema [ Top ] nächstes Thema
Verbindung herstellen

Im ersten Schritt muss eine Verbindung zum MAPI-Objekt hergestellt werden. Dieser Vorgang wird über:

MAPISession1.SignOn

intialisiert.

Die Session-ID

Jede MAPI-Sitzung bekommt eine eigene Session-ID, damit die Sitzungen voneinander unterschieden werden können und die richtigen Mails verschickt und abgefragt werden können. Die Zuordnung der MAPI-ID erfolgt über folgenden Befehl:

MAPIMessages1.SessionID = MAPISession1.SessionID
Mails abfragen

Jeder Linux-User kennt den FetchMailer. Das mag daher kommen, dass Fetch aus dem Englischen kommt und übersetzt "holen" heißt.

Aufgrund der Tatsache, dass wir mit Step two die SessionID zuordnen, können wir über:

MAPIMessages1.Fetch
die Mails abfragen.
Möchte man nun die Anzahl der Mails wissen, so ist diese Anfrage über:
MAPIMessages1.MsgCount
realisierbar.
 
  Mails ansteuern und auslesen voriges Thema [ Top ] nächstes Thema
Spezielle Mail ansteuern

Soll nun eine spezielle Mails aus dem Folder angezeigt werden, so müssen wir vorher (ähnlich wie bei der Listbox) den Index dieser Mail setzen. Der Index beginnt bei 0 und hört bei MsgCount - 1 wieder auf. Die genaue Zuweisung kann mit:

MAPIMessages1.MsgIndex = (Nummer der Mail - 1)
vorgenommen werden. Die dritte Mail wird also über:
MAPIMessages1.Msgindex = 2

abgefragt.
 
Die angesteuerte Mail auslesen

Es genügt nicht, die Mail anzusteuern. Das Ziel ist es schließlich die Mail auch zu lesen. Hierfür stehen folgende Properties zur Verfügung:

 Property     Beschreibung  
 MAPIMessages1.RecipDisplayName   Empfänger der Nachricht  
 MAPIMessages1.Subject   Nachrichtenbetreff  
 MAPIMessages1.MsgOrigDisplayName   Absender der Nachricht  
 MAPIMessages1.MsgNoteText   Nachrichtentext  
 MAPIMessages1.AttachmentCount   Anzahl der Attachments  
 MAPIMessages1.AttachmentIndex   Nummer des Attachments  
 MAPIMessages1.AttachmentName   Name des Attachments (per Index gesetzt)  
 MAPIMessages1.Read   Zustand der Mail (true = gelesen)  
 
  Mail verfassen & Session beenden voriges Thema [ Top ] nächstes Thema

Eine neue Mail verfassen

MAPIMessages1.Compose
gibt der MAPI die Anweisung eine neue Mail zu verfassen.
Der Empfänger der Mail wird mit
MAPIMessages1.RecipDisplayName = Empfänger (e-Mail-Adresse)

festgelegt, der Nachrichtenbetreff über

MAPIMessages1.MsgSubject = Betreff
gesetzt und der Nachrichtentext kann über
MAPIMessages1.MsgNoteText = Nachrichtentext

definiert werden. Ein Attachment kann hinzugefügt werden, in dem folgende Zeilen zum Code hinzugefügt werden:

MAPIMessages1.AttachmentName = Name des Attachments MAPIMessages1.AttachmentPathName = Pfad + Dateiname_Des_Attachs
Die Empfängeradresse wird über:
MAPIMessages1.ResolveName

geprüft und der Mailversand erfolgt über

MAPIMessages1.Send
Session beenden
Ist man nun zufrieden mit seiner Arbeit und möchte die Session wieder beenden, so darf man nicht vergessen, die MAPI-Session über
MAPISession1.SignOff
wieder freizugeben.
 
  Beispielprojekt voriges Thema [ Top ]
'----------------------------  Form1  --------------------------
Option Explicit

Dim Zaehler As Integer

Private Sub Command1_Click()
  If List1.ListCount > 0 Then
    Load Form2
    MAPIMessages1.MsgIndex = List1.ListIndex
    Form2.Text1 = MAPIMessages1.MsgOrigDisplayName
    Form2.Text2 = MAPIMessages1.MsgSubject
    Form2.Text3 = MAPIMessages1.MsgNoteText
    If MAPIMessages1.AttachmentCount > 0 Then
      For Zaehler = 1 To MAPIMessages1.AttachmentCount
          MAPIMessages1.AttachmentIndex = Zaehler - 1
          Form2.Combo1.AddItem MAPIMessages1.AttachmentName
          Form2.Combo1.ListIndex = 0
      Next Zaehler
    Else
      Form2.Combo1.Enabled = False
    End If
    Form2.Show
  End If
End Sub

Private Sub Command2_Click()
  Load Form3
  Form3.Show
End Sub

Private Sub Form_Load()
  MAPISession1.SignOn
  MAPIMessages1.SessionID = MAPISession1.SessionID
  Call MailsAbrufen
End Sub

Private Sub Form_UnLoad(Cancel As Integer)
  MAPISession1.SignOff
  Unload Me
End Sub

'---------------------------  Form2  --------------------------

Private Sub Form_UnLoad(Cancel As Integer)
  Form2.Hide
  Unload Form2
  Call MailsAbrufen
End Sub

'---------------------------  Form3  --------------------------

Private Sub Command1_Click()
  Form1.MAPIMessages1.Compose
  Form1.MAPIMessages1.RecipDisplayName = Text1.Text
  Form1.MAPIMessages1.MsgSubject = Text2.Text
  Form1.MAPIMessages1.MsgNoteText = Text3.Text
  Form1.MAPIMessages1.ResolveName
  Form1.MAPIMessages1.Send

  Form3.Hide
  Unload Form3
End Sub

Private Sub form3_unload(Cancel As Integer)
  Call MailsAbrufen
End Sub

'---------------------------  Module1  ------------------------

Sub MailsAbrufen()
  Form1.List1.Clear

  Form1.MAPIMessages1.Fetch
  For Zaehler = 1 To Form1.MAPIMessages1.MsgCount
    Form1.MAPIMessages1.MsgIndex = Zaehler - 1
    If Form1.MAPIMessages1.MsgRead = False Then
      Form1.List1.AddItem UCase(Form1.MAPIMessages1.MsgSubject)
    Else
      Form1.List1.AddItem Form1.MAPIMessages1.MsgSubject
    End If
  Next Zaehler
End Sub
Das Beispielprojekt gibt es hier zum Download  ( 10291 )

Startseite | VB/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | VB-/VBA-Forum | VB.Net-Forum | DirectX | DirectX-Forum | Foren-Archiv | VB.Net | Chat | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report

Letzte Aktualisierung: Sonntag, 28. Oktober 2001