2

Outlook アドインの開発は初めてです。メールがドラッグされたフォルダーの名前を出力する簡単なアプリケーションを作成していました。IE: 受信トレイから受信トレイのサブフォルダーへ。私が抱えている問題は、正しい MailItem.Parent.Name が返されることがありますが、ほとんどの場合、宛先ではなくソースフォルダーです。宛先の ItemAdd に対してイベントが発生する必要があるため、これがなぜなのかわかりません。

ここにいくつかのコードがあります:

public Microsoft.Office.Interop.Outlook.Application OutlookApplication;
public Inspectors OutlookInspectors;
public Inspector OutlookInspector;
public MailItem OutlookMailItem;
private MAPIFolder inboxFolder;
private MailItem msg;
private Folder fdr;

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
  OutlookApplication = application as Microsoft.Office.Interop.Outlook.Application;
  OutlookInspectors = OutlookApplication.Inspectors;
  OutlookInspectors.NewInspector += new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(OutlookInspectors_NewInspector);

  inboxFolder = this.OutlookApplication.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);

  foreach (Folder f in inboxFolder.Folders)
  {
    f.Items.ItemAdd += new ItemsEvents_ItemAddEventHandler(InboxItems_ItemAdd);
  }
}

void InboxItems_ItemAdd(object Item)
{
  msg = Item as MailItem;
  fdr = msg.Parent as Folder;

  MessageBox.Show("Folder Name: " + fdr.Name);
}
4

1 に答える 1

0

どうやってItems.ItemAddイベントを発火させるのかわかりません。私はあなたの例を機能させることができなかったので、私は自分の例を作成しました。以下は毎回私のために働きました、そしてそれは常にターゲットフォルダ名を示します。Outlook.Itemsクラスメンバーとしてのコレクションを特に保持しない場合、イベントがトリガーされることはありません。関連するSO投稿を参照してください。

private Outlook.Folder inbox;
private List<Outlook.Items> folderItems = new List<Outlook.Items>();

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    inbox = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
    for (int i = 1; i < inbox.Folders.Count+1; i++)
    {
        folderItems.Add((inbox.Folders[i] as Outlook.Folder).Items);
        folderItems[i - 1].ItemAdd += (item) =>
        {
            Outlook.MailItem msg = item as Outlook.MailItem;
            Outlook.Folder target = msg.Parent as Outlook.Folder;
            string folderName = target.Name;
        };
    }
}
于 2012-09-06T15:13:44.007 に答える