C#에서 이메일 첨부 파일 및 임베디드 객체 관리

이메일 첨부 파일 관리

이메일 첨부 파일은 이메일 메시지와 함께 전송되는 파일입니다. 파일은 별도의 메시지로도 전송될 수 있고, 첨부된 메시지의 일부로도 전송될 수 있습니다. 그 Attachment 클래스는 MailMessage 클래스. 모든 메시지는 본문을 포함합니다. 본문 외에 추가 파일을 전송하려면 첨부 파일로 전송되며, 이는 다음 클래스의 인스턴스로 표현됩니다 Attachment 클래스. 첨부 파일 수에는 제한이 없지만 첨부 파일 크기는 메일 서버에 의해 제한됩니다. 예를 들어 Gmail은 10MB 초과 파일을 지원하지 않습니다.

첨부 파일 추가

이메일에 첨부 파일을 추가하려면 다음 단계를 따르세요:

  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. refAttach라는 새로운 ReferenceAttachment 객체를 생성하고, 첨부 파일 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 가져오기

Aspose.Email API는 첨부 헤더에서 첨부 파일의 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. 보낸 사람, 받는 사람 및 제목 값을 지정합니다 MailMessage 인스턴스.
  3. 다음의 인스턴스를 생성합니다. AlternateView 클래스.
  4. 다음의 인스턴스를 생성합니다. LinkedResource 클래스.
  5. 포함된 개체를 다음에 로드합니다 LinkedResourceCollection.
  6. 로드된 포함된 개체를 다음에 추가합니다 MailMessage 클래스 인스턴스.
  7. 다음 추가 AlternateView 인스턴스를 MailMessage 클래스 인스턴스.

아래 코드 스니펫은 일반 텍스트와 HTML 본문을 모두 포함하고 HTML에 이미지가 포함된 이메일 메시지를 생성합니다.

|이메일에 포함된 이미지| | :- | |todo:image_alt_text| 포함된 개체를 원하는 만큼 보낼 수 있습니다. 첨부 파일 크기는 메일 서버에 의해 제한됩니다. 예를 들어 Gmail은 10MB를 초과하는 파일을 지원하지 않습니다. 아래 코드 스니펫은 이메일에 개체를 포함하는 방법을 보여줍니다.

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);

임베디드 객체 처리

임베디드 객체는 한 애플리케이션으로 생성된 후 다른 애플리케이션이 만든 문서나 파일에 포함된 객체입니다. 예를 들어, Microsoft Excel 스프레드시트를 Microsoft Word 보고서에 임베드하거나, 비디오 파일을 Microsoft 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 본문에서 외부 링크 이미지 리소스를 추출하고 Aspose.Email for .NET으로 HTML 출력에 삽입합니다. 설정 HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments True로 설정하면 HTML 본문에 있는 연결된 이미지와 기타 리소스가 추출되어 삽입됩니다. 이는 연결된 콘텐츠가 있는 메시지의 원본 모습을 보존하는 데 도움이 됩니다. 다음 코드 샘플은 이메일 메시지를 로드하고 외부 HTML 리소스를 첨부 파일로 추출하며, 선택적으로 리소스 렌더링 이벤트를 처리하고, Aspose.Email for .NET을 사용해 메시지를 HTML 파일로 저장하는 방법을 보여줍니다.

// 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);