Delphi: как создать электронное письмо в Outlook без использования MAPI?

В этом вопросе я только что задал Я сказал, что готовлю сообщения Outlook, отправляя данные из моего приложения в Outlook с помощью MAPI.

Но в этом случае у меня есть одно серьезное препятствие: я не могу отправить форматированный текст для тела сообщения. В моей форме есть поле rtf, я удаляю данные rtf, а затем готовлю почту Outlook.

Как можно сделать то же самое (создать исходящее письмо Outlook, готовое к отправке), не используя mapi и сохраняя форматирование, каким-то образом "rtf to html" ... У кого-нибудь уже есть этот код?


person LaBracca    schedule 05.02.2011    source источник
comment
Как вы думаете, почему использование MAPI связано с использованием форматирования? Мне кажется ортогональным.   -  person Paul-Jan    schedule 05.02.2011
comment
Вам действительно нужно использовать Outlook для составления и отправки электронного письма? Почему бы не отправить его напрямую через службу SMTP, используя Indy и IdSmtp?   -  person Warren P    schedule 07.02.2011
comment
@ Paul-Jan Я не эксперт по MAPI, я просто использую код, написанный кем-то другим, который готовит электронное письмо для отправки через Outlook. Так что для меня MAPI - это новый мир, и я мог бы его изучить, но я задаю вопросы, чтобы не изучать бесполезные вещи.   -  person LaBracca    schedule 07.02.2011
comment
@Warren P Нет, я использую оба. Я даю пользователю возможность отправлять напрямую (с помощью IdSmtp, как вы сказали) или через Outlook. Есть 2 кнопки. Почему это? По историческим причинам (скажем, обратная совместимость с удобством использования).   -  person LaBracca    schedule 07.02.2011


Ответы (3)


Использование оболочек компонентов Ole Automation Server, предоставляемых Delphi. Пример, который я недавно откопал для другого вопроса, можно найти здесь: Самый простой способ создать почту Outlook 2010 из Delphi?

person Marjan Venema    schedule 05.02.2011
comment
Спасибо, изучу этот пример, это хороший ответ на мой вопрос. - person LaBracca; 07.02.2011

Вы можете использовать данные о совместной работе Microsoft. Объекты, но он ограничен исправлением безопасности Outlook. Объекты данных выкупа, которые являются частью Outlook Redemption, работают без исправления безопасности. Я использовал RDO для создания писем в формате RTF в Outlook.

Вот пример процедуры с использованием RDO для создания электронного письма, вставки текста в формате RTF и отображения электронного письма, чтобы его можно было отредактировать перед отправкой.

procedure TForm1.RTFemail;
var
  Session, Drafts, Mail, Recip: OleVariant;
  s : string;
begin
  Session := CreateOleObject('Redemption.RDOSession');
  Session.Logon;
  Drafts := Session.GetDefaultFolder(olFolderDrafts);
  Mail := Drafts.Items.Add;
  Recip := Mail.Recipients.Add('[email protected]');
  Recip.Type := olTo;
  Recip.Resolve;
  Mail.Subject := 'Testing Redemption';
  s := '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil'+
    '\fcharset0 Arial;}}\viewkind4\uc1\pard\fs16 This is \ul '+
    'underlined\ulnone , \i italic\i0 , and \b bold\b0 .\par }';
  Mail.RTFBody := s;
  Mail.Save;
  Mail.Display;
end;

В Outlook 2003 он производит следующее:

введите описание изображения здесь

person crefird    schedule 05.02.2011
comment
Обратите внимание, что выкуп осуществляется через MAPI. Тем не менее, требование «no mapi», вероятно, неуместно. - person Paul-Jan; 06.02.2011
comment
Redemption использует Extended Mapi, на который не влияет исправление безопасности. - person Remko; 06.02.2011
comment
Похоже, что CDO устарел: начиная с Exchange 2007 ни клиентские библиотеки Messaging API (MAPI), ни CDO 1.2.1 не входят в состав базовой установки продукта. - en.wikipedia.org/wiki/Collaboration_Data_Objects - person mjn; 06.02.2011
comment
Redemption RDO использует MAPI, поэтому в этом нет необходимости. Я добавил образец процедуры и снимок экрана создаваемого им электронного письма. - person crefird; 09.02.2011

Веб-службы Exchange (EWS) были введены в Exchange 2007 в качестве альтернативы протоколу MAPI, это документированный протокол на основе SOAP.

Я предполагаю, что он не запустит или не активирует клиент Outlook, но можно создать новое сообщение электронной почты в папке «Черновик» (см. CreateItem ссылка).

документация по основным элементам показывает, что поддерживаются простой текст и HTML.

person mjn    schedule 06.02.2011