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. From、To、Subject の値を次ので指定する 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);