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.
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
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:
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:
'---------------------------- Form1 --------------------------
Option ExplicitDim Zaehler As IntegerPrivate 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 ThenFor Zaehler = 1 To MAPIMessages1.AttachmentCount
MAPIMessages1.AttachmentIndex = Zaehler - 1
Form2.Combo1.AddItem MAPIMessages1.AttachmentName
Form2.Combo1.ListIndex = 0
Next Zaehler
Else
Form2.Combo1.Enabled = FalseEnd If
Form2.Show
End IfEnd SubPrivate Sub Command2_Click()
Load Form3
Form3.Show
End SubPrivate Sub Form_Load()
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
Call MailsAbrufen
End SubPrivate 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 IfNext Zaehler
End Sub