مدیریت پیوست‌های ایمیل و اشیای توکار در C#

مدیریت پیوست‌های ایمیل

یک پیوست ایمیل فایلی است که همراه با پیام ایمیل ارسال می‌شود. فایل می‌تواند به‌عنوان پیام جداگانه یا بخشی از پیام که به آن پیوست شده است ارسال شود. Attachment کلاس با MailMessage کلاس. تمام پیام‌ها شامل بدنه هستند. علاوه بر بدنه، ممکن است بخواهید فایل‌های اضافی ارسال کنید. اینها به عنوان پیوست‌ها ارسال می‌شوند و به صورت یک نمونه از Attachment کلاس. می‌توانید هر تعداد پیوست ارسال کنید اما اندازه پیوست توسط سرور ایمیل محدود می‌شود. به عنوان مثال Gmail از فایل‌های بزرگتر از 10 مگابایت پشتیبانی نمی‌کند.

افزودن پیوست

برای افزودن پیوست به ایمیل، لطفاً این مراحل را دنبال کنید:

  1. یک نمونه از MailMessage کلاس.
  2. یک نمونه از Attachment کلاس.
  3. بارگذاری پیوست در Attachment نمونه.
  4. افزودن Attachment نمونه به MailMessage نمونه.

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

// Create an instance of MailMessage class
var eml = new MailMessage
{
    From = "sender@from.com",
    To = "receiver@to.com",
    Subject = "This is message",
    Body = "This is body"
};

// Load an attachment
var attachment = new Attachment("1.txt");

// Add Multiple Attachment in instance of MailMessage class and Save message to disk
eml.Attachments.Add(attachment);

eml.AddAttachment(new Attachment("1.jpg"));
eml.AddAttachment(new Attachment("1.doc"));
eml.AddAttachment(new Attachment("1.rar"));
eml.AddAttachment(new Attachment("1.pdf"));
eml.Save("AddAttachments.eml");

در بالا، توضیح دادیم چگونه با Aspose.Email پیوست‌ها را به پیام ایمیل خود اضافه کنید. در ادامه نشان می‌دهیم چگونه پیوست‌ها را حذف کنید و اطلاعات آنها را روی صفحه نمایش دهید.

افزودن پیوست مرجع

یک پیوست مرجع نوعی پیوست است که به جای شامل کردن خود فایل یا مورد در پیام ایمیل، یک پیوند یا مرجع به یک فایل یا مورد را شامل می‌شود. وقتی گیرندگان ایمیل بر روی پیوست مرجع کلیک کنند، می‌توانند فایل مرتبط را در صورت داشتن مجوزهای لازم دسترسی پیدا کنند. با استفاده از پیوست مرجع، می‌توانید پیام ایمیل کوچکتری ارسال کنید و اطمینان حاصل کنید که همه دسترسی به جدیدترین نسخه فایل یا مورد را دارند.

قطعه کد زیر نشان می‌دهد چگونه یک پیوست مرجع به ایمیل اضافه شود. این کد مراحل زیر را انجام می‌دهد:

  1. فایل پیام ایمیل را با استفاده از MailMessage.Load() متد.
  2. یک شیء ReferenceAttachment جدید به نام refAttach ایجاد می‌کند و URL پیوست "https://[attach_uri]" را به عنوان پارامتر به سازنده‌اش می‌فرستد.
  3. نام پیوست را با استفاده از "Document.docx" تنظیم می‌کند Name ویژگی شیء refAttach.
  4. نوع فراهم‌کننده پیوست را تنظیم می‌کند به AttachmentProviderType.OneDrivePro با استفاده از ProviderType ویژگی شیء refAttach.
  5. نوع مجوز پیوست را تنظیم می‌کند به AttachmentPermissionType.AnyoneCanEdit با استفاده از PermissionType ویژگی شیء refAttach.
  6. شیء refAttach را به پیوست‌ها مجموعهٔ شیء eml با استفاده از Add() متد.
var eml = MailMessage.Load("fileName");

var refAttach = new ReferenceAttachment("https://[attach_uri]")
{
    Name = "Document.docx",
    ProviderType = AttachmentProviderType.OneDrivePro,
    PermissionType = AttachmentPermissionType.AnyoneCanEdit
};

eml.Attachments.Add(refAttach);

حذف پیوست

برای حذف یک پیوست، مراحل زیر را دنبال کنید:

  • یک نمونه از Attachment کلاس.
  • پیوست را در نمونهٔ Attachment کلاس.
  • پیوست را به نمونهٔ MailMessage کلاس.
  • پیوست‌ها را از نمونهٔ Attachment کلاس با استفاده از MailMessage نمونهٔ کلاس.

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

// Create an instance of MailMessage class
var eml = new MailMessage {From = "sender@sender.com", To = "receiver@gmail.com"};

// Load an attachment
var attachment = new Attachment("1.txt");
eml.Attachments.Add(attachment);

// Remove attachment from your MailMessage
eml.Attachments.Remove(attachment);

نمایش نام فایل پیوست

برای نمایش نام فایل پیوست، مراحل زیر را دنبال کنید:

  1. در پیوست‌های پیام ایمیل پیمایش کنید و هر پیوست را ذخیره کنید.
  2. نام هر پیوست را روی صفحه نمایش دهید.

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

var eml = MailMessage.Load("Attachments.eml");

foreach (var attachment in eml.Attachments)
{
    // Display the the attachment file name
    Console.WriteLine(attachment.Name);
}

استخراج پیوست‌های ایمیل

این موضوع توضیح می‌دهد چگونه یک پیوست را از یک فایل ایمیل استخراج کنید. یک پیوست ایمیل فایلی است که همراه با پیام ایمیل ارسال می‌شود. این فایل می‌تواند به عنوان یک پیام جداگانه و همچنین بخشی از پیام که به آن پیوست شده است، ارسال شود. تمام پیام‌های ایمیل گزینه‌ای برای ارسال فایل‌های اضافی دارند. این فایل‌ها به‌عنوان پیوست ارسال می‌شوند و به‌عنوان نمونه‌هایی از Attachment کلاس. Attachment کلاس با MailMessage کلاسی برای کار با پیوست‌ها. برای استخراج پیوست‌ها از یک پیام ایمیل، مراحل زیر را دنبال کنید:

  • یک نمونه از MailMessage کلاس.
  • یک فایل ایمیل را به MailMessage نمونه.
  • یک نمونه از Attachment کلاس را استفاده کنید و در یک حلقه تمام پیوست‌ها را استخراج کنید.
  • پیوست را ذخیره کنید و روی صفحه نمایش دهید.

|پیوست‌های استخراج‌شده در ایمیل| | :- | |todo:image_alt_text| قطعه کد زیر نشان می‌دهد چگونه پیوست‌های ایمیل را استخراج کنید.

var eml = MailMessage.Load("Message.eml", new MsgLoadOptions());

foreach (var attachment in eml.Attachments)
{
    attachment.Save("MessageEmbedded_out.eml");
    Console.WriteLine(attachment.Name);
}

دریافت Content-Description از پیوست

API Aspose.Email امکان خواندن Content-Description یک پیوست از هدر پیوست را فراهم می‌کند. قطعه کد زیر نشان می‌دهد چگونه توضیح محتوا را از پیوست استخراج کنید.

var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].Headers["Content-Description"]);

شناسایی پیام‌های توکار

قطعه کد زیر نشان می‌دهد چگونه تعیین کنید آیا پیوست یک پیام جاسازی‌شده است یا نه.

var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");

Console.WriteLine(eml.Attachments[0].IsEmbeddedMessage
    ? "Attachment is an embedded message."
    : "Attachment isn't an embedded message.");

دریافت پیوست‌ها از ایمیل‌های امضا شده

ایمیل‌های امضاشده شامل یک پیوست smime.p7m هستند. این به این معنی است که ایمیل توسط SMIME رمزگذاری شده است. فرمت فایل smime.p7m امضای دیجیتال است. برای مشاهده محتوای این ایمیل از RemoveSignature متد. این متد یک MailMessage شیء بدون امضای دیجیتال.

var signedEml = MailMessage.Load("signed.eml");
        
if (signedEml.IsSigned)
{
    for (var i = 0; i < signedEml.Attachments.Count; i++)
    {
        Console.WriteLine($@"Signed email attachment{i}: {signedEml.Attachments[i].Name}");
    }
    
    // The email is signed. Remove a signature.
    var eml = signedEml.RemoveSignature();
    
    Console.WriteLine(@"Signature removed.");

    for (var i = 0; i < eml.Attachments.Count; i++)
    {
        Console.WriteLine($@"Email attachment{i}: {eml.Attachments[i].Name}");
    }
}

مدیریت تصاویر داخلی

افزودن تصویر داخلی به بدنه ایمیل

این LinkedResource کلاس با MailMessage کلاس برای توکار کردن اشیاء در پیام ایمیل شما. برای افزودن یک شیء توکار، مراحل زیر را دنبال کنید

  1. یک نمونه از MailMessage کلاس.
  2. مقادیر From، To و Subject را در MailMessage نمونه.
  3. یک نمونه از AlternateView کلاس.
  4. یک نمونه از LinkedResource کلاس.
  5. بارگذاری یک شیء جاسازی‌شده در LinkedResourceCollection.
  6. شیء جاسازی‌شدهٔ بارگذاری‌شده را به MailMessage نمونهٔ کلاس.
  7. افزودن AlternateView نمونه به MailMessage نمونهٔ کلاس.

قطعات کد زیر یک پیام ایمیل با هر دو بدنهٔ متن ساده و HTML و یک تصویر جاسازی‌شده در HTML تولید می‌کنند

|تصویر جاسازی‌شده در ایمیل| | :- | |todo:image_alt_text| می‌توانید هر تعداد اشیاء جاسازی‌شده ارسال کنید. حجم پیوست توسط سرور ایمیل محدود می‌شود. به عنوان مثال، Gmail از فایل‌های بزرگتر از ۱۰ مگابایت پشتیبانی نمی‌کند. قطعات کد زیر نشان می‌دهند چگونه اشیاء را به یک ایمیل جاسازی کنید.

var eml = new MailMessage
{
    From = "AndrewIrwin@from.com",
    To = "SusanMarc@to.com",
    Subject = "This is an email"
};

// Create the plain text part It is viewable by those clients that don't support HTML
var plainView =
    AlternateView.CreateAlternateViewFromString("This is my plain text content", null, "text/plain");

// Create the HTML part.To embed images, we need to use the prefix 'cid' in the img src value.
// The cid value will map to the Content-Id of a Linked resource. Thus <img src='cid:barcode'>
// will map to a LinkedResource with a ContentId of 'barcode'.
var htmlView =
    AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:barcode>", null,
        "text/html");

// Create the LinkedResource (embedded image) and Add the LinkedResource to the appropriate view
var barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.Jpeg)
{
    ContentId = "barcode"
};

eml.LinkedResources.Add(barcode);
eml.AlternateViews.Add(plainView);
eml.AlternateViews.Add(htmlView);

eml.Save("EmbeddedImage_out.msg", SaveOptions.DefaultMsgUnicode);

حذف تصویر داخلی از بدنه ایمیل

LinkedResourceCollection دسترس‌پذیر از طریق MailMessage.LinkedResources ویژگی. این LinkedResourceCollection مجموعه روشی برای حذف کامل اشیاء جاسازی‌شده اضافه شده به یک پیام ایمیل فراهم می‌کند. از نسخه بارگذاری‌شدهٔ LinkedResourceCollection.RemoveAt روشی برای حذف تمام آثار یک شیء جاسازی‌شده از یک پیام ایمیل.

کد نمونه زیر نشان می‌دهد چگونه اشیاء جاسازی‌شده را از یک پیام ایمیل حذف کنید.

//Load the test message with Linked Resources
var eml = MailMessage.Load("EmlWithLinkedResources.eml");

//Remove a LinkedResource
eml.LinkedResources.RemoveAt(0, true);

//Now clear the Alternate View for linked Resources
eml.AlternateViews[0].LinkedResources.Clear(true);

مدیریت اشیای توکار

یک شیء توکار شیئی است که با یک برنامه ساخته شده و داخل یک سند یا فایلی که توسط برنامه دیگری ایجاد شده، گنجانده می‌شود. برای مثال، یک جدول‌کار Excel می‌تواند در یک گزارش Word توکار شود، یا یک فایل ویدئویی می‌تواند در یک ارائه PowerPoint توکار شود. وقتی فایلی توکار می‌شود، به‌جای اینکه در سند دیگری درج یا چسبانده شود، قالب اصلی خود را حفظ می‌کند. سند توکار می‌تواند در برنامه اصلی باز و اصلاح شود.

استخراج اشیای توکار

این موضوع توضیح می‌دهد چگونه اشیای توکار را از یک فایل ایمیل استخراج کنیم. سند توکار می‌تواند در برنامه اصلی باز شده و اصلاح شود. برای استخراج یک شیء توکار از پیام ایمیل، مراحل زیر را دنبال کنید:

  1. یک نمونه از MailMessage کلاس.
  2. یک پرونده ایمیل را در MailMessage نمونه.
  3. یک حلقه ایجاد کنید و یک نمونه از Attachment کلاس در آن.
  4. پیوست را ذخیره کنید و روی صفحه نمایش دهید.
  5. آدرس فرستنده و دریافت‌کننده را در MailMessage نمونه.
  6. ارسال ایمیل با استفاده از SmtpClient کلاس.

قطعه کد زیر اشیای جاسازی‌شده را از یک ایمیل استخراج می‌کند.

|اشیای جاسازی‌شده استخراج‌شده در ایمیل| | :- | |todo:image_alt_text| قطعه کد زیر نشان می‌دهد چگونه اشیای جاسازی‌شده را استخراج کنید.

var eml = MailMessage.Load("Message.msg", new MsgLoadOptions());

foreach (var attachment in eml.Attachments)
{
    attachment.Save("MessageEmbedded_out.msg");
    Console.WriteLine(attachment.Name);
}

استخراج تصاویر پیوندی در ایمیل‌های HTML

استخراج منابع تصویر پیوندی به طور خارجی از بدنه HTML و جاسازی آنها در خروجی HTML با Aspose.Email برای .NET. تنظیم HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments به True تنظیم کنید، و تصاویر پیوندی و سایر منابع در بدنه HTML استخراج و جاسازی می‌شوند. این کمک می‌کند تا ظاهر اصلی پیام‌هایی که محتواهای پیوندی دارند حفظ شود. نمونه کد زیر نشان می‌دهد چگونه یک پیام ایمیل را بارگذاری کنید، منابع خارجی HTML آن را به عنوان پیوست استخراج کنید، به‌صورت اختیاری رویدادهای رندر منبع را مدیریت کنید، و سپس پیام را به صورت فایل HTML با استفاده از Aspose.Email برای .NET ذخیره کنید.

// Load the email message
var mailMessage = MailMessage.Load("input.eml");

// Set options to extract external HTML resources
var options = new HtmlSaveOptions();
options.ExtractHTMLBodyResourcesAsAttachments = true;

// Optional: Handle resource rendering events
options.ResourceHtmlRendering += (sender, e) =>
{
    Console.WriteLine(e.PathToResourceFile + " " + ((Attachment)sender).ContentId);
};

// Save the HTML representation of the email
mailMessage.Save("output.html", options);