Отправить письмо в формате HTML - PullRequest
2 голосов
/ 23 марта 2009

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

Мы хотели бы украсить письмо и отправить его в формате HTML.
По этой ссылке MSDN ссылка MAPI не подходит для этого http://support.microsoft.com/kb/268440

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

procedure ShowMailDlg(ToName,Address,HTMLMessage: string);
var
    li: integer;
    lMessage: TMapiMessage;
    lRecipArray: array of TMapiRecipDesc;
    lREs: DWord;
begin
    SetLength(lRecipArray,1);
    lRecipArray[0].ulRecipClass:=MAPI_TO;
    lRecipArray[0].lpszName:=pChar(ToName);
    lRecipArray[0].lpszAddress:=pChar(Address);
    lMessage.ulReserved:=0;
    lMessage.lpszSubject:=nil;
    lMessage.lpszNoteText:=pChar(HTMLMessage);
    lMessage.lpszMessageType:= nil;//pChar('HTML');
    lMessage.lpszDateReceived:=nil;
    lMessage.lpszConversationID:=nil;
    lMessage.flFlags:=0;
    lMessage.lpOriginator:=nil;
    lMessage.nRecipCount:=length(lRecipArray);
    lMessage.lpRecips:=PMapiRecipDesc(lRecipArray);
    lMessage.nFileCount:=0;
    lMessage.lpFiles:=PMapiFileDesc(nil);
    lRes:=MapiSendMail(0, 0 , lMessage,MAPI_DIALOG, 0);
end;

У кого-нибудь есть идеи, как я могу это сделать. Возможно, я мог бы автоматизировать Outlook, но я бы хотел, чтобы он не зависел от почтового клиента (следовательно, MAPI)

Спасибо

Обновление: спасибо всем за предложения. Эта особенность заключается в том, что вопрос не так интенсивно используется, поэтому попросить пользователя настроить детали SMTP на самом деле не вариант. Я думаю, что мы будем просто придерживаться простого текста по электронной почте.

Спасибо

Ответы [ 7 ]

4 голосов
/ 24 марта 2009

MAPI не поддерживает сообщения в формате HTML. От Microsoft : «Интерфейс прикладного программирования расширенного обмена сообщениями (MAPI) не следует использовать для создания сообщений в формате HTML. В качестве альтернативы рассмотрите возможность использования объектной модели Microsoft Outlook, CDONTS, CDOSYS, CDOEX или третьей SMTP-контроль. "

Я бы повторил комментарии об отправке через Indy. Я опубликовал модуль, который работает для отправки HTML-сообщений с Indy очень просто здесь или не стесняйтесь писать свои собственные. Если вы действительно хотите сделать сообщения редактируемыми, попробуйте комбинацию WPTools и Indy. WPTools имеет хорошую поддержку для разметки HTML, а затем вы можете отправить получившееся сообщение через Indy.

У меня нет опыта работы с Synapse, поэтому я не могу сказать, насколько легко / сложно это с этим проектом.

3 голосов
/ 27 марта 2009

Если вам нужно обслуживать только клиенты Outlook, вы можете попробовать получить доступ к Outlook с помощью OLE:

procedure SendMail(const aRecipient, aSubject, aNote, aFile: string; Silent, HTML: boolean);
const
  olMailItem = 0;
var
  ii: integer;
  MyOutlook, MyMail: variant;
begin
  //*** Send something via OLE/Outlook...

  //*** Outlook- und Mail-Objekt erstellen...
  MyOutlook := CreateOLEObject('Outlook.Application');
  MyMail    := MyOutlook.CreateItem(olMailItem);

  //*** create a mail message...
  MyMail.To       := aRecipient;
  MyMail.Subject  := aSubject;

  if aNote <> '' then begin
    if HTML then
      MyMail.HTMLBody := aNote
    else begin
      MyMail.Body     := aNote;
    end;
  end;

  //*** Add Attachment...  
  if aFile <> '' then begin
    MyMail.Attachments.Add(aFile);
  end;

  if Silent then
    MyMail.Send
  else
    MyMail.Display;

  MyOutlook := UnAssigned;
end;
2 голосов
/ 12 октября 2009

Для рассылки Delphi я бы порекомендовал SakEmail
http://groups.yahoo.com/group/sakemail/
Если вы используете версию Delphi выше 7,
Вы должны добавить определение версии в файл .inc.
он поставляется с SakEmail, иначе он вернется к
Режим совместимости с Delphi4. После исправления файла inc кажется
хорошо с Delphi 2005.

Кроме того, похоже, что HTML поверх MAPI работает в Thunderbird, но не у других клиентов.

2 голосов
/ 23 марта 2009

Это также возможно при использовании библиотеки Synapse . Конкретный пример доступен на странице с практическими рекомендациями под названием « О MIME и его частях MIME ». Я лично использовал эту технику в нескольких программах для отправки электронной почты в формате HTML.

К сожалению, это не работает через MAPI, вам нужно будет получить информацию о SMTP или IMAP пользователей и обработать эту связь самостоятельно (в библиотеке Synapse есть подпрограммы для этого).

Если вы решили загрузить Synapse, я настоятельно рекомендую получить последнюю версию из хранилища Subversion. Доступное обновление включает поддержку Delphi 2009.

0 голосов
/ 17 декабря 2015

Существует недокументированная функция MAPISendMail для включения тела HTML:

  • установить lpszNoteText в nil (или указатель на пустую строку )
  • добавить вложение HTML

MAPI будет использовать html-вложение в качестве тела письма (не включая вложение).

0 голосов
/ 12 октября 2009

Вам следует рассмотреть возможность использования компонента SMTP, например, Indy, и добавления пользователя, выполняющего отправку, в поле CC или BCC сообщения. Это в значительной степени удовлетворяет необходимость отображения таких отправленных сообщений в собственном почтовом клиенте пользователя, что является основным преимуществом MAPI. Пользователь может даже создать отдельную учетную запись специально для получения таких копий.

Делая это таким образом, вы можете полностью настроить каждую деталь, связанную с отправкой почты (MHTML является одним из таких примеров), включая кэширование всей почты и выполнение отправки в отдельном потоке, или в другое время, и так далее. Кроме того, этот метод более независим от клиента, чем даже MAPI; например, это все еще работает, даже если пользователь использует электронную почту, такую ​​как Gmail.

0 голосов
/ 23 марта 2009

Вы можете использовать SMTP с Indy:
HTML-сообщения
Новый класс построителя HTML-сообщений (Indy 10)

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