AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
27.06.19 - 12:13:29
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 9
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  Eingebettete Bilder werden beim Bearbeiten in Anhänge umgewandelt
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Eingebettete Bilder werden beim Bearbeiten in Anhänge umgewandelt  (Gelesen 390 mal)
TobiasZ
Frischling
*
Offline Offline

Beiträge: 1


« am: 14.11.18 - 13:31:06 »

Hallo zusammen,

ich versuche momentan, über die COM API in C# eine Notes 9.0.1 Installation (die verfügbare Trial Version) dazu zu bewegen, dass eine E-Mail mit HTML Inhalt und eingebetteten Bildern erstellt und in Notes dann überprüft und verschickt werden kann.
Das Erstellen funktioniert mittlerweile ganz gut (Code dafür ist Unten) und auch das Überprüfen funktioniert, indem ich die zum Dokument gehörende NotesURL aufrufe.
Sobald ich allerdings versuche, das Dokument zu bearbeiten werden alle eingebetteten Bilder aus der Nachricht gelöscht und in die Anhänge verschoben.
Hat jemand ne Idee was ich falsch mache bzw. ob es dafür einen Workaround gibt?

Edit: Ich hätte schwören können, dass ich die Option für eingebettete Bilder ausprobiert habe und sie anfangs auch deaktiviert war.
Hab sie jetzt aber nochmal ausprobiert und siehe da, es funktioniert ...

Code zum Erstellen der Mail:
Code:
//MIME Struktur
//body: multipart/mixed
//      --multipart/related
//      ----multipart/alternative
//      ------text/plain
//      ------text/HTML
//      ----<Eingebettete Anhänge>
//      --<Sonstige Anhänge>


NotesDocument document = _database.CreateDocument();
bool convertMime = _session.ConvertMime;
_session.ConvertMime = false;

NotesMIMEEntity body = document.CreateMIMEEntity();

message.HasEmbeddedImages = false;

//CreateMIMEChild ruft CreateChildEntity und CreateHeader/SetHeaderVal für jedes übergebene Tupel auf
NotesMIMEEntity content = CreateMIMEChild(body, Tuple.Create("Content-Type", "multipart/related"));
NotesMIMEEntity text = CreateMIMEChild(content, Tuple.Create("Content-Type", "multipart/alternative"));

//Plaintext
NotesMIMEEntity plainText = CreateMIMEChild(text);

NotesStream plainStream = _session.CreateStream();
plainStream.WriteText(ConvertHtmlToTextBody(message.Body));
plainText.SetContentFromText(plainStream, "text/plain;charset=UTF-8", MIME_ENCODING.ENC_NONE);

//HTML
NotesMIMEEntity htmlText = CreateMIMEChild(text);
NotesStream htmlStream = _session.CreateStream();
RegisterComObjectForDisposal(htmlStream);

//Verweise auf eingebettete Anhänge bei denen "cid:" fehlt korrigieren
foreach (IAttachment attachment in message.Attachments)
{
  string fileName = Path.GetFileName(attachment.FullFileName);
  if(message.Body.Contains(string.Format("\"{0}\"", fileName)))
    message.Body = message.Body.Replace(string.Format("\"{0}\"", fileName), string.Format("\"cid:{0}\"", fileName));
}

htmlStream.WriteText(message.Body);
htmlText.SetContentFromText(htmlStream, "text/HTML;charset=UTF-8", MIME_ENCODING.ENC_NONE);

//Eingebettete Anhänge
foreach (IAttachment attachment in message.Attachments)
{
  string fileName = Path.GetFileName(attachment.FullFileName);

  bool isEmbeddedFile = message.Body.Contains(string.Format("\"cid:{0}\"", fileName));

  if(!isEmbeddedFile)
    continue;

  message.HasEmbeddedImages = true;

  NotesStream fileStream = _session.CreateStream();
  if(fileStream.Open(attachment.FullFileName) && fileStream.Bytes > 0)
  {
    RegisterComObjectForDisposal(fileStream);

    NotesMIMEEntity attachment = CreateMIMEChild(content,
                                                      Tuple.Create("Content-Disposition", string.Format("inline; filename={0}", WebUtility.UrlEncode(fileName))),
                                                      Tuple.Create("Content-ID", string.Format("<{0}>", WebUtility.UrlEncode(fileName))));

    string contentType = MimeTypesMap.GetMimeType(fileName);
    attachment.SetContentFromBytes(fileStream, contentType, MIME_ENCODING.ENC_NONE);
    attachment.EncodeContent(MIME_ENCODING.ENC_BASE64);
    fileStream.Close();
  }
}

//Restliche Anhänge
foreach (IAttachment attachment in message.Attachments)
{
  string fileName = Path.GetFileName(attachment.FullFileName);

  bool isEmbeddedFile = message.Body.Contains(string.Format("\"cid:{0}\"", fileName));

  if(isEmbeddedFile)
    continue;

  NotesStream fileStream = _session.CreateStream();
  if(fileStream.Open(attachment.FullFileName) && fileStream.Bytes > 0)
  {
    RegisterComObjectForDisposal(fileStream);

    NotesMIMEEntity attachment = CreateMIMEChild(body,
                                                      Tuple.Create("Content-Disposition", string.Format("attachment; filename={0}", WebUtility.UrlEncode(fileName))),
                                                      Tuple.Create("Content-ID", string.Format("<{0}>", WebUtility.UrlEncode(fileName))));

    string contentType = MimeTypesMap.GetMimeType(fileName);
    attachment.SetContentFromBytes(fileStream, contentType, MIME_ENCODING.ENC_IDENTITY_BINARY);
  }
}

document.CloseMIMEEntities(true);

_session.ConvertMime = convertMime;
document.Save(true, false);
« Letzte Änderung: 14.11.18 - 13:47:18 von TobiasZ » Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: