Outlook Interop отправить сообщение из учетной записи

StackOverflow https://stackoverflow.com/questions/2847419

  •  27-09-2019
  •  | 
  •  

Вопрос

Ладно, характеристики несколько изменились.Может быть, кто-нибудь сможет помочь мне с этой новой проблемой.

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top