Outlook Interop从帐户发送消息

时间:2010-05-17 07:58:37

标签: interop outlook account

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

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

这可能吗?

我可以从全局地址列表中获取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;
        }
    }
}

但我不确定我是否可以从地址输入中创建帐户类型。当他们选择要发送的地址时,它似乎是手动发生的。如何在Interop中镜像?

谢谢!

(我的原始问题):

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

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

现在,事实证明他们需要在Outlook 2003中使用它。当然,Outlook interop 11.0中不存在Account类。

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

提前致谢。

2 个答案:

答案 0 :(得分: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'的事实?...甚至不要问... :)感谢发布了所有作品的人!

答案 1 :(得分:0)

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

如果不是,我认为你将不得不使用扩展Mapi,并且会在像Redemption这样的图书馆领域。