Hallo zusammen,
habe lange probiert und gesucht. Vieles auch Dank diesen Artikels von pram (besonderen Dank Dir!)
http://atnotes.de/index.php/topic,52040.0.html ausgetüftelt.
Mein Problem war folgendes: Zur Dokumentierung von Vorgängen kann ich Notes-Dokumente aus meinem Mailfile als Antworten an die Vorgänge hängen. Soweit so gut. Nun habe ich zuätzlich Mails im Webmail (GMX oder web.de), welche als HTML speichere und nun als Antwortdokument ablegen muss. Da die Doku nur lesen ist, geht es nicht über UIDOC.Import.
(
Also ran ans Backend. Das HTM-File auswählen, Zeichenfolgen für das Subject und das Datum suchen, den blöden GMX Hinweistext rauschmeissen und dann das ganze in das RTF als HTML rein.
Das ist dabei rausgekommen.
[...]
' HTML Quellcode holen
fileName = ws.OpenFileDialog(False,"Bitte eine HTML-Datei wählen","HTML-Dateien|*.html","D:\PDF-TempFile")
If Not IsArray( fileName ) Then
Exit Function
End If
' Stream öffnen (*** ACHTUNG: Open unbedingt mit charset versehen, sonst fehlen die Umlaute ***)
Set stream = session.CreateStream
If Not stream.Open( fileName( 0 ), "UTF-8" ) Then
MessageBox fileName,, "Open failed"
Exit Function
End If
If stream.Bytes = 0 Then
MessageBox fileName,, "File has no content"
Exit Function
End If
' Characterset des Stream merken
StreamCharset = stream.Charset
' neues Dokument erstellen
Set NewDoc = curDB.CreateDocument( )
' Felder im Dokument besetzen (neue Felder und Inhalte aus dem Hauptdokument)
Call NewDoc.ReplaceItemValue("Form", ResponseForm)
Call NewDoc.ReplaceItemValue( "Icon", "13x13_WebMail.png" )
Call NewDoc.ReplaceItemValue( "Autor", CurDoc.Autor )
Call NewDoc.ReplaceItemValue( "Leser", CurDoc.Leser )
Call NewDoc.ReplaceItemValue( "Icon", "13x13_WebMail.png" )
' Stream auslesen und manipulieren
' Inhalte des Stream ermitteln
content = stream.ReadText
' Subject (Dies ist sicher GMX spezifisch und muss angepasst werden)
eadfrom = InStr( UCase( content ), {<DIV CLASS="MAIL-HEADER">} )
If readfrom <> 0 Then
eadfrom = InStr( readfrom, UCase( content ), {<H1 ID} )
SingleChar = Mid( content, readfrom, 1 )
' weiterlesen
Do While SingleChar <> ">"
SingleChar = Mid( content, readfrom, 1 )
readfrom = readfrom + 1
Loop
' weiterlesen
SingleChar = Mid( content, readfrom, 1 )
readto = readfrom
Do While SingleChar <> "<"
SingleChar = Mid( content, readto, 1 )
readto = readto + 1
Loop
subjectStr = Mid( content, readfrom, readto - 1 - readfrom )
Else
subjectStr = "ohne Betreff"
End If
' Datum
readfrom = InStr( readto, UCase( content ), {DATUM:} )
If readfrom <> 0 Then
readfrom = InStr( readfrom, UCase( content ), {<DD>} )
readfrom = readfrom + 4
whenStr = Mid( content, readfrom, 19 )
Else
whenStr = CStr( Today )
End if
Call NewDoc.ReplaceItemValue( "Datum", CDat( whenStr ) )
' Titel erstellen
whatStr = "WebMail"
TitelStr = whatStr + " v. " + whenStr + " - " + subjectStr
Call NewDoc.ReplaceItemValue( "Titel", TitelStr )
' Inhalt manipulieren (Das ist der blöde Text!)
content = Replace( content, {<h1 class="accessibility" role="contentinfo">
Wenn Sie ein Bildschirmleseprogramm verwenden, dann empfehlen wir Ihnen, folgende Seite zu verwenden: <a role="link" href="
https://mm.gmx.net">
https://mm.gmx.net</a>
</h1>}, "" )
Call stream.Truncate ' Streaminhalt löschen und
Call stream.Writetext( content ) 'Streaminhalt neu schreiben
' Convert MIME merken und ausschalten (nicht vergessen!)
' ***ACHTUNG: Ab hier KEIN Exit Sub/Function verwenden, sondern "Goto Ende" wegen Rücksetzen Convert MIME
oldMIME = session.Convertmime
Session.ConvertMIME = False
'Create the MIME headers
Set body = NewDoc.CreateMIMEEntity
Set mh = body.CreateHeader({MIME-Version})
Call mh.SetHeaderVal("1.0")
Set mh = body.CreateHeader("Content-Type")
Call mh.SetHeaderValAndParams( {multipart/alternative;boundary="=NextPart_="} )
' -----------------------------------------
' wird nicht benötigt, sofern kein alternativer Plain-Text zur Verfügung stehen soll
' Send the plain text part first
' Set mc = body.createChildEntity()
' Call mc.setContentFromText(stream, {text/plain}, ENC_NONE)
' -----------------------------------------
'Now send the HTML part. (Reihenfolge: immer nach Plain-Text!)
Set mc = body.createChildEntity()
Call mc.setContentFromText(stream, {text/html;charset="} & StreamCharset & {"}, ENC_NONE )
'Stream schliessen
Call stream.close()
' Zur Antwort machen und speichern
Call NewDoc.MakeResponse( curDoc )
Call NewDoc.Save( True, False, True )
Ende:
' MIME zurücksetzen
Session.ConvertMIME = oldMIME
End Sub