بارگذاری و ذخیره پیام ایمیل

بارگذاری پیام ایمیل

بارگذاری از EML

این بخش توضیح می‌دهد چگونه یک فایل EML را با استفاده از، به یک شیء MailMessage بارگذاری کنیم. EmlLoadOptions کلاس. کلاس EmlLoadOptions گزینه‌های مختلفی را برای سفارشی‌سازی نحوه بارگذاری فایل EML فراهم می‌کند، مانند حفظ قالب پیام‌های جاسازی‌شده یا کنترل رفتار بارگذاری پیوست‌های TNEF.

  1. یک نمونه از EmlLoadOptions را مقداردهی اولیه کنید.
  2. گزینه‌های بارگذاری را براساس نیاز پیکربندی کنید.
  3. از MailMessage.Load() متدی برای بارگذاری فایل EML با گزینه‌های مشخص‌شده.
using Aspose.Email;

// Initialize EmlLoadOptions
var loadOptions = new EmlLoadOptions
{
    // Configure load options
    PreferredTextEncoding = Encoding.UTF8, // Sets preferred encoding for the message
    PreserveEmbeddedMessageFormat = true, // Preserve format of embedded messages
    PreserveTnefAttachments = true, // Control TNEF attachment loading
    RemoveSignature = false // Do not remove the signature
};

// Load the EML file
var eml = MailMessage.Load("file.eml", loadOptions);

ویژگی‌های EmlLoadOptions

  • PreferredTextEncoding: رمزنگاری ترجیحی برای موضوع و متن پیام را تنظیم می‌کند. مقدار پیش‌فرض null.
  • PreserveEmbeddedMessageFormat: نشان می‌دهد که آیا قالب پیام‌های جاسازی‌شده در هنگام بارگذاری حفظ شود یا نه. مقدار پیش‌فرض false.
  • PreserveTnefAttachments: رفتار بارگذاری پیوست‌های TNEF را کنترل می‌کند. مقدار پیش‌فرض false.
  • RemoveSignature: مشخص می‌کند که آیا امضا در هنگام بارگذاری حذف شود یا نه. مقدار پیش‌فرض false.

حفظ قالب پیام جاسازی‌شده

string dataDir = RunExamples.GetDataDir_Email();

MailMessage mail = MailMessage.Load(dataDir + "tnefWithMsgInside.eml", new EmlLoadOptions() { PreserveEmbeddedMessageFormat = true });

FileFormatType fileFormat = FileFormatUtil.DetectFileFormat(mail.Attachments[0].ContentStream).FileFormatType;

Console.WriteLine("Embedded message file format: " + fileFormat);

بارگذاری پیام با امضا/بدون امضا

حفظ امضا به‌صورت پیش‌فرض هنگام بارگذاری فایل‌های EML پشتیبانی می‌شود. برای حذف امضا می‌توانید مقدار LoadOptions.RemoveSignature ویژگی را به true تنظیم کنید.

نمونه کد زیر نشان می‌دهد چگونه هنگام بارگذاری یک پیام امضا را حذف کنید:

var msg = MailMessage.Load(fileName, new EmlLoadOptions() { RemoveSignature = true});

بارگذاری از EMLX

بخش زیر بارگذاری یک فایل EMLX را با استفاده از EmlxLoadOptions کلاس. این کلاس گزینه‌هایی مشابه EmlLoadOptions ارائه می‌دهد که کنترل بر رمزگذاری، حذف امضا و موارد دیگر را فراهم می‌کند.

  1. یک نمونه از EmlxLoadOptions ایجاد کنید.
  2. ویژگی‌ها را به‌عنوان نیاز پیکربندی کنید.
  3. از MailMessage.Load() متد برای بارگذاری فایل EMLX.
using Aspose.Email;

// Instantiate EmlxLoadOptions
var loadOptions = new EmlxLoadOptions
{
    // Configure load options
    PreferredTextEncoding = Encoding.UTF8, // Set encoding preference
    PreserveEmbeddedMessageFormat = true, // Preserve embedded message formats
    RemoveSignature = true // Remove signatures during loading
};

// Load the EMLX file
var emlx = MailMessage.Load("file.emlx", loadOptions);

ویژگی‌های EmlxLoadOptions

  • PreferredTextEncoding: رمزنگاری ترجیحی برای موضوع و متن پیام را تنظیم می‌کند. مقدار پیش‌فرض null.
  • PreserveEmbeddedMessageFormat: نشان می‌دهد که آیا قالب پیام‌های جاسازی‌شده حفظ شود یا نه. مقدار پیش‌فرض false.
  • RemoveSignature: مشخص می‌کند که آیا امضا در هنگام بارگذاری حذف شود یا نه. مقدار پیش‌فرض false.

بارگذاری از HTML

یاد بگیرید چگونه یک فایل HTML را با استفاده از HtmlLoadOptions کلاس. این کلاس به‌طور ویژه برای مدیریت محتوای HTML با گزینه‌هایی برای مدیریت منابع و افزودن نمای متن ساده طراحی شده است.

  1. یک نمونه از HtmlLoadOptions را مقداردهی اولیه کنید.
  2. ویژگی‌های لازم را پیکربندی کنید.
  3. از MailMessage.Load() متد برای بارگذاری فایل HTML با گزینه‌های مشخص شده.
using Aspose.Email;

// Initialize HtmlLoadOptions
var loadOptions = new HtmlLoadOptions
{
    // Configure load options
    PathToResources = "resources/", // Path to directory containing resource files
    PreferredTextEncoding = Encoding.UTF8, // Set encoding preference
    ShouldAddPlainTextView = true // Add plain text view of the body
};

// Load the HTML file
var html = MailMessage.Load("file.html", loadOptions);

ویژگی‌های HtmlLoadOptions

  • PathToResources: مسیر دایرکتوری حاوی فایل‌های منبع (مثلاً تصاویر) را تعریف می‌کند.
  • PreferredTextEncoding: تنظیم رمزگذاری مورد پسند برای موضوع و بدنه پیام. مقدار پیش‌فرض null.
  • PreserveEmbeddedMessageFormat: تعیین می‌کند آیا فرمت پیام‌های توکار حفظ شود یا نه. مقدار پیش‌فرض false.
  • ShouldAddPlainTextView: مشخص می‌کند آیا نمای متن ساده‌ای از بدنه پیام اضافه شود یا نه. مقدار پیش‌فرض false.

بارگذاری از MHTML

این بخش توضیح می‌دهد چگونه یک فایل MHTML را با استفاده از MhtmlLoadOptions کلاس. کلاس MhtmlLoadOptions گزینه‌هایی برای مدیریت رمزگذاری، حفظ فرمت پیام‌های توکار و رسیدگی به پیوست‌های TNEF ارائه می‌دهد.

  1. یک نمونه از MhtmlLoadOptions ایجاد کنید.
  2. ویژگی‌های مورد نظر را پیکربندی کنید.
  3. فایل MHTML را با استفاده از MailMessage.Load() متد.
using Aspose.Email;

// Create MhtmlLoadOptions
var loadOptions = new MhtmlLoadOptions
{
    // Set load options
    PreferredTextEncoding = Encoding.UTF8, // Set encoding preference
    PreserveEmbeddedMessageFormat = true, // Preserve format of embedded messages
    PreserveTnefAttachments = true, // Handle TNEF attachments
    RemoveSignature = false // Keep the signature
};

// Load the MHTML file
var mhtml = MailMessage.Load("file.mht", loadOptions);

ویژگی‌های MhtmlLoadOptions

  • MessageFormat: قالب پیام ایمیل را نشان می‌دهد که می‌تواند EML، MSG یا MHTML باشد. مقدار پیش‌فرض EML است.
  • PreferredTextEncoding: رمزنگاری ترجیحی برای موضوع و متن پیام را تنظیم می‌کند. مقدار پیش‌فرض null.
  • PreserveEmbeddedMessageFormat: تعیین می‌کند آیا فرمت پیام‌های توکار حفظ شود یا نه. مقدار پیش‌فرض false.
  • PreserveTnefAttachments: رفتار بارگذاری پیوست‌های TNEF را کنترل می‌کند. مقدار پیش‌فرض false.
  • RemoveSignature: مشخص می‌کند که آیا امضا در هنگام بارگذاری حذف شود یا نه. مقدار پیش‌فرض false.

بارگذاری از MSG

این بخش توضیح می‌دهد چگونه یک فایل MSG را با استفاده از MsgLoadOptions کلاس. کلاس MsgLoadOptions ویژگی‌های متعددی را برای کنترل نحوه بارگذاری فایل‌های MSG ارائه می‌دهد، از جمله گزینه‌هایی برای حفظ محتوای RTF یا مدیریت پیوست‌های TNEF.

  1. یک نمونه از MsgLoadOptions ایجاد کنید.
  2. ویژگی‌های دلخواه را برای سفارشی‌سازی بارگذاری تنظیم کنید.
  3. بارگذاری فایل MSG با استفاده از MailMessage.Load() متد.
using Aspose.Email;

// Create MsgLoadOptions
var loadOptions = new MsgLoadOptions
{
    // Set load options
    KeepOriginalEmailAddresses = true, // Preserve original email addresses
    PreferredTextEncoding = Encoding.UTF8, // Set preferred encoding
    PreserveRtfContent = true, // Keep RTF content in the message
    PreserveTnefAttachments = true, // Handle TNEF attachments
    RemoveSignature = false, // Keep the signature
    Timeout = 5000 // Set timeout to 5 seconds
};

// Load the MSG file
var msg = MailMessage.Load("file.msg", loadOptions);

ویژگی‌های MsgLoadOptions

  • KeepOriginalEmailAddresses: نشان می‌دهد آیا آدرس‌های ایمیل اصلی حفظ شوند یا نه. مقدار پیش‌فرض false.
  • PreferredTextEncoding: رمزگذاری مورد پسند برای موضوع و بدنه پیام را تعریف می‌کند. مقدار پیش‌فرض null.
  • PreserveEmbeddedMessageFormat: تعیین می‌کند آیا فرمت پیام‌های توکار باید حفظ شود یا نه. مقدار پیش‌فرض false.
  • PreserveRtfContent: مشخص می‌کند آیا محتویات بدنه RTF در MailMessage. مقدار پیش‌فرض false.
  • PreserveTnefAttachments: رفتار بارگذاری پیوست‌های TNEF را مدیریت می‌کند. مقدار پیش‌فرض false.
  • RemoveSignature: تصمیم می‌گیرد که آیا امضا در هنگام بارگذاری حذف شود یا نه. مقدار پیش‌فرض false.
  • زمان انتظار: زمان قالب‌بندی را بر حسب میلی‌ثانیه در زمان تبدیل محدود می‌کند. مقدار پیش‌فرض ۳۰۰۰ میلی‌ثانیه است.

بارگذاری از TNEF

یاد بگیرید چگونه یک فایل TNEF eml را با TnefLoadOptions کلاس. این کلاس گزینه‌هایی برای مدیریت رمزنگاری و حذف امضاها در طول فرایند بارگذاری فراهم می‌کند.

  1. یک نمونه از TnefLoadOptions ایجاد کنید.
  2. ویژگی‌ها را براساس نیاز پیکربندی کنید.
  3. از MailMessage.Load() متدی برای بارگذاری فایل TNEF.
using Aspose.Email;

// Instantiate TnefLoadOptions
var loadOptions = new TnefLoadOptions
{
    // Configure load options
    PreferredTextEncoding = Encoding.UTF8, // Set encoding preference
    PreserveEmbeddedMessageFormat = true, // Preserve embedded message formats
    RemoveSignature = true // Remove signatures during loading
};

// Load the TNEF file
var tnef = MailMessage.Load("file.eml", loadOptions);

ویژگی‌های TnefLoadOptions

  • MessageFormat: قالب پیام ایمیل را نشان می‌دهد، مانند EML، MSG یا MHTML. مقدار پیش‌فرض EML است.
  • PreferredTextEncoding: رمزنگاری ترجیحی برای موضوع و متن پیام را تنظیم می‌کند. مقدار پیش‌فرض null.
  • PreserveEmbeddedMessageFormat: نشان می‌دهد که آیا قالب پیام‌های جاسازی‌شده حفظ شود یا نه. مقدار پیش‌فرض false.
  • RemoveSignature: مشخص می‌کند که آیا امضا در هنگام بارگذاری حذف شود یا نه. مقدار پیش‌فرض false.

بارگذاری یک پیام از کتابخانه اسناد Microsoft SharePoint

می‌توانید پیام‌های ایمیل ذخیره‌شده در کتابخانه اسناد Microsoft SharePoint را بخوانید و آنها را به یک MailMessage شیء. برای دسترسی به فایل‌ها در کتابخانه اسناد SharePoint، SDK SharePoint باید بر روی سیستم نصب باشد. SDK API لازم برای ورود و دسترسی به فایل‌ها از کتابخانه اسناد را فراهم می‌کند.

مثال زیر فرض می‌کند یک فایل پیام Microsoft Outlook (.msg) در پوشه Shared Documents کتابخانه اسناد SharePoint ذخیره شده است. SDK SharePoint برای خواندن فایل پیام به یک جریان استفاده می‌شود که سپس به MailMessage.Load متد. پس از بارگذاری، می‌توان به ویژگی‌های پیام (موضوع، متن، HTML و غیره) دست پیدا کرد. برای اطلاعات درباره نحوه نصب و پیکربندی Microsoft SharePoint Server و SDK، لطفاً به بخش‌های مربوطه در کتابخانه MSDN مراجعه کنید.

// Private members
private SPSite site = null;
private SPWeb web = null;

private void EstablishSharepoint()
{
    site = new SPSite("http://localhost/Site1");
    web = site.OpenWeb();
}

private void button2_Click(object sender, EventArgs e)
{
    SPSecurity.CodeToRunElevated elevatedGetSite = new SPSecurity.CodeToRunElevated(EstablishSharepoint);
    SPSecurity.RunWithElevatedPrivileges(elevatedGetSite);

    // Path to the MSG file stored in the Shared Documents folder
    SPFile msgFile = web.GetFile("Shared Documents/Test.msg");

    // Read the file into a memory stream
    MemoryStream fileStream = new MemoryStream();
    byte[] currentFileContent = msgFile.OpenBinary();
    fileStream.Write(currentFileContent, 0, currentFileContent.Length);
    fileStream.Position = 0;

    // Create an instance of the MailMessage class and pass the memory stream of the MSG file to it
    MailMessage msg = MailMessage.Load(fileStream, new MsgLoadOptions());
    fileStream.Close();
    fileStream.Dispose();

    // Access the MailMessage class' public properties
    Console.WriteLine("Subject: " + msg.Subject);
    Console.WriteLine("From: " + msg.From.ToString());
    Console.WriteLine("Text Body: " + msg.TextBody);
}

شناسایی فرمت‌های فایل

API Aspose.Email قابلیت تشخیص فرمت فایل پیام ارائه‌شده را فراهم می‌کند. The DetectFileFormat متد FileFormatUtil کلاس می‌تواند برای رسیدن به این هدف استفاده شود. انواع و متدهای زیر می‌توانند برای تشخیص قالب فایل بارگیری‌شده به کار روند.

قطعه کد زیر نشان می‌دهد چگونه فرمت فایل‌ها را تشخیص دهید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();

// Detect file format and Gets the detected load format
FileFormatInfo info = FileFormatUtil.DetectFileFormat(dataDir + "message.msg");
Console.WriteLine("The message format is: " + info.FileFormatType);

ذخیره و تبدیل پیام‌ها

Aspose.Email تبدیل هر نوع پیام به قالب دیگری را آسان می‌کند. برای نشان دادن این ویژگی، کد این مقاله سه نوع پیام را از دیسک بارگذاری کرده و دوباره در قالب‌های دیگر ذخیره می‌کند. کلاس پایه SaveOptions و کلاس‌ها EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions برای تنظیمات اضافی هنگام ذخیره‌سازی MailMessage می‌تواند برای ذخیره پیام‌ها به قالب‌های دیگر استفاده شود. مقاله نشان می‌دهد چگونه از این کلاس‌ها برای ذخیره یک ایمیل نمونه به عنوان:

  • قالب EML.
  • Outlook MSG.
  • قالب MHTML.
  • قالب HTML.

ذخیره به EML

قطعه کد زیر نشان می‌دهد چگونه یک پیام EML را بارگذاری کرده و در همان قالب بر روی دیسک ذخیره کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();

// Initialize and Load an existing EML file by specifying the MessageFormat
MailMessage mailMessage = MailMessage.Load(dataDir + "Attachments.eml");

mailMessage.Save(dataDir + "LoadAndSaveFileAsEML_out.eml", SaveOptions.DefaultEml);

مرزهای پیام اصلی

زمانی که یک پیام EML بارگیری شده و دوباره به EML ذخیره می‌شود، مرزهای پیام منبع به‌طور پیش‌فرض حفظ می‌شوند، بنابراین نیازی به پیکربندی برای نگه‌دارشان نیست. نسخه‌های قبلی کتابخانه یک EmlSaveOptions.PreserveOriginalBoundaries برای این منظور استفاده کنید. آن ویژگی حذف شده است و حفظ مرزهای اصلی اکنون رفتار پیش‌فرض محسوب می‌شود.

سفارشی‌سازی مرزهای MIME

اگر به جای آن نیاز دارید که مرزها الگوی خاصی را دنبال کنند، از BoundariesTemplate ویژگی EmlSaveOptions کلاس. این قالبی را که برای تولید مرزهای MIME پیام ذخیره‌شده استفاده می‌شود تعریف می‌کند. مقدار پیش‌فرض آن null، که به این معنی است که مرزها توسط کتابخانه تولید می‌شوند. دو کاراکتر عام wildcard در قالب پشتیبانی می‌شوند:

  • {#} – شماره مرز.
  • {guid} – یک GUID تولید شده.

قطعه کد زیر نشان می‌دهد که چگونه EML را بارگیری کرده و به‌صورت EML با مرزهای MIME سفارشی ذخیره کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();

MailMessage mailMessage = MailMessage.Load(dataDir + "Attachments.eml");

// Save as eml with a custom boundary template
EmlSaveOptions emlSaveOptions = new EmlSaveOptions(MailMessageSaveType.EmlFormat)
{
    BoundariesTemplate = "boundary_{#}_{guid}"
};
mailMessage.Save(dataDir + "CustomBoundaries_out.eml", emlSaveOptions);

حفظ پیوست‌های TNEF

قطعه کد زیر نشان می‌دهد چگونه به عنوان EML ذخیره کنید در حالی که پیوست‌های TNEF حفظ می‌شوند.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();

MailMessage mailMessage = MailMessage.Load(dataDir + "tnefEML.eml");

// Save as eml with preserved attachment
EmlSaveOptions emlSaveOptions = new EmlSaveOptions(MailMessageSaveType.EmlFormat)
{
    FileCompatibilityMode = FileCompatibilityMode.PreserveTnefAttachments
};
mailMessage.Save(dataDir + "PreserveTNEFAttachment_out.eml", emlSaveOptions);

ذخیره EML به MSG

قطعه کد زیر نشان می‌دهد چگونه یک پیام EML را بارگذاری کنید و با استفاده از گزینه مناسب از آن به MSG تبدیل کنید SaveOptions.

// Data directory for reading and writing files
string dataDir = RunExamples.GetDataDir_Email();

// Initialize and Load an existing EML file by specifying the MessageFormat
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");

// Save the Email message to disk in ASCII format and Unicode format
eml.Save(dataDir + "AnEmail_out.msg", SaveOptions.DefaultMsgUnicode);                      

حفظ تاریخ‌ها

این MsgSaveOptions این کلاس به شما امکان می‌دهد پیام منبع را به‌صورت فایل Outlook Message (MSG) ذخیره کنید و تاریخ‌ها را حفظ کنید. قطعه کد زیر نشان می‌دهد چگونه با حفظ تاریخ‌ها به MSG ذخیره شود.

// Data directory for reading and writing files
string dataDir = RunExamples.GetDataDir_Email();

// Initialize and Load an existing EML file by specifying the MessageFormat
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");

// Save as msg with preserved dates
MsgSaveOptions msgSaveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookMessageFormatUnicode)
{
    PreserveOriginalDates = true
};

eml.Save(Path.Combine(dataDir, "outTest_out.msg"), msgSaveOptions);

ذخیره EML به MHTML

گزینه‌های مختلف MHTML می‌توانند برای دست‌یابی به نتایج مطلوب استفاده شوند. قطعه کد زیر نشان می‌دهد چگونه یک پیام EML را بارگذاری کنید در MailMessage و تبدیل آن به MHTML با تاریخ پیام در سیستم UTC.


// Set options for MHTML output
MhtSaveOptions saveOptions = SaveOptions.DefaultMhtml;
saveOptions.PreserveOriginalDate = false; // save a message date as UTC date

// Initialize and load an existing EML file
using (MailMessage mailMessage = MailMessage.Load(folderPath + "Message.eml"))
{
    mailMessage.Save(folderPath + "Message_out.mhtml", saveOptions);
}

گزینه‌های تبدیل

این MhtSaveOptions کلاسی که گزینه‌های اضافی برای ذخیره پیام‌های ایمیل به قالب MHTML فراهم می‌کند. شمارنده MhtFormatOptions امکان نوشتن اطلاعات ایمیل اضافی به MHTML خروجی را فراهم می‌کند. فیلدهای اضافی زیر می‌توانند نوشته شوند:

  • WriteHeader – هدر ایمیل را به فایل خروجی می‌نویسد.
  • WriteOutlineAttachments – پیوست‌های طرح کلی را به فایل خروجی می‌نویسد.
  • WriteCompleteEmailAddress – آدرس ایمیل کامل را به فایل خروجی می‌نویسد.
  • NoEncodeCharacters – نباید از رمزگذاری انتقال کاراکترها استفاده شود.
  • HideExtraPrintHeader – سرصفحه چاپ اضافی را از بالای فایل خروجی پنهان می‌کند.
  • WriteCompleteToEmailAddress – آدرس ایمیل کامل گیرنده را به فایل خروجی می‌نویسد.
  • WriteCompleteFromEmailAddress – آدرس ایمیل کامل فرستنده را به فایل خروجی می‌نویسد.
  • WriteCompleteCcEmailAddress – آدرس ایمیل کامل دریافت‌کنندگان کاربن‌کپی شده را به فایل خروجی می‌نویسد.
  • WriteCompleteBccEmailAddress – آدرس ایمیل کامل دریافت‌کنندگان بلیند کاربن‌کپی شده را به فایل خروجی می‌نویسد.
  • RenderCalendarEvent – متن رویداد تقویم را به فایل خروجی می‌نویسد.
  • SkipByteOrderMarkInBody – بایت‌های نشانگر ترتیب بایت (BOM) را در بدنهٔ فایل خروجی نادیده بگیرد.
  • RenderVCardInfo – متن را از VCard AlternativeView به فایل خروجی می‌نویسد.
  • DisplayAsOutlook – نمایش هدر From.
  • RenderTaskFields – فیلدهای خاص Task را به فایل خروجی می‌نویسد.
  • None – تنظیمی مشخص نشده است.

قطعه کد زیر نشان می‌دهد چگونه فایل‌های EML را به MHTML تبدیل کنید با تنظیمات اختیاری.

MailMessage eml = MailMessage.Load(Path.Combine(dataDir, "Message.eml"));

// Save as mht with header
MhtSaveOptions mhtSaveOptions = new MhtSaveOptions
{
    //Specify formatting options required
    //Here we are specifying to write header information to the output without writing extra print header
    //and the output headers should display as the original headers in message
    MhtFormatOptions = MhtFormatOptions.WriteHeader | MhtFormatOptions.HideExtraPrintHeader | MhtFormatOptions.DisplayAsOutlook,
    // Check the body encoding for validity. 
    CheckBodyContentEncoding = true
};
eml.Save(Path.Combine(dataDir, "outMessage_out.mht"), mhtSaveOptions);

رندر رویدادهای تقویم

این MhtFormatOptions.RenderCalendarEvent رویدادهای تقویم را به خروجی MHTML رندر می‌کند. قطعه کد زیر نشان می‌دهد چگونه رویدادهای تقویم را هنگام تبدیل به MHTML رندر کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
string fileName = "Meeting with Recurring Occurrences.msg";
MailMessage msg = MailMessage.Load(dataDir + fileName);
MhtSaveOptions options = new MhtSaveOptions();

options.MhtFormatOptions = MhtFormatOptions.WriteHeader | MhtFormatOptions.RenderCalendarEvent;

//Format the output details if required - optional

//Set the display for Start Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.Start))
    options.FormatTemplates[MhtTemplateName.Start] = @"<span class='headerLineTitle'>Start:</span><span class='headerLineText'>{0}</span><br/>"; 
else
    options.FormatTemplates.Add(MhtTemplateName.Start, @"<span class='headerLineTitle'>Start:</span><span class='headerLineText'>{0}</span><br/>");

//Set the display for End Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.End))
    options.FormatTemplates[MhtTemplateName.End] = @"<span class='headerLineTitle'>End:</span><span class='headerLineText'>{0}</span><br/>";
else
    options.FormatTemplates.Add(MhtTemplateName.End, @"<span class='headerLineTitle'>End:</span><span class='headerLineText'>{0}</span><br/>");

//Set the display for Recurrence Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.Recurrence))
    options.FormatTemplates[MhtTemplateName.Recurrence] = @"<span class='headerLineTitle'>Recurrence:</span><span class='headerLineText'>{0}</span><br/>";
else
    options.FormatTemplates.Add(MhtTemplateName.Recurrence, @"<span class='headerLineTitle'>Recurrence:</span><span class='headerLineText'>{0}</span><br/>");

//Set the display for RecurrencePattern Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.RecurrencePattern))
    options.FormatTemplates[MhtTemplateName.RecurrencePattern] = @"<span class='headerLineTitle'>RecurrencePattern:</span><span class='headerLineText'>{0}</span><br/>";
else
    options.FormatTemplates.Add(MhtTemplateName.RecurrencePattern, @"<span class='headerLineTitle'>RecurrencePattern:</span><span class='headerLineText'>{0}</span><br/>");

//Set the display for Organizer Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.Organizer))
    options.FormatTemplates[MhtTemplateName.Organizer] = @"<span class='headerLineTitle'>Organizer:</span><span class='headerLineText'>{0}</span><br/>";
else
    options.FormatTemplates.Add(MhtTemplateName.Organizer, @"<span class='headerLineTitle'>Organizer:</span><span class='headerLineText'>{0}</span><br/>");

//Set the display for RequiredAttendees Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.RequiredAttendees))
    options.FormatTemplates[MhtTemplateName.RequiredAttendees] = @"<span class='headerLineTitle'>RequiredAttendees:</span><span class='headerLineText'>{0}</span><br/>";
else
    options.FormatTemplates.Add(MhtTemplateName.RequiredAttendees, @"<span class='headerLineTitle'>RequiredAttendees:</span><span class='headerLineText'>{0}</span><br/>");


msg.Save(dataDir + "Meeting with Recurring Occurrences.mhtml", options);

صادر کردن ایمیل به MHT بدون تصاویر درون‌خط

این SkipInlineImages ویژگی MhtSaveOptions کلاس تعیین می‌کند آیا هنگام ذخیره به MHTML به مراجع تصاویر نادیده گرفته شود یا نه. مقدار پیش‌فرض false.

MailMessage eml = MailMessage.Load(Path.Combine(dataDir, "Message.eml"));

MhtSaveOptions mhtSaveOptions = new MhtSaveOptions
{
    SkipInlineImages = true
};

eml.Save(Path.Combine(dataDir, "EmlToMhtmlWithoutInlineImages_out.mht"), mhtSaveOptions);

صادر کردن ایمیل به MHT با منطقهٔ زمانی سفارشی

MailMessage کلاس فراهم می‌کند TimeZoneOffset ویژگی برای تنظیم منطقه زمانی سفارشی هنگام صادرات به MHT. قطعه کد زیر نشان می‌دهد چگونه ایمیل را به MHT با منطقه زمانی سفارشی صادر کنید.

MailMessage eml = MailMessage.Load(dataDir + "Message.eml");

// Set the local time for message date.
eml.TimeZoneOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);

// or set custom time zone offset for message date (-0800)
// eml.TimeZoneOffset = new TimeSpan(-8,0,0);

// The dates will be rendered by local system time zone.
MhtSaveOptions so = new MhtSaveOptions();
so.MhtFormatOptions = MhtFormatOptions.WriteHeader;
eml.Save(dataDir + "ExportEmailToMHTWithCustomTimezone_out.mhtml", so);

تنظیم فونت

string dataDir = RunExamples.GetDataDir_Email();

MailMessage eml = MailMessage.Load(dataDir + "Message.eml");

MhtSaveOptions options = SaveOptions.DefaultMhtml;
int cssInsertPos = options.CssStyles.LastIndexOf("</style>");
options.CssStyles = options.CssStyles.Insert(cssInsertPos,
    ".PlainText{" +
    "    font-family: sans-serif;" +
    "}"
    );

eml.Save("message.mhtml", options);

ذخیره EML به HTML

این HtmlSaveOptions کلاس به شما اجازه می‌دهد بدنه پیام را به HTML صادر کنید. قطعه کد زیر نشان می‌دهد چگونه یک پیام را به شکل HTML ذخیره کنید.

MailMessage message = MailMessage.Load(dataDir + "Message.eml");
message.Save(dataDir + "SaveAsHTML_out.html", SaveOptions.DefaultHtml);

// OR

MailMessage eml = MailMessage.Load(dataDir + "Message.eml");
HtmlSaveOptions options = SaveOptions.DefaultHtml;
options.HtmlFormatOptions = HtmlFormatOptions.WriteHeader | HtmlFormatOptions.WriteCompleteEmailAddress; //save the message headers to output HTML using the formatting options
eml.Save(dataDir + "SaveAsHTML1_out.html", options);

کنترل نحوه رندر شدن منابع

این ResourceRenderingMode ویژگی HtmlSaveOptions کلاس نحوه نوشتن منابع پیام (مانند تصاویر توکار) به HTML خروجی را تعریف می‌کند. این کلاس مقادیر ResourceRenderingMode نوع شمارشی:

  • EmbedIntoHtml – منابع را به‌صورت رشته‌های base64 در HTML تعبیه کنید. این مقدار پیش‌فرض است.
  • SaveToFile – منابع را به‌صورت فایل‌ها ذخیره کنید و مسیر هر فایل را در src برچسب.
  • SubstituteFromFile – از یک فایل سفارشی به‌عنوان آیکن استفاده کنید و مسیر آن را در src برچسب.
  • None – منابع را در HTML رندر نکنید.

وقتی منابع توکار نیستند، SaveResourceHandler نماینده برای هر پیوست پیام فراخوانی می‌شود که به شما امکان می‌دهد مکان ذخیره هر منبع را تصمیم بگیرید و مسیری که در HTML نوشته می‌شود را تعیین کنید.

var fileName = "EmailWithAttandEmbedded.eml";
var filePath = Path.Combine(dataDir, fileName);

MailMessage msg = MailMessage.Load(filePath);
var outFileName = Path.Combine(dataDir, fileName + ".html");

var options = new HtmlSaveOptions()
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    SaveResourceHandler =
        (AttachmentBase attachment, out string resourcePath) =>
        {
            attachment.Save(Path.Combine(dataDir, attachment.ContentId));
            resourcePath = Path.Combine(".", attachment.ContentId);
        }
};

msg.Save(outFileName, options);

ذخیره EML به OFT

قطعه کد زیر نشان می‌دهد چگونه یک پیام را به عنوان فایل قالب Outlook (.oft) ذخیره کنید.

using (MailMessage eml = new MailMessage("test@from.to", "test@to.to", "template subject", "Template body"))
{
    string oftEmlFileName = "EmlAsOft_out.oft";
    MsgSaveOptions options = SaveOptions.DefaultMsgUnicode;
    options.SaveAsTemplate = true;
    eml.Save(dataDir + oftEmlFileName, options);
}

تبدیل EML به MSG (MailMessage به MapiMessage)

برای تبدیل یک MailMessage شیء بارگذاری‌شده از یک فایل EML به یک MapiMessage برای شیء، از MapiConversionOptions کلاس. این تبدیل اغلب لازم است چون این دو شیء برای مقاصد متفاوت و نیازهای خاص در پردازش ایمیل به کار می‌روند. MapiMessage به‌طور خاص برای سازگاری با Microsoft Outlook و Exchange Server طراحی شده است، زیرا با فرمت Messaging Application Programming Interface (MAPI) سازگار است. این اطمینان می‌دهد که ایمیل‌های تبدیل‌شده به فایل‌های MSG کاملاً با محصولات Microsoft سازگار باشند و بتوان آنها را مستقیماً در Outlook باز، ویرایش و مدیریت کرد.

این تبدیل همچنین زمانی ضروری است که ایمیل‌ها نیاز به بایگانی، فهرست‌گذاری یا پردازش توسط ذخیره‌سازهایی که نیاز به فرمت MAPI، PST/OST، OLM دارند، داشته باشند. این MapiConversionOptions کلاسی که به شما امکان می‌دهد گزینه‌های اضافی مانند حفظ فرمت پیام اصلی، نگه داشتن تاریخ‌های اصلی و فشرده‌سازی بدنه RTF در حین تبدیل را مشخص کنید. نمونه کد زیر نشان می‌دهد چگونه ایمیلی را از فایلی با فرمت .eml بارگذاری و به فرمت Outlook .msg تبدیل کنید، به‌گونه‌ای که امکان سفارشی‌سازی وجود داشته باشد اما اطمینان حاصل شود برخی ویژگی‌های ایمیل اصلی در حین تبدیل حفظ می‌شوند.

  1. یک نمونه از MapiConversionOptions و ویژگی‌های آن را پیکربندی کنید.
  2. تبدیل MailMessage شیء به MapiMessage شیء با استفاده از گزینه‌های تبدیل پیکربندی‌شده.
MailMessage eml = MailMessage.Load("email.eml", new EmlLoadOptions());

// Create an instance of MapiConversionOptions
var conversionOptions = new MapiConversionOptions
{
    // Configure MapiConversionOptions
    Format = OutlookMessageFormat.Unicode, // Use Unicode format for MSG
    PreserveEmbeddedMessageFormat = true, // Preserve the format of embedded messages
    PreserveOriginalAddresses = true, // Keep original email addresses
    PreserveOriginalDates = true, // Preserve original dates
    PreserveEmptyDates = false, // Generate new dates if original are empty
    RemoveSignature = false, // Do not remove the signature
    UseBodyCompression = true, // Enable RTF body compression
    ForcedRtfBodyForAppointment = false // Disable forced RTF body for appointments
};

// Convert MailMessage to MapiMessage
MapiMessage msg = MapiMessage.FromMailMessage(eml, conversionOptions);

ویژگی‌های موجود در MapiConversionOptions

  • فرمت ASCII: برمی‌گرداند MapiConversionOptions پیکربندی شده با OutlookMessageFormat به عنوان ASCII، با PreserveSignature به false تنظیم شود و UseBodyCompression به false تنظیم شود. این گزینه زمانی مفید است که به یک تبدیل به فرمت ساده ASCII نیاز دارید.

  • UnicodeFormat: برمی‌گرداند MapiConversionOptions با OutlookMessageFormat به Unicode تنظیم شود، و هر دو PreserveSignature و UseBodyCompression بر روی false تنظیم شود. از این گزینه برای پشتیبانی گسترده‌تر از کاراکترها در فایل‌های MSG استفاده کنید.

  • ForcedRtfBodyForAppointment: وقتی روی true تنظیم شود، استفاده از بدنه RTF برای قرارهای تقویمی را اجبار می‌کند. این برای اطمینان از سازگاری با برخی کلاینت‌های ایمیل مفید است. مقدار پیش‌فرض true است.

  • Format: فرمت خروجی برای فایل MSG را مشخص می‌کند. می‌تواند روی یکی از دو گزینه تنظیم شود OutlookMessageFormat.ASCII یا OutlookMessageFormat.Unicode، کنترل می‌کند آیا MSG تبدیل‌شده باید از رمزگذاری ASCII یا Unicode استفاده کند.

  • PreserveEmbeddedMessageFormat: تعیین می‌کند آیا فرمت اصلی EML پیام‌های توکار در هنگام تبدیل به MapiMessage. تنظیم آن به true تضمین می‌کند ایمیل‌های توکار ساختار اصلی خود را حفظ کنند. مقدار پیش‌فرض false است.

  • PreserveEmptyDates: وقتی روی true تنظیم شود، تاریخ‌های ذخیره‌سازی و تغییر اصلی از EML نگه‌داشته می‌شود. در غیر این صورت، اگر تاریخ‌های اصلی خالی باشند، تاریخ‌های جدید تولید می‌شوند.

  • PreserveOriginalAddresses: اگر روی true تنظیم شود، آدرس‌های ایمیل اصلی بدون اعتبارسنجی حفظ می‌شوند. این زمانی مفید است که با آدرس‌های ایمیلی کار می‌کنید که ممکن است با استانداردهای سختگیرانه سازگار نباشند اما باید به‌همین‌صورت نگه داشته شوند. مقدار پیش‌فرض false است.

  • PreserveOriginalDates: اطمینان می‌دهد تاریخ‌های ارسال و دریافت اصلی در هنگام تبدیل حفظ شوند. تنظیم آن به true این تاریخ‌ها را برای دقت تاریخی بهتر نگه می‌دارد.

  • RemoveSignature: کنترل می‌کند آیا امضای دیجیتالی، در صورت وجود، در هنگام تبدیل از پیام حذف شود یا نه. مقدار پیش‌فرض false است، بدین معنی که امضا تا زمان حذف صریح حفظ می‌شود.

  • UseBodyCompression: اگر روی true تنظیم شود، فشرده‌سازی بدنه RTF را فعال می‌کند. این می‌تواند به کاهش حجم فایل MSG کمک کند، به‌ویژه هنگام کار با پیام‌های بزرگ با قالب‌بندی غنی.