Невозможно отправить отображаемое электронное письмо, используя выкуп в c # - PullRequest
0 голосов
/ 04 марта 2011

Я создал новое сообщение электронной почты, используя Redemption-Data-Objects в C #.После вызова Display () окно открывается - все выглядит отлично.

Когда я пытаюсь отправить сообщение, нажимая кнопку «отправить», я получаю одно из следующих сообщений (перевод с немецкого ...): «Интерфейс обмена сообщениями возвратил неизвестную ошибку.перезапустить outlook, если проблема .... "или" Элемент не может быть отправлен! "

Когда я использую метод отправки, все работает нормально, электронное письмо будет отправлено.

Я попробовал OutlookSpy, чтобы найти решение - когда я пытаюсь отправить сообщение, я получаю код возврата 0x80020009.

Вот пример кода:

Redemption.RDOSession session = new Redemption.RDOSession();
session.Logon(null, null, false, null, null, null);
Redemption.RDOFolder folder = session.GetDefaultFolder(Redemption.rdoDefaultFolders.olFolderOutbox);
Redemption.RDOMail newMail = folder.Items.Add(Redemption.rdoItemType.olMailItem);

// no difference when using .Add
newMail.Recipients.AddEx("a.b@blabla.com","a.b@blabla.com", "SMTP", Redemption.rdoMailRecipientType.olTo);
newMail.Recipients.ResolveAll();
newMail.Subject = "Testmail-Subject";
newMail.HTMLBody = "Test";
newMail.Display(false, Type.Missing);

Кто-нибудь знает решение для этогопроблема?

касается Мартина

PS: я использую Office 2010 (немецкий) Visual Studio 2010 (английский) с целевой платформой 2.0 в моем проекте) в Windows 7 (английский).

1 Ответ

0 голосов
/ 08 марта 2011

OK ...

Я нашел «ошибку».

Поскольку мой сеанс вышел за пределы области действия, контекст был потерян и произошла ошибка.

Вот решение:

// Event object to wait for
System.Threading.ManualResetEvent _manualEvent = new ManualResetEvent(false);

private void DisplayMail() {
    ...
    // register an eventhandler for the close event
    _newMail.OnClose += new Redemption.IRDOMailEvents_OnCloseEventHandler(_newMail_OnClose);

    _newMail.Recipients.Add(txtTo);
    _newMail.Recipients.ResolveAll();
    _newMail.Subject = subject;
    _newMail.HTMLBody = body;

    _newMail.Display(false, null);
    // wait here until the message-window is closed...
    _manualEvent.WaitOne();
}

private void _newMail_OnClose()
{
    _manualEvent.Set();
}
...