Das Mapi-Control
von Björn Kirsch
Einleitung
Verwendung
Microsoft bietet unter Windows verschiedene Möglichkeit E-Mails 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äßt sich hierüber nämlich nicht steuern.
Der einfachste Weg e-Mails ohne Outlook zu senden und zu empfangen ist das MAPI Control. Dieses Control wird - gemäß Microsoft-Aussagen - ab Visual Basic 5.0 zu Verfügung gestellt, allerdings erst ab der Professionell Edition.
Mit freundlichen Grüßen
Björn Kirsch
Dieses Tutorial wurde am 09.11.2004 von Florian Rittmeier ergänzt bzw. korrigiert.
Zu Beginn
Voraussetzungen & Vorbereitungen
Um nun die MAPI Control in eigenen Projekten zu verwenden, muß 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
Verbindung herstellen
Im ersten Schritt muß 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
Mails abfragen
Jeder Linux-User kennt den FetchMailer. Das mag daher kommen, daß Fetch aus dem Englischen kommt und übersetzt "holen" heißt.
Aufgrund der Tatsache, daß wir mit Step two die SessionID zuordnen, können ü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
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 - 1wieder auf. Die genaue Zuweisung kann mit wieder auf. Die genaue Zuweisung kann mit:
MAPIMessages1.MsgIndex = (Nummer der Mail - 1)
vorgenommen wurde. 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.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
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 + DateinameDesAttachs
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 freigeben.
Einfaches Beispiel
'-------------------- Anfang Code 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 '--------------------- Ende Code Form1 --------------------- '-------------------- Anfang Code Form2 -------------------- Private Sub Form_UnLoad(Cancel As Integer) Form2.Hide Unload Form2 Call MailsAbrufen End Sub '--------------------- Ende Code Form2 --------------------- '-------------------- Anfang Code 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 '--------------------- Ende Code Form3 --------------------- '------------------- Anfang Code 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 '-------------------- Ende Code Module1 --------------------
Mails mit Anhang - Beispiel
Das Tutorial wurde am 28.07.2003 um ein Beispiel erweitert. Das folgende Codesnippet zeigt Ihnen das Versenden von Mails mit Anhang (Attachment).
Private Sub Command4_Click() MAPISession1.SignOn With MAPIMessages1 .SessionID = mapSession.SessionID .Compose .MsgSubject = "RMA EasyWin" .RecipDisplayName = "rma@irgendwasa.ch" ' Space(1) ist als Platzhalter notwendig, da die ' Anlage bei der ersten Leerstelle platziert wird. .MsgNoteText = _ Space(1) & vbCrLf & "Hallo Wyscha" & vbCrLf & vbCrLf & _ "Anbei erhalten Sie meine Reparaturaufträge zur Bearbeitung." & _ vbCrLf & vbCrLf & _ "Mit freundlichen Grüssen." & vbCrLf & vbCrLf & _ GetData(aSql:="select b1 from l") & vbCrLf & _ GetData(aSql:="select b2 from l") ' ZIP-Datei als Anhang einfügen Sleep 200 .AttachmentIndex = 0 .AttachmentPosition = 0 .AttachmentName = "RMAs.zip" .AttachmentPathName = "C:\RMAs.zip" ' Mail für evt. Ergänzungen anzeigen .Send vDialog:=True End With End Sub
Korrektur vom 09.11.2004
Entgegen der ursprünglichen Angabe, hat man nicht MAPIMessages1.RecipDisplayName = Empfänger (e-Mail-Adresse) zu verwenden. Dies würde nur in Verbindung mit MAPIMessages1.ResolveName funktionieren, und auch nur dann, wenn sich im Adressbuch ein Eintrag zu Empfänger (e-Mail-Adresse) befinden würde, da ResolveName die Daten von "Empfänger" aus dem Adressbuch sucht.
Wer E-Mails an Personen verschicken möchte, die nicht im Adressbuch enthalten sind, hat dies wie folgt zu bewerkstelligen:
MAPIMessages1.RecipDisplayName = "Max Muster" MAPIMessages1.RecipAddress = "Max@Mustermann.de" MAPIMessages1.RecipType = mapToList
Ergänzung vom 09.11.2004
Wenn die Nachricht an mehr als eine Person geschickt werden soll, so kann man einen weiteren Empfänger wie folgt angeben:
' Einen neuen Empfänger hinzufügen MAPIMessages1.RecipIndex = MAPIMessages1.RecipCount ' Daten angeben MAPIMessages1.RecipDisplayName = "Marina Musterfrau" MAPIMessages1.RecipAddress = "Marina@Musterfrau.de" ' Empfänger auf normale To-Liste setzen MAPIMessages1.RecipType = mapToList
Wenn man der Nachricht noch einen Kopieempfänger hinzufügen will, soll geht dies mit folgendem Code:
' Einen neuen Empfänger hinzufügen MAPIMessages1.RecipIndex = MAPIMessages1.RecipCount ' Daten angeben MAPIMessages1.RecipDisplayName = "Gott" MAPIMessages1.RecipAddress = "EsGibtNurEinenGott@AufDieserWelt.de" ' Empfänger auf CC-Liste setzen MAPIMessages1.RecipType = mapCcList
Und für Blindkopieempfänger wäre da:
' Einen neuen Empfänger hinzufügen MAPIMessages1.RecipIndex = MAPIMessages1.RecipCount ' Daten angeben MAPIMessages1.RecipDisplayName = "Spion" MAPIMessages1.RecipAddress = "Kryptisch@Adresse.de" ' Empfänger auf BCC-Liste setzen MAPIMessages1.RecipType = mapBccList
Download
Projekt als Download [4004 Bytes]
Ihre Meinung
Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 39 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Klaus-Dieter am 22.03.2010 um 10:31
Hallo,
vielen Dank für die hilfreichen Beispiele und Kommentare.
Mein Problem wurde schon in einigen Anfragen beschrieben, aber ich kann keinen Lösungshinweis hierzu finden.
Mail soll ja laut Beschreibung ohne Outlook funktionieren.
Beim Aufruf von SignOn wird in einer Box der Benutzername, Passwort und Domaine abgefragt. Wie kann ich dies umgehen?
Im weiteren Verlauf wird beim Abrufen von Mails bei der Zuweisung des MsgIndex eine Outlook-Box geöffnet, in der nach einer Bestätigung für den Zugriff auf die in Outlook gespeicherten E-Mail Adressen gefragt wird.
Wie kann dies umgangen werden?
Ich möchte die Verarbeitung von Mails automatisieren, ohne interaktive Eingaben.
Für Hinweise wäre ich dankbar.
Mfg
Weger
Kommentar von André am 23.07.2008 um 15:30
Hallo,
erstmal super Tut, nur hab ich ein kleines Problem das gute Stück ins VS 2005 zu konvertieren, dort gibt es den Load befehl nicht mehr...
Kommentar von Peter Dambrowsky am 30.06.2008 um 18:03
Hallo,
Ich habe folgendes Problem:
Sobald ich eine Mail aus VB6 per MAPI versenden möchte, kommt sinngemäß eine Meldung von Outlook "Ein Programm versucht auf Ihre in Outlook gespeicherten Daten zuzugreifen.... Erlaubnis erteilen / Verweigern". Wenn positiv bestätigt wird, wird die Mail auch verschickt, nur die Meldung ist störend. Kann ich diese Meldung irgendwie per Programm umgehen?
MfG
Peter Dambrowsky
Kommentar von Khyal am 06.03.2008 um 08:06
Hallo Kollegen,
Ich finde Ihre Seite hervorragend.
Mfg
Khyal
Kommentar von Wilfried Wabnitz am 21.02.2008 um 09:45
Das Mapi-Control:
Wie können Unterordner des Posteingangs angesprungen werden?
MfG
Wilfried
Kommentar von Verena am 31.10.2007 um 17:49
Hallo zusammen!
Das mit dem versenden würde bei mir vermutlich schon klappen! nur wird hierfür Outlook Express verwendet. Ich greife jedoch über Citrix (Terminal Server) auf Microsoft Outlook zu. Wie kann ich das noch handeln?
Kann mir hier vielleicht jemand helfen?!
Generell würde es funktionieren weil ich testweise eben ein Konto in Outlook Express angelegt habe, nur soll meine Anwandung dann eben für diese Terminal Server Outlook Clients gelten.
Wäre super wenn ihr ne Lösung hättet.
Dankeschön
Kommentar von Eberhard Wiethoff am 23.08.2007 um 13:30
Hier eine Lösung für manche Probleme
Voraussetzungen & Vorbereitungen
Um nun die MAPI Control in eigenen Projekten zu verwenden,
muß unter "Projekt|Komponenten" die Einbindung des "Microsoft MAPI Control 6.0" erfolgen.
Weiterhin sind die beiden Objekte "MAPISession" und "MAPIMessages" auf der Form unterzubringen.
Function Mail_senden_MAPI(strAn As String, strCC As String, strBetr As String, strInhalt As String, ByVal strSendedateien As String) As Boolean
'bei strAn können mehrere E-Mail Adressen angegeben werden -- immer getrennt durch ";"
'bei strCC können mehrere E-Mail Adressen angegeben werden -- immer getrennt durch ";"
'bei strSendedateien können mehrere Dateien angegeben werden -- immer getrennt durch ";"
'Startform ist hier das Formular auf dem sich die Objekte "MAPI Session" und MAPIMessages befinden -- muss bei anderem Formularnamen getauscht werden
Dim i As Integer
Dim j As Integer
Dim strPfad As String
Dim strDatei As String
Dim strExtension As String
On Error GoTo errorhandler
If strAn <> "" And Right(strAn, 1) <> ";" Then strAn = strAn & ";"
If strCC <> "" And Right(strCC, 1) <> ";" Then strCC = strCC & ";"
If strSendedateien <> "" And Right(strSendedateien, 1) <> ";" Then strSendedateien = strSendedateien & ";"
Mail_senden_MAPI = True
With Startform
.MAPISession1.SignOn
With .MAPIMessages1
.SessionID = Startform.MAPISession1.SessionID
.Compose
.MsgSubject = strBetr
'Anzahl der Anlagen
j = 1
i = 0
Do While j > 0
j = InStr(j + 1, strSendedateien, ";")
If j > 0 Then i = i + 1
Loop
.MsgNoteText = Space(i) & vbCrLf & strInhalt ' entsprechend der Anzahl der Anlagen werde Leerzeichen am Anfang des Textes eingefügt
.MsgIndex = -1
Do While strAn <> ""
If InStr(1, strAn, ";") > 0 Then
.RecipIndex = .RecipCount
.RecipAddress = Left(strAn, InStr(1, strAn, ";") - 1)
strAn = Right(strAn, Len(strAn) - InStr(1, strAn, ";"))
.RecipType = mapToList
.ResolveName
End If
Loop
Do While strCC <> ""
If InStr(1, strCC, ";") > 0 Then
.RecipIndex = .RecipCount
.RecipAddress = Left(strCC, InStr(1, strCC, ";") - 1)
strCC = Right(strCC, Len(strCC) - InStr(1, strCC, ";"))
.RecipType = mapCcList
.ResolveName
End If
Loop
' Anlagen anfügen
i = 0
Do While strSendedateien <> ""
If InStr(1, strSendedateien, ";") > 0 Then
.AttachmentIndex = i
.AttachmentPosition = i
.AttachmentPathName = Left(strSendedateien, InStr(1, strSendedateien, ";") - 1)
FileSplit Left(strSendedateien, InStr(1, strSendedateien, ";") - 1), strPfad, strDatei, strExtension
.AttachmentName = strDatei & "." & strExtension
.AttachmentType = 0
strSendedateien = Right(strSendedateien, Len(strSendedateien) - InStr(1, strSendedateien, ";"))
i = i + 1
End If
Loop
.Send (True)
End With
End With
Ende:
Startform.MAPISession1.SignOff
Exit Function
errorhandler:
Mail_senden_MAPI = False
Select Case Err.Number
Case Is = 32001
MsgBox Err.Description, vbOKOnly, "Abbruch des E-Mail Versands"
Case Else
MsgBox Err.Description, vbOKOnly, "Fehler beim E-Mail Versand"
End Select
Resume Ende
End Function
Kommentar von Jochen Schuster am 05.07.2007 um 12:06
Ergaenzung: Im folgenden Abschnitt des Beispiels steht dieser Code: .Send vDialog:=True.
Wenn man jetzt nach dem Anzeigen der Mail einfach abbricht (also nicht auf 'Abschicken' drueckt), generiert VB einen Fehlerkode '32001'. Den kann man mit folgender Ergaenzung unterdruecken:
Am Anfang des Kodes:
On Error Goto err_fehler
Am Ende:
err_fehler:
If Err = 32001 Then Resume Next
Gruss aus Norwegen, JS
Kommentar von herbert lang am 18.06.2007 um 17:54
verwendung des mapi-controls zeigt der ausführungspfad auf jenen des jeweil verwendeten Mailprogrammes (z.b. Outlook Express)
dateien auf welche in anwenderprogramm ohne explicite Pfadangabe verwiesen wird (z.b. .\daten.mdb) werden nach der Mapi-Verwendung nicht mehr gefunden.
darauf könnte man den autor hinweisen
lg
herbert lang
Kommentar von Andreas am 24.05.2007 um 23:14
Hi,
kann man irgendwie das Absendekonto angeben.
Angenommen, man hat im Mailprogramm (hier SeaMonkey) mehrere Konten konfiguriert, zB
1) Konto_1@EinProvider.de
2) Konto_2@AndererProvider.de
Mit der im Tutorial beschriebenen Vorgehensweise gehen standardmäßig alle Mails via dem Konto (1) raus.
Kann man das irgendwie vor dem Senden auswählen?
Kommentar von jogi am 24.05.2007 um 12:44
Hallo,
wie kann ich eine E-Mail an Outlook übergeben die dann auch noch zeitversetzt versendet wird? Also das Makro soll einen Wert (Datum mit Uhrzeit) an Outlook übergeben und Outlook diese Mail dann zu dieser Zeit versenden?
DAnke
gruß Jogi
Kommentar von Ulrich Distel am 07.03.2007 um 10:23
Zuerst: das Tutorial ist super!
Folgende Fragen:
Ich will aus meiner Datenbank heraus auf die E-Mails zugreifen und anschließend in der Datenbank speichern.
Wenn Outlook noch nicht geöffnet ist, kommt die Meldung: "Microsoft Office Outlook: Der Profilname ist ungültig, geben Sie einen gültigen Namen an". Wenn der angegeben wird ("Outlook") geht es ganz normal weiter. Kann ich diese Meldung umgehen?
Sobald aber auf die Mails tatsächlich zugegriffen wird, kommt eine Meldung von Outlook "Ein Programm versucht auf Ihre in Outlook gespeicherten Daten zuzugreifen.... Erlaubnis erteilen / Verweigern". Kann ich diese Meldung umgehen?
Wie kann ich Mails löschen?
Herzlichen Dank für Ihre Mühen
Ulrich Distel
Kommentar von wolfgang am 16.12.2006 um 01:22
Form1.MAPISession1.SignOn
Form1.MAPIMessages1.SessionID = Form1.MAPISession1.SessionID
Form1.MAPIMessages1.Compose
Form1.MAPIMessages1.RecipDisplayName = Text1.Text
Form1.MAPIMessages1.MsgSubject = Text2.Text
Form1.MAPIMessages1.MsgNoteText = Text3.Text
Form1.MAPIMessages1.ResolveName
'MAPIMessages1.AttachmentName = Name des Attachments
'MAPIMessages1.AttachmentPathName = Pfad + Dateiname_Des_Attachs
' MAPIMessages1.AttachmentName = "readme.txt"
'MAPIMessages1.AttachmentPathName = "C:\readme.txt"
Form1.MAPIMessages1.AttachmentIndex = 0
Form1.MAPIMessages1.AttachmentPosition = 0
Form1.MAPIMessages1.AttachmentName = "readme.txt"
Form1.MAPIMessages1.AttachmentPathName = "C:\readme.txt"
Form1.MAPIMessages1.AttachmentIndex = 1
Form1.MAPIMessages1.AttachmentPosition = 1
Form1.MAPIMessages1.AttachmentName = "readme1.txt"
Form1.MAPIMessages1.AttachmentPathName = "C:\readme1.txt"
Form1.MAPIMessages1.Send
Form3.Hide
Unload Form3
End Sub
alls gut
Kommentar von Damian am 25.09.2006 um 19:20
Hallo ich habe auf ein system eine Outlook laufen, ich habe in den telefon buch sehr viele empfänger ca so um die 100 stück. Nun Habe ich eure geilen mail system gefunden. Ich dachte so ich benutze die für newsleters. Nun wollte ich fragen, wäre es nicht möglich dass das Programm die email adressen aus den bereits bestehenden WAB.exe holen tue? Wäre sehr dankbar, auf ein antwort. PS. Ich könnte das wohl im code rein programieren, aber die leute ändern sich immer, manche tragen sich aus, manche wieder nicht.
MFG Damian
Kommentar von cristian am 31.08.2006 um 23:36
Hola, tengo una gran curiosidad de como poder hacer de ke con VB6.0 se conecte a otra bandeja dentro de lo ke es outlook o como dar la opcion. ya ke necesito concectarme para poder hacer esto en MAPI y poder trabajar con otra bandeja.
y lo otro como puedo hacer para ke me contabilice ke tengo correo nuevos, para diferenciar los antiguas de los nuevos, ami solo me falta hacer ke me cuente los correos no mas para enmarcarlos.
Kommentar von Bernd Gudd am 02.05.2006 um 05:44
Attachments:
Wie kann man mehr als ein Attachment anhängen?
Bekomme mit
With MAPIMessages1
' Neue Nachricht
.Compose
' 1. Anlage hinzufügen
.AttachmentIndex = 0
.AttachmentPathName = "d:\anlage1.txt"
' 2. Anlage hinzufügen
.AttachmentIndex = 1
.AttachmentPathName = "d:\anlage2.txt"
' 3. Anlage hinzufügen
.AttachmentIndex = 2
.AttachmentPathName = "d:\anlage3.txt"
' Nachricht versenden
.Send
von VB -> unbekannter Fehler.
Vielen Dank im Voraus für die Hilfe.
Bernd
Kommentar von Matthias am 13.01.2006 um 16:30
Hallo,
kann mir jemand erklären wie ich das mit den Objekte "MAPISession" und "MAPIMessages" (s.u.) machen muß, wenn ich ich Word heraus eine Formular per mail versenden möchte?
...Zu Beginn
Voraussetzungen & Vorbereitungen
Um nun die MAPI Control in eigenen Projekten zu verwenden, muß unter "Projekt|Komponenten" die Einbindung des "Microsoft MAPI Control 6.0" erfolgen. Weiterhin sind die beiden Objekte "MAPISession" und "MAPIMessages" auf der Form unterzubringen.
Kommentar von Lars Künzelmann am 12.01.2006 um 17:06
Hallo,
ich habe ein ähnliches Problem wie Joachim.
Ich habe in Outlook 3 verschieden E-Mail Konten, möchte aber via VB von einem bestimmten Konto aus die E-mail versenden.
Ist das möglich und wenn ja wie ?
Vielen Dank !
Super Seite.
Kommentar von Joachim Ochs am 20.12.2005 um 17:11
Hallo, die Seite hat mir schon sehr geholfen.
Mein Problem ist aber:
Ich habe in Outlook mehrere Konten und möchte, dass über das Mapi-Objekt nur ein bestimmtes Konto abgefragt wird. Ist das über VB möglich?
Viele Grüße
Joachim Ochs
Kommentar von Markus Gerhard am 20.12.2005 um 14:50
Hi,
schönes tutorial - hilfreich für alle, die die mapi einbinden möchten. was muss man ändern, wenn man über latebindings arbeitet? ich habe die mapi-controls nicht eingebunden, sondern verweise mittels CreateObject("mapi.session") darauf. leider scheinen dann einige befehle nicht mehr zu funzen. zz kämpfe ich damit anhänge zu versenden. ein einfaches ersetzen des controlnamens durch das objekt reicht da nämlich nicht :-(
Kommentar von Markus Franz am 11.10.2005 um 16:01
Hallo!
Als Erstes einmal vielen Dank für dieses schöne Tutorial! Nun habe ich aber noch eine Frage. Ich möchte einen Newsletter versenden. Den html Quellcode für den Newsletter habe ich. Gibt es die Möglichkeit die Emails mit den MAPI Controls zu erstellen und zu verschicken?
Ich bin am Zweifeln, ob das klappt, denn mit diesem Tutorial habe ich folgende Methode kennengelernt:
MAPIMessages1.MsgNoteText = Nachrichtentext
Mit der ich, wenn ich das richtig verstanden habe Text Emails erstellen / versenden kann. Ich stelle mir das so vor: Eine Lösung, mit der ich der zu versendenden email "sagen" kann: "Hier ist dein html Quellcode!"
Die Empfänger der Emails sollen keine Änderungen an der Mail vornehmen dürfen.
Alles in Allem: Wie kann ich Emails mit HTML Inhalt erstellen / versenden?
Vielen Dank für Eure Hilfe!
Kommentar von Klaus-Peter Schwarz am 09.09.2005 um 16:33
Habe leider auch das Problem mit dem Auslesen aus Unterordner. Ist es mit der Mapi möglich und hat schon einer so eine Möglichkeit gefunden?
Gruss Peter
Kommentar von Heinz Wienhoven am 01.09.2005 um 09:29
Hallo Zusammen,
ich habe den Code mit VB5 ausprobiert. Unter Win98 klappt das einwandfrei. Unter WinXP oder Win2000 bekomme ich folgende Fenster:
Microsoft Mail Solange Sie offline sind, können .... keine senden.
Mit OK bedstätigt kommt ein Eingabefenster "Choose Profile" und man soll den Profil Namen eingeben.
Danach wird man aufgefordert, Postoffice, Postfach und Kennwort einzugeben.
Mit Outlook werden auf den Rechnern Mails bearbeitet.
Kann mir hier jemand raten, wie ich unter WinXP und Win2000 das zum laufen bringe?
Danke
Heinz Wienhoven
Kommentar von Gabi am 05.07.2005 um 10:35
Super Tutorial!
Ich möchte eine Mail an mehrere Empfänger schicken. Allerdings erhalte ich immer eine Fehlermeldung. Woran liegt das?
Private Sub Command1_Click()
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
MAPIMessages1.Compose
MAPIMessages1.RecipIndex = 0
MAPIMessages1.RecipAddress = "empfänger1@test.com"
MAPIMessages1.RecipType = mapToList
MAPIMessages1.RecipIndex = 1
MAPIMessages1.RecipAddress = "empfänger2@test.com"
MAPIMessages1.RecipType = mapToList
MAPIMessages1.MsgSubject = Text2.Text
MAPIMessages1.MsgNoteText = Text3.Text
MAPIMessages1.ResolveName
MAPIMessages1.Send
Hide
Unload Form3
End Sub
Kommentar von Christian Stepper am 06.06.2005 um 10:05
Wie kann man eine Mail zeitversetzt senden?
Kommentar von Hanky am 27.05.2005 um 17:32
>> Welche Möglichkeiten gibt es um eine eMail
>> unbeaufsichtigt d.h. ohne Benutzerrückfrage
>> zu versenden?
Versuche:
send False
(anstatt:
send True
Der recipient etc. muss dann natürlich vorher definiert werden ...)
HTH, Hanky
http://www.voip-sip.de
Kommentar von Hanky am 27.05.2005 um 17:28
>> Ich versuche verzweifelt einen Anhang an eine Mails
>> zu binden.
Möglicherweise weil Du
AttachmentName
nicht deklarierst?
AttachmentName = Dateiname ohne Pfad
AttachmentPathName = kompletter Pfad incl.(!) Dateiname
Grüße, Hanky
http://www.voip-sip.de
Kommentar von Maxe am 27.04.2005 um 10:26
Hallo erst mal zusammen.
Ich versuche verzweifelt einen Anhang an eine Mails zu binden. Solang ich keinen Anhang definiere funktioniert alles SUPER, nur sobald ich die Befehle
.AttachmentIndex = 0
.AttachmentPosition = 0
.AttachmentPathName = "C:\temp\Test__2005_Feb_21.Q001"
mit einbinde, und dann senden will kommt immer eine Fehlermeldung.
"Ein nicht näher angegebener Fehler ist aufgetreten"
Err.Number=32002
Die Datei ist definitiv vorhanden
Ich hoffe ihr könnt mir helfen, bin schon am verzweifeln.
Gruß
Maxe
Kommentar von Anfaenger_michael am 18.02.2005 um 14:01
Moin moin,
mein Problem ist eigentlich, das obwohl ich in der
ListView mehrere Dateien angewählt habe immer nur
eine als Attachement in der Mail angezeigt wird.
Ich habe schon mit
.AttachmentIndex = 0
.AttachmentPosition = 0
expermimentiert (jeweils um 1 erhöht).
Leider ohne Erfolg !
Wo bitte mache ich den Fehler ??
Danke.
Gruss
Michael
Den Tip habe ich von hier:
http://www.activevb.de/tutorials/tut_mapi/mapi.html#anchor1
Private Sub Command1_Click()
MAPIMessages1.Compose
With MAPIMessages1
.SessionID = MAPISession1.SessionID
.Compose
.MsgSubject = "RMA EasyWin"
.RecipDisplayName = "rma@irgendwasa.ch"
' Space(1) ist als Platzhalter notwendig, da die
' Anlage bei der ersten Leerstelle platziert wird.
.MsgNoteText = _
Space(1) & vbCrLf & "Hallo Wyscha" & vbCrLf & vbCrLf & _
"Anbei erhalten Sie meine Reparaturaufträge zur Bearbeitung." & _
vbCrLf & vbCrLf '& _
For Each Item In ListView1.ListItems '11.02.2003
If Item.Checked Then
ProTabDatei$ = Item.Text 'Item.SubItems(3)
AttaIndex = AttaIndex + 1
End If
.AttachmentIndex = 0
.AttachmentPosition = 0
.AttachmentName = ProTabDatei$ '"RMAs"
.AttachmentPathName = ProTabDatei$ '"C:\assets.gif"
Next
' Mail für evt. Ergänzungen anzeigen
.Send vDialog:=True
.Save
End With
End Sub
Kommentar von JUKOM am 10.02.2005 um 09:41
Hallo,
gute Erklärung des MAPI! Danke.
Welche Möglichkeiten gibt es um eine eMail unbeaufsichtigt d.h. ohne Benutzerrückfrage zu versenden?
Für Hilfe wäre ich sehr dankbar
mfG
JUKOM
Kommentar von Otto Färber am 29.12.2004 um 17:41
Guten Tag,
erstmal meinen Respekt, tolles Forum.
Das E-Mailprojekt kann ich sehr gut gebrauchen.
Nur noch ein Problem.
Auf meinem PC ist Outlook installiert.
Ihr Projekt greift auf mein bestehendes Outlook konto zu.
Neue Mails werde im VB Projekt erst geladen wenn sie
zuvor im Outlook empfangen wurden.
Im VB Projekt steht ja auch nirgendwo wo der Mailserver sitzt.
Oben ist beschrieben mann kann mit mapi auch ohne outlook
mails senden und empfangen.
Was mache ich falsch ?
Für Hilfe wäre ich sehr dankbar
mfg
Otto
Kommentar von Martin am 23.12.2004 um 12:01
Hi!
Ich hätte eine Frage:
Dieses Beispiel greift auf den Posteingang zu, wie kann ich das selbe mit anderen Ordnern machen?
Ich wünsch euch allen frohe Weihnachten!
lg, Martin
Kommentar von Michael. am 11.11.2004 um 18:58
Gibt es einen guten MAPI Ersatz ohne Steuerelement/DLL in VB?
Kommentar von Holger Jürgensen am 01.09.2004 um 07:31
Hallo Leute,
kann man eigendlich auch den Ordner ändern aus dem die Mails via VB6 geholt werden sollen? Oder ist das in VB6 hart kodiert als INBOX.
Kommentar von Michael am 14.08.2004 um 19:08
Hi, also bei mir gibt es die Steuerelementklasse nicht! Woran kann das liegen?
Kommentar von Elmar am 15.03.2004 um 23:06
hallo,
bin auch gerade beim ausprobieren von MAPI. und auch bei mir kommt auf meinem produktionsrechner beim senden mit anhang der fehler 32002. auf dem entwicklungsrechner passiert das nicht, obwohl auf den produktionsrechner auch VB installiert ist.
was ich festgestellt habe, daß es genau beim senden zum fehler kommt, sobald ein anhang dran ist.
kann jemand weiterhelfen?
Kommentar von Jan - Hendrik M. am 22.02.2004 um 17:08
Hallo !!
schönes Tutorial aber leider läuft bei mir die Beispielanwendung nicht. Es kommt zu einem Fehler Nr 32002 'Ein nicht näher angegebener Fehler ist aufgetreten' bei der Fetch Methode und bei der ResolveName Methode. Woran könnte das liegen ??? Muss ISS installiert sein ???
Kommentar von TomDraeger am 11.12.2003 um 21:12
Ich habe die Attachment-Funktion wie oben in Benutzung.
Wenn mann jetzt mehrere Atts anhängt gelingt dies erfolgreich, jedoch wird in der Mail nur vom letzten Anhang das richtige Icon angezeigt (alle anderen haben dieses "ich-weiß-nicht-was-du-bist" Icon.
Weiß jemand eine Lösung ???
Kommentar von Bürgermeier am 03.12.2003 um 13:02
Gute Seite, eine Frage:
wie speicher ich einen Anhang ab, den ich wie oben von einer Mail erhalten habe ?
Ziel:
Datenbankanwendung, Abfrage nach neuen Mails, wenn neue Mail dann:
Texte auslesen in eine Datei schreiben und in Datenbank verwalten.
Anhänge auf ein festes Laufwerk sichern.
sprich :
save AttachmentName as x:\Mail1.zip
Ist das möglich ?