Autor Thema: Datentyp RFC822-Text auslesen?  (Gelesen 6372 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Datentyp RFC822-Text auslesen?
« 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.
Lotus Notes 8.0.2

Driri

  • Gast
Re: Datentyp RFC822-Text auslesen?
« Antwort #1 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.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #2 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

s_Old

  • Gast
Re: Datentyp RFC822-Text auslesen?
« Antwort #3 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.

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #4 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.
« Letzte Änderung: 20.01.09 - 10:10:17 von magic_halli »
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #5 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.
Lotus Notes 8.0.2

Driri

  • Gast
Re: Datentyp RFC822-Text auslesen?
« Antwort #6 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.

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #7 am: 20.01.09 - 11:09:30 »
Schön zu hören ...na dann sollte es ja jetzt endlich korrekt klappen.  ;D

Rico.
Lotus Notes 8.0.2

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #8 am: 20.01.09 - 11:11:12 »
Es ist aber keineswegs zwingend, dass die Absenderadresse zwischen "<>" einschlossen ist!

Bernhard

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #9 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.
Lotus Notes 8.0.2

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #10 am: 20.01.09 - 11:21:48 »
Üblicherweise haben interne Mails ausschliesslich das Item "From" ...

Bernhard

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Datentyp RFC822-Text auslesen?
« Antwort #11 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
Lotus Notes 8.0.2

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Datentyp RFC822-Text auslesen?
« Antwort #12 am: 25.01.09 - 06:10:25 »
RFC-822 Text bezieht sich auf die gleichnamige RFC, 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 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*)

HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz