Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: magic_halli am 20.01.09 - 09:17:48

Titel: Datentyp RFC822-Text auslesen?
Beitrag von: magic_halli am 20.01.09 - 09:17:48
Hi,

ich bin mal wieder am Mailadressen auslesen.  ::)
Das From-Feld einer Mail auf unserem Liveserver sieht wie folgt aus:
Code
Feldname: From
Datentyp: RFC822-Text
Datenlänge: 102 Byte
Seq.-Num.: 1
Doppeleintrags-ID: 0
Feld-Flags: SUMMARY 
RFC822 Typ: ADDRESS
RFC822 Kennzeichen: STRICT 
Nativer Wert: 
"Max Mustermann <mustermann@xyz.de>"
RFC822 Header-Name: 
"From"
RFC822 Header-Begrenzer: 
": "
Das möchte ich in einem LS-Agent auslesen und mir die Mailadresse, zwischen den '< >' extrahieren. Soweit eigentlich kein Problem...
Code
Dim vonFrom As String
Dim part1, part2 As Variant

vonFrom = docMail.GetItemValue("From")(0)

' From nehmen und Mailadresse zw. '< >' extrahieren
part1 = Strrightback(vonFrom, "<")
part2 = Strleftback(part1, ">")
sender = Cstr(part2)

Leider kann ich nicht einfach auf dem Livesystem testen, sprich meinen Code raufschieben und ausführen. Deshalb sollte es schon klappen!  ;)
Auf dem Testsystem gibts leider keinerlei Felder eines solchen Typs an einem Maildokument!

Meine Frage:
Der Datentyp vom Feld 'From' ist RFC822-Text!?!
Würde mein LS-Code zwecks auslesen des Values klappen, da ich hier mit einer String-Variable arbeite, die den Value erstmal speichern soll?
Oder wie verarbeitet man sonst einen Datentyp RFC822-Text? So einen hab ich noch nie gesehen und auch die Hilfe war mir hier keine Hilfe!

Danke und Gruß

Rico.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: Driri am 20.01.09 - 09:33:20
Wenn es um SMTP-Mails geht, schau Dir mal das Item "SMTPOriginator" an. Da steht die Adresse des Absenders in Klartext drin.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: koehlerbv am 20.01.09 - 09:37:43
Du kannst auch auf die Art wie von Dir beschrieben derartige From-Items als String auslesen - kein Problem. Du kommst nicht an alle Informationen heran - aber die brauchst Du sowieso nicht.

Bernhard
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: s_Old am 20.01.09 - 09:41:18
Alternativ kannst du hier auch mit der NotesName Klasse arbeiten, dann benötigst du keine Stringoperationen um an den Namen in unterschiedlichen RFC Formaten heranzukommen.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: magic_halli am 20.01.09 - 10:08:11
Zitat
Wenn es um SMTP-Mails geht, schau Dir mal das Item "SMTPOriginator" an. Da steht die Adresse des Absenders in Klartext drin.
Das Item existiert dann aber nur, wenn Mails von extern ins System kommen - nicht bei intern verschickten Mails?
EDIT: Existiert diese Item dann IMMER?

Zitat
Du kannst auch auf die Art wie von Dir beschrieben derartige From-Items als String auslesen - kein Problem. Du kommst nicht an alle Informationen heran - aber die brauchst Du sowieso nicht.
Schön, dass ich das Item in einen String auslesen kann... Soweit ich gesehen habe, steht die Absenderadresse sowieso immer gleich am Anfang des Item-Values.
Von daher denke ich, werde ich mal meinen obigen LS-Code (Agent) vom Livesystem-Admin "ausrollen" lassen und schauen was passiert.  ;)

Danke und Gruß

Rico.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: magic_halli am 20.01.09 - 10:40:02
Fertig!
Ich habe jetzt einfach mal eine Lösung implementiert, die mir all meine bisherig untergekommenen Items abfragt, in denen eine Absender-Mailadresse vorkommen kann. Ich denke, so fahre ich erstmal für unser Livesystem (inkl. Testsystem) auf der sicheren Seite, um immer eine Absender-Mailadresse in Internetform auch wirklich zu erhalten:
Code
     Dim inetFrom As String
	Dim inetPrincipal As String
	Dim vonFrom As String
	Dim originator As String
	Dim part1 As Variant
	Dim part2 As Variant
	Dim sender As String
	
	inetPrincipal = docMail.GetItemValue("$INetPrincipal")(0)		' Mail von intern (Testsystem)
	inetFrom = docMail.GetItemValue("INetFrom")(0)			      ' Mail von intern (Livesystem)
	vonFrom = docMail.GetItemValue("From")(0)					' Mail von extern (Livesystem)
	originator = docMail.GetItemValue("SMTPOriginator")(0)		' auch bei Mail von extern (Livesystem)
	
	' methodische Auswahl:
	' 1. $INetPrincipal nehmen
	sender = inetPrincipal
	If ( sender = "" Or sender = "." ) Then
		' 2. INetFrom nehmen
		sender = inetFrom
		If ( sender = "" Or sender = "." ) Then
			' 3. SMTPOrginator nehmen
			sender = originator
			If ( sender = "" Or sender = "." ) Then
				' 4. From nehmen und Mailadresse zw. '< >' extrahieren
				part1 = Strrightback(vonFrom, "<")
				part2 = Strleftback(part1, ">")
				sender = Cstr(part2)
			End If
		End If
	End If
... das für den Fall, falls es jemand interessiert.  ;)


Gruß

Rico.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: Driri am 20.01.09 - 11:05:46
SMTPOriginator existiert nur bei externen Mails. Daher ist das auch genau das richtige Vorgehen, auf Vorhandensein des Items zu prüfen.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: magic_halli am 20.01.09 - 11:09:30
Schön zu hören ...na dann sollte es ja jetzt endlich korrekt klappen.  ;D

Rico.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: koehlerbv am 20.01.09 - 11:11:12
Es ist aber keineswegs zwingend, dass die Absenderadresse zwischen "<>" einschlossen ist!

Bernhard
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: magic_halli am 20.01.09 - 11:17:04
Es ist aber keineswegs zwingend, dass die Absenderadresse zwischen "<>" einschlossen ist!

Ja, ich weiß... leider. Auf unserem Livesystem hab ich es bisher aber überall so gesehen. Deshalb frage frage ich das From-Item auch als letztes ab. Wenn eine eindeutige Absenderadresse jedoch in SMTPOriginator vorhanden ist, sollte LS nie bis dorthin kommen.  ;) (mal sehen, was die Test´s zeigen.)

...das ist leider der Mist mit Notes, dass man nicht 100%ig sagen kann, dort oder dort steht immer eine Absenderadresse in Internetform und gut!

Rico.
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: koehlerbv am 20.01.09 - 11:21:48
Üblicherweise haben interne Mails ausschliesslich das Item "From" ...

Bernhard
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: magic_halli am 20.01.09 - 11:30:18
Üblicherweise haben interne Mails ausschliesslich das Item "From" ...

Auf unserem Livesystem haben interne Mails alle auch INetFrom.
Die Zuordnung von Absenderadressen auf diverse Items ist ja aber auch, lt. Lektüre/Quellen, eine kleine Wissenschaft für sich. Wo man am Server wie was einträgt, beeinflusst dann wiederrum die Formatierung der Darstellung - soweit ich das gelesen habe?!

Rico
Titel: Re: Datentyp RFC822-Text auslesen?
Beitrag von: m3 am 25.01.09 - 06:10:25
RFC-822 Text bezieht sich auf die gleichnamige RFC (http://www.rfc-editor.org/rfc/rfc822.txt), die allerdings mittlerweile durch die RFC2822 ersetzt und durch die RFCS: RFC1123, RFC2156, RFC1327, RFC1138, RFC1148 ergänzt wurde.

Das "korrekte" und vollständige Parsen einer RFC 822 konformen Adresse (von den durch Outlook erzeugten Abnormitäten wollen wir hier gar nicht erst reden), ist nicht so trivial, wie man an diesem Perl-Beispiel (http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html) sehen kann. Die notwendige Regex ist nicht so untrivial:

Code
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)