1

好的,这个规格有所改变。也许有人可以帮助我解决这个新问题。

手动地,用户正在做的是在 Outlook(现在是 2007 年)中打开一封新邮件,其中显示了“发件人...”字段。他们打开它,从全局地址列表中选择某个帐户,然后代表该帐户发送消息。

这可能吗?

我可以像这样从全局地址列表中获取 AddressEntry:

AddressList list = null;
foreach (AddressList addressList in _outlookApp.Session.AddressLists)
{
    if (addressList.Name.ToLower().Equals("global address list"))
    {
        list = addressList;
        break;
    }
}

if (list != null)
{
    AddressEntry entry = null;
    foreach (AddressEntry addressEntry in list.AddressEntries)
    {
        if (addressEntry.Name.ToLower().Equals("outgoing mail account"))
        {
            entry = addressEntry;
            break;
        }
    }
}

但我不确定我是否可以从地址条目中创建帐户类型。当他们选择要发送的地址时,这似乎是手动发生的。我如何在互操作中反映这个?

谢谢!

(我原来的问题):

我开发了一个小型 C# 程序来使用 Outlook 2007 互操作发送电子邮件。客户要求不要使用默认帐户发送邮件 - 他们有一个需要使用的辅助帐户。

没问题 - 我使用 Microsoft.Office.Interop.Outlook.Account 类来访问可用的帐户,并选择正确的帐户。

现在,事实证明他们需要这个才能在 Outlook 2003 中工作。当然,Account 类在 Outlook 互操作 11.0 中不存在。

如何使用 Outlook 2003 实现相同的目标?

提前致谢。

4

2 回答 2

4

叹息......似乎我在 StackOverflow 上回答了更多我自己的问题......

无论如何,这就是它的完成方式:

(我认为它适用于 Outlook Interops 2003 和 2007,并且不使用 Redemption。它甚至可能是 Redemption 的这一部分的工作原理,尽管我没有看过。)

message.PropertyAccessor
    .SetProperty("http://schemas.microsoft.com/mapi/proptag/0x00410102",
    message.PropertyAccessor.StringToBinary(entry.ID));

此架构条目和十六进制标识符对应于 MAPI 属性 PR_SENT_REPRESENTING_ENTRYID。'entry' 变量是在问题的代码片段中获得的。

花了相当多的时间在网上搜索才能找到完成这项工作的部分。发现我必须在一个地方使用 PR_SENT_REPRESENTING_ENTRYID 属性,在另一个地方使用 0x00410102 == PR_SENT_REPRESENTING_ENTRYID 的事实,以及你必须调用'StringToBinary'的事实?......甚至不要问...... :) 感谢发布所有作品的人!

于 2010-05-24T07:38:20.850 回答
0

您是否必须使用OOM,您可以使用System.Net.Mail吗?如果 ts 只是简单的邮件发送。我想这取决于你在做什么?

如果不是,我认为您将不得不使用 Extended Mapi 并且将处于像Redemption这样的图书馆领域。

于 2010-05-17T15:14:54.767 回答