Domino 9 und frühere Versionen > ND8: Entwicklung
iPhone Mail mit Inlines, Inlines sichtbar, aber programmatisch nicht
Renate:
Beim versenden von Bildern mit dem iPhone werden diese als Inline der Mail gehängt.
Wenn ich die Mail öffne, sehe ich diese Bilder auch.
Ich muss aber eine Agent schreiben, der die Bilder auf der Festplatte ablegt.
Versuche ich aber über javascript an diese Bilder zu kommen oder überhaupt nur zu erkennen, dass die Mail welche enthält, dafür habe ich bisher keine Lösung gefunden.
doc.Hasembedded gibt false zurück.
Alle Items durchgehen und bei Richtextitem Isempty(rtitem.EmbeddedObjects) abgefragt, ergibt immer true
Kann man irgendwie den itemtype RFC822Text so auslesen, dass man die Bilder erhält?
Oder gibt es irgend eine andere Lösung. Ich benötige sie wirklich dringend.
koehlerbv:
Hallo Renate - und willkommen im Forum!
Um Dir zu helfen, vorab folgendes: Dass Du "eine" Agent schreiben musst und dass das "wirklich dringend", ist ja wirklich spannend, hilft aber weder Dir noch uns.
Daher: Was hast Du denn schon unternommen? Gibt es einen konkreten Punkt, an dem Du jetzt scheiterst? HJast Du schon die Suche dieses Forums bemüht? Weisst Du, dass Inline Images in der Regel in einen "image"-Tag eingebunden sind und Base64-kodiert sind? Hast Du danach schon gesucht?
Je konkreter Deine Fragen, desto einfacher ist es für Hilfswillige und desto besser können diese sich auf Deine Erfordernisse einstellen.
Bernhard
PS: Die oben genannten Suchbegriffe sollten schon zielführend sein. Wenn nicht - dann besteht noch ein ganz anderes Problem. Die "muss!"-Forderung an Dich wäre dann obsolet.
thkn777:
Hallo Renate,
willkommen im Forum!
"Dringend"? Oh... es ist nur dringend. Ich dachte schon, es brennt irgendwo und die Welt geht unter. ;)
DEINE ATTACHMENTS SIND DA!
Da ich weiß, daß man im Streß manchmal den Wald vor lauter Bäumen nicht sieht, folgender Tip.
Laß Dich nicht hetzen und schau Dir im Notes Client die Items an, die in solch einem Mail-Dokument enthalten sind. Du solltest mehrere "Body" Items finden. Nein, das ist kein Bug, das gehört so. Schau Dir den Inhalt der einzelnen Items an. Ich gehe davon aus, daß Du Deine Attachments dort jetzt gefunden hast.
UND WIE WEITER?
Falls Du dich überhaupt noch nie mit dem Begriff "MIME" auseinandergesetzt hast --> jetzt wäre der richtige Augenblick, damit anzufangen. Falls Dir das Thema schon was sagt: lies Dir Deine Fragen und die Problembeschreibung in Deinem ersten Posting nochmal durch.
Und dann mach bitte das, was Bernhard gesagt hat.
Viel Erfolg,
Th.
Renate:
Hallo Bernhard und Th.
Vielen Dank für die Rückmeldung und Entschuldigung, war am Mittwoch nach 12 Stunden vor der Kiste völlig generved.
MIME ist mir nicht ganz unbekannt, habe schon rekursive MIME-Mailverarbeitung in Java geschrieben die funktioniert.
Das Beispieldokument hat 55 Bodyfelder Doppeleintrags-ID 0 bis 53 werden leer angezeigt, wenn ich über Dokumenteneigenschaften rein schaue 54 enthält den Text der Mail "Grüße ..."
(Im Anhang alle ausgelesenen Felder.)
In Lotusscript bekomme ich das Entity gar nicht zu fassen und finde auch nach diversen Suchen im Forum oder über Google keine Lösung.
--- Code: ---Weisst Du, dass Inline Images in der Regel in einen "image"-Tag eingebunden sind und Base64-kodiert sind? Hast Du danach schon gesucht?
--- Ende Code ---
Wie komme ich an das "Image"-Tag?
doc.GetMIMEEntity ist nothing
doc.Hasembedded ist false
Isempty(rtitem.EmbeddedObjects) ist true für alle richtextitems
Evaluate("@AttachmentNames", doc) gibt auch nichts zurück
Gruß
Renate
--- Code: ---Option Public
Option Declare
Sub Initialize
On Error Goto fehler
Print "iPhone Mail Test"
Dim session As New NotesSession
session.ConvertMime = False
Dim db As notesdatabase
Dim dc As notesdocumentcollection, doc As notesdocument, rtitem As notesrichtextitem
Dim fehler As Integer
fehler = 0
Dim docHasError As Boolean
Set db= session.currentdatabase
Dim agentLog As New NotesLog("Logbuch")
Call agentLog.Openmaillog(session.Username, "iPhone Mailtest in " + db.Title)
Call agentLog.LogAction("Start...")
Set dc = db.Unprocesseddocuments
Set doc = dc.getfirstdocument
Dim findEmbedded As Boolean
While Not doc Is Nothing
docHasError = false
findEmbedded = False
'Body
Dim hasEmbedded As Boolean
hasEmbedded = false
If doc.Hasembedded then
Call agentlog.Logaction(doc.subject(0) + " hat Embedded Objects")
hasEmbedded = True
else
Call agentlog.Logaction(doc.subject(0) + " hat keine Embedded Objects")
hasEmbedded = false
End If ' hasembedded
ForAll item In doc.Items
If ( item.Type = RICHTEXT ) Then
Call agentlog.Logaction( "item: " + item.name)
Call agentlog.Logaction( "is richtext")
Set rtitem = item
If rtitem Is Nothing Then
Call agentlog.Logaction( "rtitem Is Nothing")
Goto nextitem
End If
If Not( Isempty(rtitem.EmbeddedObjects)) Then
findEmbedded = true
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
Call agentlog.Logaction("Objectname:" + o.name)
End If
nextFile:
End Forall
Else
Call agentLog.LogAction("Kein Object enthalten.")
End If
End If
nextitem:
End ForAll
' nächter Versuch, wenn Attachment nicht am Richtext hängen
Dim vEval As Variant
Dim embObj As NotesEmbeddedObject
vEval = Evaluate("@AttachmentNames", doc)
Call agentLog.LogAction("check @AttachmentNames")
If IsArray(vEval) then
ForAll v In vEval
If v <> "" Then
If hasEmbedded And Not findEmbedded Then
Call agentLog.LogAction("Nicht bearbeitetes Attachment =" & v)
else
Call agentLog.LogAction("enthalten Attachment:" & v)
End If
Set embObj = doc.GetAttachment(v)
End If
End ForAll
Else
If vEval <> "" Then
If hasEmbedded And Not findEmbedded Then
Call agentLog.LogAction("Nicht bearbeitetes Attachment =" & vEval)
Else
Call agentLog.LogAction("enthalten Attachment:" & vEval)
End If
End If
End if
' Iterate through each of the document's items looking for attachments
Dim objAttachment As NotesEmbeddedObject
Dim icounter As Integer
icounter = 0
Call agentlog.Logaction("Check item.type Attachment")
ForAll item In doc.Items
Call agentlog.Logaction(item.name + " itemTyp" + CStr(item.Type))
If item.Type = RFC822Text Then
Call agentlog.Logaction("RFC822Text.Name" + item.Values(0))
End If
If item.Type = Attachment Then
' first in Values array is the name of the attachment.
Set objAttachment = doc.GetAttachment(item.Values(0))
iCounter = iCounter + 1
'get the attachment filename
Call agentlog.Logaction("objAttachment.Name" + CStr(icounter)+" " + objAttachment.Name)
End If
End forall
' %REM MIME Verarbeitung
' Dim s As New NotesSession
Dim mime As NotesMimeEntity
Dim parent As NotesMimeEntity
Dim stream As NotesStream
Dim header As NotesMIMEHeader
Dim filename As String
Dim basedir As String
basedir = "c:\temp\"
Set stream = session.CreateStream
Set mime = doc.GetMIMEEntity
if Not mime Is Nothing Then
Call agentLog.LogAction("is mime")
else
Call agentLog.LogAction("is NOT mime")
End If
While Not mime Is Nothing
'if a mime part contains an attachment the Content-Disposition header will contain the value of "attachment"
Set header = mime.GetNthHeader("Content-Disposition")
If (Not header Is Nothing) Then
Call agentLog.LogAction("Has header")
If (header.GetHeaderVal(True) = "attachment") Then
'if the Content-Disposition header exists then the filename parameter must be present
filename = header.GetParamVal("filename")
'strip off the quotation marks on the file name
filename = Strright(filename, {"})
filename = Strleft(filename, {"})
'open a file, get the content of the attachment, and write it to the file system
stream.Open baseDir + filename, "binary"
mime.GetContentAsBytes stream, True
stream.Close
End If
else
Call agentLog.LogAction("header Is Nothing")
End If
Set mime = mime.GetNextEntity(SEARCH_DEPTH)
Wend
session.ConvertMime = True
' %END REM
weiter:
Set doc = dc.getnextdocument(doc)
'Stop
Wend
Ende:
If fehler > 0 then
Messagebox "Shrink Images mit Fehlern beendet. Errorcount=" + CStr(fehler) + Chr(13) + "Siehe auch Logmail"
Call agentlog.Logaction("Generate Shrink Images ended. Errorcount=" + CStr(fehler))
else
Messagebox "Shrink Images ohne Fehler beendet." + Chr(13) + "Siehe auch Logmail"
Call agentlog.Logaction( "Generate Shrink Images successfully ended")
End if
Call agentLog.LogAction("Finish...")
Call agentlog.close
Exit Sub
fehler:
fehler = fehler +1
Print "ShrinkImages ERROR:" + Str(Err) + " " + Error$(ERR) + " in Zeile " + CStr(Erl)
Call agentlog.Logaction( "ShrinkImages ERROR:" + Str(Err) + " " + Error$(ERR) + " in Zeile " + CStr(Erl) )
Err = 0
Goto weiter
End Sub
--- Ende Code ---
Keydins:
Versuch es mal mit
vEval = Evaluate("@AttachmentNames(0)", doc)
Aus der Notes Hilfe:
--- Zitat ---@AttachmentNames( excludeMIMEBody )
Parameters
excludeMIMEBody
Boolean. Optional.
Specify True (1) to exclude large MIME parts that are stored as attachments (but displayed in-line). This is the default.
Specify False (0) to include large MIME parts that are stored as attachments (but displayed in-line).
--- Ende Zitat ---
Gruß Dirk
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln