Outlook Interop Отправить сообщение из учетной записи - PullRequest
1 голос
/ 17 мая 2010

Хорошо, спецификации несколько изменились. Может быть, кто-то может помочь мне с этой новой проблемой.

Вручную пользователь открывает новое сообщение в 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;
        }
    }
}

Но я не уверен, что могу создать тип учетной записи из записи адреса. Кажется, это происходит вручную, когда они выбирают адрес для отправки. Как мне отразить это в Interop?

Спасибо!

(Мой оригинальный вопрос):

Я разработал небольшую программу на C # для отправки электронной почты с помощью взаимодействия с Outlook 2007. Клиент требовал, чтобы почта не отправлялась с использованием учетной записи по умолчанию - у него была дополнительная учетная запись, которую он использовал.

Нет проблем - я использовал класс Microsoft.Office.Interop.Outlook.Account для доступа к имеющимся аккаунтам и выбрал правильный.

Теперь выясняется, что это необходимо для работы в Outlook 2003. Конечно, класс Account не существует во взаимодействии Outlook 11.0.

Как мне добиться того же с Outlook 2003?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 24 мая 2010

Вздох ... кажется, я отвечаю на больше моих собственных вопросов о 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'? ... Даже не спрашивать ... :) люди, у которых были опубликованы все произведения!

0 голосов
/ 17 мая 2010

Вам вообще нужно использовать OOM, не могли бы вы использовать System.Net.Mail? если только простую почту отправить. Я полагаю, это зависит от того, что ты еще делаешь?

Если нет, я думаю, что вам придется использовать Extended Mapi, и вы будете в царствах библиотек, таких как Redemption .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...