Outlook .msgファイルを読み取る唯一の方法(件名、添付ファイルなどの追加のメタデータを取得するため)は、Outlook API(Application.Session.OpenSharedItem()
メソッド)を使用することだと思います。
この場合、MSOFficeまたはMSOutlookがインストールされていないアプリケーションサーバーでこのコードを実行する方法を探しています。エラーが発生します
System.ArgumentException: progId not found. Outlook.Application
もちろん、これはOutlookアプリケーションがないためです。
OpenSharedItemメソッドを機能させるためにDLLなどをインストールする方法はありますか?可能であれば、完全なクライアントをインストールする必要はありません。
または、Outlookなどの重要な依存関係を必要とせずに.msgファイルを解析する方法はありますか?
MSG .NET は、.NETFramework用のMicrosoftOutlook.msgファイルAPIです。 APIを使用すると、.msgファイルなどを簡単に作成/読み取り/解析/変換できます。 APIを機能させるために、MicrosoftOutlookをマシンまたはその他のサードパーティのアプリケーションやライブラリにインストールする必要はありません。
これがメッセージファイルの添付ファイルを読み取るための解決策です
try
{
if (fileInfo.Extension.ToLower().Equals(".msg"))
{
string referenceNumber = "";
if (char.IsDigit(fileInfo.Name.First()))
{
referenceNumber = new string(fileInfo.Name.SkipWhile(c => !char.IsDigit(c)).TakeWhile(char.IsDigit).ToArray());
}
using (var stream = File.Open(fileInfo.FullName, FileMode.Open, FileAccess.Read))
{
using (var message = new Storage.Message(stream))
{
foreach (Storage.Attachment attachment in message.Attachments.OfType<Storage.Attachment>())
{
if (attachment.IsInline)
continue; //no need to uncompress inline attqach
string opFilename = (referenceNumber.Trim().Length > 0) ? string.Format("{0}\\{1}_{2}", fileInfo.Directory.FullName, referenceNumber, attachment.FileName) : string.Format("{0}\\{1}_{2}", fileInfo.Directory.FullName, RandomString(3), attachment.FileName);
File.WriteAllBytes(opFilename, attachment.Data);
}
}
}
}
}
catch (Exception ex)
{
_log.ErrorFormat("{0} Unable to convert msg file: {1}.", fileInfo.Name, ex.Message);
}
以下のライブラリが使用されます
msgReader.Outlookを使用する;上記のdllをインストールするには、nugetパッケージマネージャーに移動して実行します
Install-Package MSGReader
あなたもすることができます
MSGファイルを明示的に解析します(形式は 文書化 )。
拡張MAPI(C++またはDelphiのみ)を スタンドアロンバージョンのMAPI と一緒に使用します。ルックアップ OpenIMsgOnIStg MSDNの関数。
使用 償還 (MAPIシステムが必要-Outlookまたは スタンドアロンバージョンのMAPI インストールする必要があります-そしてその RDOSession .GetMessageFromMsgFile
方法:
set Session = CreateObject("Redemption.RDOSession") set Msg = Session.GetMessageFromMsgFile("c:\temp\temp.msg") MsgBox Msg.Body