5

添付ファイルを取得し、電子メールをサブフォルダーに分類することで、リソース メールボックスを管理する C# プログラムがあります。最近、クライアントが署名付きの電子メールを送信したいという問題が発生したため、プログラムが添付ファイルを取得すると、添付ファイルの代わりに「smime.p7m」という名前のファイルが保存されます。このファイルは、Outlook で電子メールを確認するときに存在せず、必要な添付ファイルのみが存在します。ただし、コードをステップ実行すると、電子メール オブジェクトに一覧表示される添付ファイルにはこの.p7mファイルのみが含まれます。

メールから MIME コンテンツを取得しましたが、それは単なるバイトです。テキスト エディターで .p7m ファイルを見ると、一番下のファイルに必要なファイルの内容が表示されます (究極のいじめ)。目的のコンテンツの .p7m ファイルを解析せずに元の添付ファイルを取得するにはどうすればよいですか?

Exchange サーバーは 2010 SP2 であり、これはすべて EWS マネージ API を利用する C# プログラムを介して行われます。

4

5 に答える 5

3

MimeKit (MIME パーサー + S/MIME および PGP サポート) とMailKit (SMTP、POP3、および/または IMAP が必要な場合) を確認してください。

GitHub プロジェクトのメイン ページのドキュメントに、MimeKit の復号化および署名検証 API の使用方法の例をいくつか書きました。

于 2014-02-08T01:04:58.077 に答える
1

NuGet からアクセスできる OpenPOP.NET と EWS マネージ API を使用して、特定の電子メールの MIME コンテンツに埋め込まれた添付ファイルを取得することができました。使った

System.Exchange.WebServices.Data.Item email = new System.Exchange.WebServices.Data.Item(myEmail);
OpenPop.Mime.Message message = new OpenPop.Mime.Message(email.MimeContent.Content);
List<OpenPop.Mime.MessagePart> validMessageParts = message.FindAllAttachments().Where(x => x.FileName.Contains(".csv") == true || x.FileName.Contains(".xlsx") == true || x.FileName.Contains(".xls") == true).ToList<MessagePart>();

foreach (MessagePart messagePart in validMessageParts)
{
  if (messagePart != null)
  {
    using (FileStream fileStream = new FileStream(savingPath + messagePart.ContentDisposition.FileName, FileMode.Create, FileAccess.ReadWrite))
    {
        messagePart.Save(fileStream);
    }
  }
}

特定の電子メールのすべてのcsv、xlsx、およびxlsを、選択したディレクトリに保存します。

于 2014-02-14T08:30:27.353 に答える