Save email message as eml using C# in Lotus Notes
I need to export (save to) hard drive my Lotus Notes emails.
I figured out the way how to save attachments to HDD, but I can't figure out the way of how to save the whole email.
The code below shows how I export attachments. Can you suggest how can I modify it to save emails?
PS- I am new to programming.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domino;
using System.Collections;
namespace ExportLotusAttachments
class Class1
public void ScanForEmails()
String textBox1 = "c:\1";
NotesSession session = new NotesSession();
session.Initialize("");
NotesDbDirectory dir = null;
dir = session.GetDbDirectory("");
NotesDatabase db = null;
db = dir.OpenMailDatabase();
NotesDatabase NDb = dir.OpenMailDatabase(); //Database connection
//ArrayList that will hold names of the folders
ArrayList LotusViews2 = new ArrayList();
foreach (NotesView V in NDb.Views)
if (V.IsFolder && !(V.Name.Equals("($All)")))
NotesView getS = V;
LotusViews2.Add(getS.Name);
foreach (String obj in LotusViews2)
NotesDocument NDoc;
NotesView nInboxDocs = NDb.GetView(obj);
NDoc = nInboxDocs.GetFirstDocument();
String pAttachment;
while (NDoc != null)
if (NDoc.HasEmbedded && NDoc.HasItem("$File"))
object AllDocItems = (object)NDoc.Items;
foreach (object CurItem in AllDocItems)
NotesItem nItem = (NotesItem)CurItem;
if (IT_TYPE.ATTACHMENT == nItem.type)
String path = textBox1;
pAttachment = ((object)nItem.Values)[0].ToString();
if (!System.IO.Directory.Exists(path))
System.IO.Directory.CreateDirectory(textBox1);
try
NDoc.GetAttachment(pAttachment).ExtractFile(@path + pAttachment);
catch
NDoc = nInboxDocs.GetNextDocument(NDoc);
c# export lotus-notes eml
add a comment |
I need to export (save to) hard drive my Lotus Notes emails.
I figured out the way how to save attachments to HDD, but I can't figure out the way of how to save the whole email.
The code below shows how I export attachments. Can you suggest how can I modify it to save emails?
PS- I am new to programming.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domino;
using System.Collections;
namespace ExportLotusAttachments
class Class1
public void ScanForEmails()
String textBox1 = "c:\1";
NotesSession session = new NotesSession();
session.Initialize("");
NotesDbDirectory dir = null;
dir = session.GetDbDirectory("");
NotesDatabase db = null;
db = dir.OpenMailDatabase();
NotesDatabase NDb = dir.OpenMailDatabase(); //Database connection
//ArrayList that will hold names of the folders
ArrayList LotusViews2 = new ArrayList();
foreach (NotesView V in NDb.Views)
if (V.IsFolder && !(V.Name.Equals("($All)")))
NotesView getS = V;
LotusViews2.Add(getS.Name);
foreach (String obj in LotusViews2)
NotesDocument NDoc;
NotesView nInboxDocs = NDb.GetView(obj);
NDoc = nInboxDocs.GetFirstDocument();
String pAttachment;
while (NDoc != null)
if (NDoc.HasEmbedded && NDoc.HasItem("$File"))
object AllDocItems = (object)NDoc.Items;
foreach (object CurItem in AllDocItems)
NotesItem nItem = (NotesItem)CurItem;
if (IT_TYPE.ATTACHMENT == nItem.type)
String path = textBox1;
pAttachment = ((object)nItem.Values)[0].ToString();
if (!System.IO.Directory.Exists(path))
System.IO.Directory.CreateDirectory(textBox1);
try
NDoc.GetAttachment(pAttachment).ExtractFile(@path + pAttachment);
catch
NDoc = nInboxDocs.GetNextDocument(NDoc);
c# export lotus-notes eml
Please preview your code (you can do that by looking below the area you're typing it) for formatting before posting it. It not only makes your question more readable, it saves time because other people don't have to spend theirs fixing it. :) The easier it is for people to read and understand, the more likely you are to get an answer. Thanks.
– Ken White
Dec 9 '11 at 23:45
add a comment |
I need to export (save to) hard drive my Lotus Notes emails.
I figured out the way how to save attachments to HDD, but I can't figure out the way of how to save the whole email.
The code below shows how I export attachments. Can you suggest how can I modify it to save emails?
PS- I am new to programming.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domino;
using System.Collections;
namespace ExportLotusAttachments
class Class1
public void ScanForEmails()
String textBox1 = "c:\1";
NotesSession session = new NotesSession();
session.Initialize("");
NotesDbDirectory dir = null;
dir = session.GetDbDirectory("");
NotesDatabase db = null;
db = dir.OpenMailDatabase();
NotesDatabase NDb = dir.OpenMailDatabase(); //Database connection
//ArrayList that will hold names of the folders
ArrayList LotusViews2 = new ArrayList();
foreach (NotesView V in NDb.Views)
if (V.IsFolder && !(V.Name.Equals("($All)")))
NotesView getS = V;
LotusViews2.Add(getS.Name);
foreach (String obj in LotusViews2)
NotesDocument NDoc;
NotesView nInboxDocs = NDb.GetView(obj);
NDoc = nInboxDocs.GetFirstDocument();
String pAttachment;
while (NDoc != null)
if (NDoc.HasEmbedded && NDoc.HasItem("$File"))
object AllDocItems = (object)NDoc.Items;
foreach (object CurItem in AllDocItems)
NotesItem nItem = (NotesItem)CurItem;
if (IT_TYPE.ATTACHMENT == nItem.type)
String path = textBox1;
pAttachment = ((object)nItem.Values)[0].ToString();
if (!System.IO.Directory.Exists(path))
System.IO.Directory.CreateDirectory(textBox1);
try
NDoc.GetAttachment(pAttachment).ExtractFile(@path + pAttachment);
catch
NDoc = nInboxDocs.GetNextDocument(NDoc);
c# export lotus-notes eml
I need to export (save to) hard drive my Lotus Notes emails.
I figured out the way how to save attachments to HDD, but I can't figure out the way of how to save the whole email.
The code below shows how I export attachments. Can you suggest how can I modify it to save emails?
PS- I am new to programming.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domino;
using System.Collections;
namespace ExportLotusAttachments
class Class1
public void ScanForEmails()
String textBox1 = "c:\1";
NotesSession session = new NotesSession();
session.Initialize("");
NotesDbDirectory dir = null;
dir = session.GetDbDirectory("");
NotesDatabase db = null;
db = dir.OpenMailDatabase();
NotesDatabase NDb = dir.OpenMailDatabase(); //Database connection
//ArrayList that will hold names of the folders
ArrayList LotusViews2 = new ArrayList();
foreach (NotesView V in NDb.Views)
if (V.IsFolder && !(V.Name.Equals("($All)")))
NotesView getS = V;
LotusViews2.Add(getS.Name);
foreach (String obj in LotusViews2)
NotesDocument NDoc;
NotesView nInboxDocs = NDb.GetView(obj);
NDoc = nInboxDocs.GetFirstDocument();
String pAttachment;
while (NDoc != null)
if (NDoc.HasEmbedded && NDoc.HasItem("$File"))
object AllDocItems = (object)NDoc.Items;
foreach (object CurItem in AllDocItems)
NotesItem nItem = (NotesItem)CurItem;
if (IT_TYPE.ATTACHMENT == nItem.type)
String path = textBox1;
pAttachment = ((object)nItem.Values)[0].ToString();
if (!System.IO.Directory.Exists(path))
System.IO.Directory.CreateDirectory(textBox1);
try
NDoc.GetAttachment(pAttachment).ExtractFile(@path + pAttachment);
catch
NDoc = nInboxDocs.GetNextDocument(NDoc);
c# export lotus-notes eml
c# export lotus-notes eml
edited Nov 14 '18 at 16:41
jww
53.2k40228501
53.2k40228501
asked Dec 9 '11 at 22:24
AndrewAndrew
4,516945101
4,516945101
Please preview your code (you can do that by looking below the area you're typing it) for formatting before posting it. It not only makes your question more readable, it saves time because other people don't have to spend theirs fixing it. :) The easier it is for people to read and understand, the more likely you are to get an answer. Thanks.
– Ken White
Dec 9 '11 at 23:45
add a comment |
Please preview your code (you can do that by looking below the area you're typing it) for formatting before posting it. It not only makes your question more readable, it saves time because other people don't have to spend theirs fixing it. :) The easier it is for people to read and understand, the more likely you are to get an answer. Thanks.
– Ken White
Dec 9 '11 at 23:45
Please preview your code (you can do that by looking below the area you're typing it) for formatting before posting it. It not only makes your question more readable, it saves time because other people don't have to spend theirs fixing it. :) The easier it is for people to read and understand, the more likely you are to get an answer. Thanks.
– Ken White
Dec 9 '11 at 23:45
Please preview your code (you can do that by looking below the area you're typing it) for formatting before posting it. It not only makes your question more readable, it saves time because other people don't have to spend theirs fixing it. :) The easier it is for people to read and understand, the more likely you are to get an answer. Thanks.
– Ken White
Dec 9 '11 at 23:45
add a comment |
2 Answers
2
active
oldest
votes
This post by Bob Babalan explains how to export lotus documents using Java. The same principle should work in C# or VB. The document is cnverted into MIME and written to the disk.
Or in version 8.5.3 (I think it started witn 8.5.1) you can just drag and drop it from the mail file to the file system.
1
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
|
show 1 more comment
I know it is a bit late, but this is, what I did. (Based on Bob Babalan)
Bobs Solution helped me alot to understand NotesMIMEEntities, but in his solution, he only traversed the MIME-Tree to the second "layer". This will traverse multiple layers.
public static void GetMIME(StreamWriter writer, NotesMIMEEntity mimeEntity)
try
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
// message envelope. If no MIME-Version header, add one
if (!headers.Contains("MIME-Version:"))
writer.WriteLine("MIME-Version: 1.0");
writer.WriteLine(headers);
// for multipart, usually no main-msg content...
content = mimeEntity.ContentAsText;
if (content != null && content.Trim().Length > 0)
writer.WriteLine(content);
writer.Flush();
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.WriteLine(mimeEntity.BoundaryEnd);
writer.Flush();
catch (Exception ex)
Logging.Log(ex.ToString());
private void GetMimeChild(StreamWriter writer, NotesMIMEEntity mimeEntity)
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
if (encoding == MIME_ENCODING.ENC_IDENTITY_BINARY)
mimeEntity.EncodeContent(MIME_ENCODING.ENC_BASE64);
headers = mimeEntity.Headers;
preamble = mimeEntity.Preamble;
writer.Write(mimeEntity.BoundaryStart);
if (!content.EndsWith("n"))
writer.WriteLine("");
writer.WriteLine(headers);
writer.WriteLine();
writer.Write(mimeEntity.ContentAsText);
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.Write(mimeEntity.BoundaryEnd);
writer.Flush();
I would call this methods like this, to save the EML-File to a given path.
using (FileStream fs = new FileStream (path,FileMode.Create,FileAccess.ReadWrite,FileShare.None))
using (StreamWriter writer = new StreamWriter(fs))
NotesMimeEntity mimeEntity = notesDocument.GetMIMEEntity();
if (mimeEntity != null)
GetMIME(writer, mimeEntity);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f8452468%2fsave-email-message-as-eml-using-c-sharp-in-lotus-notes%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
This post by Bob Babalan explains how to export lotus documents using Java. The same principle should work in C# or VB. The document is cnverted into MIME and written to the disk.
Or in version 8.5.3 (I think it started witn 8.5.1) you can just drag and drop it from the mail file to the file system.
1
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
|
show 1 more comment
This post by Bob Babalan explains how to export lotus documents using Java. The same principle should work in C# or VB. The document is cnverted into MIME and written to the disk.
Or in version 8.5.3 (I think it started witn 8.5.1) you can just drag and drop it from the mail file to the file system.
1
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
|
show 1 more comment
This post by Bob Babalan explains how to export lotus documents using Java. The same principle should work in C# or VB. The document is cnverted into MIME and written to the disk.
Or in version 8.5.3 (I think it started witn 8.5.1) you can just drag and drop it from the mail file to the file system.
This post by Bob Babalan explains how to export lotus documents using Java. The same principle should work in C# or VB. The document is cnverted into MIME and written to the disk.
Or in version 8.5.3 (I think it started witn 8.5.1) you can just drag and drop it from the mail file to the file system.
answered Dec 10 '11 at 8:41
Jasper DuizendstraJasper Duizendstra
2,2631629
2,2631629
1
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
|
show 1 more comment
1
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
1
1
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
Unfortunately, tha Drag & Drop to .eml functionality is not exposed via the API.
– leyrer
Dec 10 '11 at 9:59
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
So, there is absolutely no way of getting and saving emails to HDD?
– Andrew
Mar 7 '12 at 22:08
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Sure there is, but it might require some programming as described above. The result would be a html file with the email.
– Jasper Duizendstra
Mar 12 '12 at 14:23
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
Bob Babalan's article provides a JavaScript solution. Unfortunately, NotesDocument.convertToMIME() is not exposed in the COM classes. Bob provided a follow-up article with sample C# using C API calls. See Here.
– Jacob Quisenberry
Mar 18 '13 at 17:56
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
@andrew, why the unaccept after more than a year, without explanation?
– Jasper Duizendstra
Nov 13 '13 at 14:25
|
show 1 more comment
I know it is a bit late, but this is, what I did. (Based on Bob Babalan)
Bobs Solution helped me alot to understand NotesMIMEEntities, but in his solution, he only traversed the MIME-Tree to the second "layer". This will traverse multiple layers.
public static void GetMIME(StreamWriter writer, NotesMIMEEntity mimeEntity)
try
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
// message envelope. If no MIME-Version header, add one
if (!headers.Contains("MIME-Version:"))
writer.WriteLine("MIME-Version: 1.0");
writer.WriteLine(headers);
// for multipart, usually no main-msg content...
content = mimeEntity.ContentAsText;
if (content != null && content.Trim().Length > 0)
writer.WriteLine(content);
writer.Flush();
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.WriteLine(mimeEntity.BoundaryEnd);
writer.Flush();
catch (Exception ex)
Logging.Log(ex.ToString());
private void GetMimeChild(StreamWriter writer, NotesMIMEEntity mimeEntity)
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
if (encoding == MIME_ENCODING.ENC_IDENTITY_BINARY)
mimeEntity.EncodeContent(MIME_ENCODING.ENC_BASE64);
headers = mimeEntity.Headers;
preamble = mimeEntity.Preamble;
writer.Write(mimeEntity.BoundaryStart);
if (!content.EndsWith("n"))
writer.WriteLine("");
writer.WriteLine(headers);
writer.WriteLine();
writer.Write(mimeEntity.ContentAsText);
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.Write(mimeEntity.BoundaryEnd);
writer.Flush();
I would call this methods like this, to save the EML-File to a given path.
using (FileStream fs = new FileStream (path,FileMode.Create,FileAccess.ReadWrite,FileShare.None))
using (StreamWriter writer = new StreamWriter(fs))
NotesMimeEntity mimeEntity = notesDocument.GetMIMEEntity();
if (mimeEntity != null)
GetMIME(writer, mimeEntity);
add a comment |
I know it is a bit late, but this is, what I did. (Based on Bob Babalan)
Bobs Solution helped me alot to understand NotesMIMEEntities, but in his solution, he only traversed the MIME-Tree to the second "layer". This will traverse multiple layers.
public static void GetMIME(StreamWriter writer, NotesMIMEEntity mimeEntity)
try
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
// message envelope. If no MIME-Version header, add one
if (!headers.Contains("MIME-Version:"))
writer.WriteLine("MIME-Version: 1.0");
writer.WriteLine(headers);
// for multipart, usually no main-msg content...
content = mimeEntity.ContentAsText;
if (content != null && content.Trim().Length > 0)
writer.WriteLine(content);
writer.Flush();
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.WriteLine(mimeEntity.BoundaryEnd);
writer.Flush();
catch (Exception ex)
Logging.Log(ex.ToString());
private void GetMimeChild(StreamWriter writer, NotesMIMEEntity mimeEntity)
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
if (encoding == MIME_ENCODING.ENC_IDENTITY_BINARY)
mimeEntity.EncodeContent(MIME_ENCODING.ENC_BASE64);
headers = mimeEntity.Headers;
preamble = mimeEntity.Preamble;
writer.Write(mimeEntity.BoundaryStart);
if (!content.EndsWith("n"))
writer.WriteLine("");
writer.WriteLine(headers);
writer.WriteLine();
writer.Write(mimeEntity.ContentAsText);
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.Write(mimeEntity.BoundaryEnd);
writer.Flush();
I would call this methods like this, to save the EML-File to a given path.
using (FileStream fs = new FileStream (path,FileMode.Create,FileAccess.ReadWrite,FileShare.None))
using (StreamWriter writer = new StreamWriter(fs))
NotesMimeEntity mimeEntity = notesDocument.GetMIMEEntity();
if (mimeEntity != null)
GetMIME(writer, mimeEntity);
add a comment |
I know it is a bit late, but this is, what I did. (Based on Bob Babalan)
Bobs Solution helped me alot to understand NotesMIMEEntities, but in his solution, he only traversed the MIME-Tree to the second "layer". This will traverse multiple layers.
public static void GetMIME(StreamWriter writer, NotesMIMEEntity mimeEntity)
try
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
// message envelope. If no MIME-Version header, add one
if (!headers.Contains("MIME-Version:"))
writer.WriteLine("MIME-Version: 1.0");
writer.WriteLine(headers);
// for multipart, usually no main-msg content...
content = mimeEntity.ContentAsText;
if (content != null && content.Trim().Length > 0)
writer.WriteLine(content);
writer.Flush();
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.WriteLine(mimeEntity.BoundaryEnd);
writer.Flush();
catch (Exception ex)
Logging.Log(ex.ToString());
private void GetMimeChild(StreamWriter writer, NotesMIMEEntity mimeEntity)
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
if (encoding == MIME_ENCODING.ENC_IDENTITY_BINARY)
mimeEntity.EncodeContent(MIME_ENCODING.ENC_BASE64);
headers = mimeEntity.Headers;
preamble = mimeEntity.Preamble;
writer.Write(mimeEntity.BoundaryStart);
if (!content.EndsWith("n"))
writer.WriteLine("");
writer.WriteLine(headers);
writer.WriteLine();
writer.Write(mimeEntity.ContentAsText);
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.Write(mimeEntity.BoundaryEnd);
writer.Flush();
I would call this methods like this, to save the EML-File to a given path.
using (FileStream fs = new FileStream (path,FileMode.Create,FileAccess.ReadWrite,FileShare.None))
using (StreamWriter writer = new StreamWriter(fs))
NotesMimeEntity mimeEntity = notesDocument.GetMIMEEntity();
if (mimeEntity != null)
GetMIME(writer, mimeEntity);
I know it is a bit late, but this is, what I did. (Based on Bob Babalan)
Bobs Solution helped me alot to understand NotesMIMEEntities, but in his solution, he only traversed the MIME-Tree to the second "layer". This will traverse multiple layers.
public static void GetMIME(StreamWriter writer, NotesMIMEEntity mimeEntity)
try
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
// message envelope. If no MIME-Version header, add one
if (!headers.Contains("MIME-Version:"))
writer.WriteLine("MIME-Version: 1.0");
writer.WriteLine(headers);
// for multipart, usually no main-msg content...
content = mimeEntity.ContentAsText;
if (content != null && content.Trim().Length > 0)
writer.WriteLine(content);
writer.Flush();
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.WriteLine(mimeEntity.BoundaryEnd);
writer.Flush();
catch (Exception ex)
Logging.Log(ex.ToString());
private void GetMimeChild(StreamWriter writer, NotesMIMEEntity mimeEntity)
string contentType = null;
string headers = null;
string content = null;
string preamble = null;
MIME_ENCODING encoding;
contentType = mimeEntity.ContentType;
headers = mimeEntity.Headers;
encoding = mimeEntity.Encoding;
if (encoding == MIME_ENCODING.ENC_IDENTITY_BINARY)
mimeEntity.EncodeContent(MIME_ENCODING.ENC_BASE64);
headers = mimeEntity.Headers;
preamble = mimeEntity.Preamble;
writer.Write(mimeEntity.BoundaryStart);
if (!content.EndsWith("n"))
writer.WriteLine("");
writer.WriteLine(headers);
writer.WriteLine();
writer.Write(mimeEntity.ContentAsText);
if (contentType.StartsWith("multipart"))
preamble = mimeEntity.Preamble;
NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity();
while (mimeChild != null)
GetMimeChild(writer, mimeChild);
mimeChild = mimeChild.GetNextSibling();
writer.Write(mimeEntity.BoundaryEnd);
writer.Flush();
I would call this methods like this, to save the EML-File to a given path.
using (FileStream fs = new FileStream (path,FileMode.Create,FileAccess.ReadWrite,FileShare.None))
using (StreamWriter writer = new StreamWriter(fs))
NotesMimeEntity mimeEntity = notesDocument.GetMIMEEntity();
if (mimeEntity != null)
GetMIME(writer, mimeEntity);
edited Jan 30 at 22:51
answered Mar 24 '16 at 10:02
AndreasAndreas
517211
517211
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f8452468%2fsave-email-message-as-eml-using-c-sharp-in-lotus-notes%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Please preview your code (you can do that by looking below the area you're typing it) for formatting before posting it. It not only makes your question more readable, it saves time because other people don't have to spend theirs fixing it. :) The easier it is for people to read and understand, the more likely you are to get an answer. Thanks.
– Ken White
Dec 9 '11 at 23:45