X-Headerline mit VB im Outlook hinzufügen/löschen

Hallo an die Experten

Ich habe da ein kleines Problem

Ich möchte in eine in VB erstelltes E-mail zusätzlich einen entsprechende Header Zeile einfügen. Bzw möchte ich auch d auf dem umgekehrten Weg gehen und diese entsprechende Header Zeile auslesen können. Habe aber keine wirkliche Idee wie das gehen könnte.

Zu Veranschaulichung habe ich einfach mal Muster der beiden Funktionen geschrieben. An Den Stellen wo die Kommentare drinstehen soll dann entsprechen die X-Header Zeile eingefügt werden oder aber auch ausgelesen werden.

Public Function Test_Email_Bereitsetellen() As Long
Dim o_outlook As Outlook.Application
Dim o_mail As Outlook.MailItem

Dim s_to As String
Dim s_Betreff As String
Dim s_Body As String
Dim s_x_headerline As String

Set o_outlook = New Outlook.Application
Set o_mail = o_outlook.CreateItem(olMailItem)

s_to = „[email protected]
s_Betreff = „was auch immer“
s_Body = „Der Body was auch immer alles da stehen soll“

s_x_headerline = „X-MyProgramm: XXXXX“

o_mail.To = s_to
o_mail.Subject = s_Betreff
o_mail.Body = s_Body

'------------------------------------
'X-Headerzeile in das E-mail einfügen
'------------------------------------
'o_mail.??? = s_x_headerline

o_mail.Display
End Function

Public Function Test_Email_auslesen() As Long
Dim o_outlook As Outlook.Application
Dim o_mail As Outlook.MailItem
Dim o_Folder As Outlook.MAPIFolder
Dim o_Email As Outlook.MailItem
Dim i As Long
Dim y As Long

Dim s_to As String
Dim s_Betreff As String
Dim s_Body As String
Dim s_x_headerline As String

Set o_outlook = New Outlook.Application
Set o_mail = o_outlook.CreateItem(olMailItem)

For i = 1 To o_outlook.GetNamespace(„MAPI“).Folders.count
If InStr(1, o_outlook.GetNamespace(„MAPI“).Folders.Item(i).Name, „Postfach -“) > 0 Then
y = i
Exit For
End If
Next i
On Error Resume Next
Set o_Folder = o_outlook.GetNamespace(„MAPI“).Folders.Item(y).Folders(„Posteingang“)

For Each o_Email In o_Folder.Items
s_Body = o_Email.Body
s_Betreff = o_Email.Subject

'------------------------------------
'X-Headerzeile aus dem E-mail auslesen
'------------------------------------
's_x_headerline = o_Email.??? („X-MyProgramm“)

If s_x_headerline = „XXXXX“ Then
'weitere verarbeitung
End If
Next
End Function

Verwendet wird Outlook 2003 und VB 6.0 und die MSOUTL.OLB ist verlinkt. Weiters sollen nach Möglichkeit keinen zusätzlichen Libraries verwendet werden und wenn’s nicht anders geht dann sollen die zumindest nicht kostenpflichtig ein

Mit freundlichen Grüßen
Andreas

Ich möchte in eine in VB erstelltes E-mail zusätzlich einen
entsprechende Header Zeile einfügen. Bzw möchte ich auch d auf
dem umgekehrten Weg gehen und diese entsprechende Header Zeile
auslesen können. Habe aber keine wirkliche Idee wie das gehen
könnte.

Hi Andreas,

was ist denn eine Header Zeile?

Ich kenne nur An, CC, Bcc, Betreff und das Textfeld in meinem OL 2000.

Gruß
Reinhard

Hallo Reinhard

Ich hab dir mal einen Kompletten E-Mail Header rauskopiert und die persönlichen Daten mit xxx überschreiben

Microsoft Mail Internet Headers Version 2.0
Received: from xx.xx.at ([xx.xx.xx.xx]) by xx.xx.xx with Microsoft SMTPSVC(5.0.2195.6713);
 Tue, 15 Jul 2008 15:34:58 +0200
Received: from xx.xx.com (xx.xx.com [xx.xx.xx.xx])
 by xx.xx.at (8.12.11/8.12.11) with ESMTP id m6FDYFBj025574;
 Tue, 15 Jul 2008 15:34:16 +0200
Received: from xx.xx.com (unknown [127.0.0.1])
 by xx.xx.com (Symantec Mail Security) with ESMTP id 8841410C8E;
 Tue, 15 Jul 2008 15:34:14 +0200 (CEST)
X-AuditID: d94fd684-ad5c4bb000000a41-8a-487ca755e3de
Received: from xx.xx.xx.xx.com (xx.xx.xx.com [xx.xx.xx.xx])
 by xx.xx.com (Symantec Mail Security) with ESMTP id 4D4B810B74;
 Tue, 15 Jul 2008 15:34:13 +0200 (CEST)
Received: from xx.xx.xx.xx.com ([xx.xx.xx.xx]) by xx.xx.xx.xx.com with Microsoft SMTPSVC(6.0.3790.3959);
 Tue, 15 Jul 2008 15:34:12 +0200
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----\_=\_NextPart\_001\_01C8E67F.77BF37DF"
Subject: Was auch immer hier Stehen muß
Date: Tue, 15 Jul 2008 15:33:59 +0200
Message-ID: 
In-reply-to: 
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: was auch immer da Stehen muß
Thread-Index: AcjigcWr5juZcM3GSNWbpgv7a77dswD/SFyg
References: 
From: "Name" 
To: "Name" ,
 "Name" 
Cc: "Name" ,
 "Name" ,
 "Name" ,
 "Name" 
X-OriginalArrivalTime: 15 Jul 2008 13:34:12.0890 (UTC) FILETIME=[78052FA0:01C8E67F]
X-Brightmail-Tracker: AAAAAA==
X-Virus-Scanned: by amavisd-new
Return-Path: [email protected]
X-TM-AS-Product-Ver: SMEX-7.0.0.1345-5.5.1027-16032.007
X-TM-AS-Result: No--21.927900-8.000000-31

Und dort wirst du sehen das es Zeilen gibt die Mit X-… beginnen das Sind normal Zeilen die von Vieren Scannern / oder den E-Mail Clients hinterlassen werden Und die Versionsnummer wieder geben.

Genauso eine Zeile Möchte ich Mit meinem VB Programm erstellen / bzw. Diese Zeilen auslesen können.

Normalerweise werden solche Zeilen von den E-mail Clienten nicht angezeigt

Mit freundlichen Grüßen
Andreas Auer

Hallo Andreas,

Ich hab dir mal einen Kompletten E-Mail Header rauskopiert und
die persönlichen Daten mit xxx überschreiben

Alles klar, danke.

Ich fand im Internet dies:

/t/mit-vba-den-header-einer-email-auslesen/1717871

aber es läuft bei mir nicht, Vielleicht fehlt noch ein Verweis, k.A.
Fehler: Benutzerdefinierter Typ nicht definiert bei Mapi.session.

Ich fand auch diesen Code von einem Frank, da läuft der Code, aber das Ergebnis ist nicht das gesuchte, Verweis auf MS Outlokk x.0 object library setzen! (die If Ucase… hab ich rausgenommen damit überhaupt was geschrieben wird.)

Sub GrapIext()
' An den Absender Anpassen!!!
 Const strAbsenderName As String = "[email protected]"
 ' Ende "An den Absender Anpassen!!!"
 Dim objOutlook As Outlook.Application
 Dim objnSpace As Outlook.NameSpace
 Dim objFolder As Outlook.MAPIFolder
 Dim objMsg As Object
 Dim objItem As Outlook.MailItem
 Dim intCounter As Integer, intCount As Integer, iRow As Integer
 Dim ws As Worksheet
 Dim sText As String
 Application.ScreenUpdating = False

 Set objOutlook = CreateObject("Outlook.Application")
 Set objnSpace = objOutlook.GetNamespace("MAPI")
 Set objFolder = objnSpace.GetDefaultFolder(olFolderInbox)
 intCount = objFolder.Items.Count
 If intCount \> 0 Then
 Set ws = ActiveSheet
 iRow = 1
 For intCounter = 1 To intCount
 Set objMsg = objFolder.Items(intCounter)
 If objMsg.Class = olMail Then
 Set objItem = objMsg
 STOP
 ' Hier Objekt "objItem" ansehen!!!
 If UCase(objItem.SenderName) = UCase(strAbsenderName) Then
 iRow = iRow + 1
 ws.Cells(iRow, 1).Value = objItem.Body
 End If
 End If
 Next intCounter
 Set ws = Nothing
 End If
 Set objnSpace = Nothing
 Set objFolder = Nothing
 Set objMsg = Nothing
 Set objOutlook = Nothing
End Sub

Gruß
Reinhard

Hallo Reinhard

/t/mit-vba-den-header-einer-email-auslesen/1717871

aber es läuft bei mir nicht, Vielleicht fehlt noch ein
Verweis, k.A.
Fehler: Benutzerdefinierter Typ nicht definiert bei
Mapi.session.

Hast die CDO.DLL eingebunden?

Das Beispiel läuft schon nur sollte die Email nur über einen Exchange Server gelaufen sein dann hat die irgendwie keinen Header und dann kommt es zu einem Fehler aber auslesen kannst damit zumindest den E-Mail Header und damit kann ich aus die von Mir gesuchte Zeile finden.

Das andere Beispiel geht am Thema vorbei Liest j nur den Body von E-Mail mit bestimmten Absender aus

Jetzt Fehlt mir nur (Wahrscheinlich das größere Problem) noch wie bekomme ich so eine X-Headerline in das E-Mail rein

Mit freundlichen Grüßen

Andreas

Hallo Andreas,

/t/mit-vba-den-header-einer-email-auslesen/1717871
Fehler: Benutzerdefinierter Typ nicht definiert bei
Mapi.session.

Hast die CDO.DLL eingebunden?

nein. Ich hatte das auch gelesen aber ich fand nur eine Cdosys.dll o.ä., die ist das wohl nicht.
Jetzt habe ich mal nach Cdo.dll gesucht und ich hab die auf der zweiten (alten) Festplatte. Sie steht in einer .Cab von Office2003 was mal auf dieser Platte war.
Derzeit hab ich nur Office2000 und da gibt es wohl keine Cdo.dll.

Sicher, ich könnte sie extrahieren und schauen ob Office2000 damit klarkommt, aber ich wart lieber ab bis ich mir wieder Office2003 installiert habe.

Das Beispiel läuft schon nur sollte die Email nur über einen
Exchange Server gelaufen sein dann hat die irgendwie keinen
Header und dann kommt es zu einem Fehler aber auslesen kannst
damit zumindest den E-Mail Header und damit kann ich aus die
von Mir gesuchte Zeile finden.

Das heißt der Code war brauchbar? Freut mich.

Das andere Beispiel geht am Thema vorbei Liest j nur den
Body von E-Mail mit bestimmten Absender aus

Das dachte ich mir, war mir aber nicht sicher da ich für die paar Mails die schicke oder erhalte Outlook Express nutze und keine Ahnung hab was ein Exchange Server und was es da alles noch so gibt, d.h. mein Outlook besteht nur aus 2 Mails.

Outlook interessiert mich nur insoweit wie ich da mit Excel-Vba Mails schicken, auslesen kann.
Und da der header für mich dazu gehört bin ich da auch interessiert wie man den ausliest oder beschreibt.

Jetzt Fehlt mir nur (Wahrscheinlich das größere Problem) noch
wie bekomme ich so eine X-Headerline in das E-Mail rein

Vielleicht findest du da einen Tipp oder neue Idee, für mich vielzuviel Fachchinesich dabei :smile:

http://www.th-h.de/faq/headerfaq.php

Wenn es denn so ist daß immerhin schon das Auslesen der Header klappt, so zeige doch mal den Code im Outlookbrett vor und frage dort wie man denn diesen Header in eine per Vba erstellte Email mitreinpackt.

Andere Idee ist, wenn es Code im Internet gibt der das Reinschreiben kann, so hat er garantiert in seinem Code, wenn er API benutzt, die Wort Private Declare und wegen Outlook auch ggfs. Outlook.Application und/oder MAPI, also all die Begriffe die auch im Auslesecode benutzt werden.

Gib diese Begriffe in verschiedenen Kombinationen mal bei google ein und such weltweit in allen Sprachen nicht bei google.de sondern google.com u.ä.

Auf diese Art fand ich schon Code, war zwar teilweise alles auf Chinesisch oder was weiß ich, aber der reine Code war in Englisch.

So Suchen mache ich auch ggfs. bei ebay, also mal bei ebay.fr, ebay.es, ebay.at reinschauen…

Gruß
Reinhard