Отправить письмо с текстом RTF в Delphi - PullRequest
5 голосов
/ 22 июля 2010

Я хотел бы выполнить следующую задачу: преобразовать содержимое TRichEdit (текст RTF) в текстовое сообщение электронной почты, не являющееся текстовым.

MAPI не поддерживает RTF, но естьспособ сделать это, может быть, с Indy?

Проблема в том, что rtf - это rtf, а электронные письма - это обычный текст или HTML.Можно ли преобразовать rtf в текст, используя TWebBrowser?

В основном сценарий таков:
1) Пользователь пишет электронное письмо в форме delphi,
2) Затем электронное письмо отправляется с MAPI по умолчаниюпочтовый клиент (поэтому создается новое окно электронной почты, и тело сообщения такое же, как у меня в форме delphi)
3) Пользователь отправляет электронное письмо от почтового клиента

В любом случае MAPI принимает только простой текст.

ОБНОВЛЕНИЕ:

Попытка с Indy Я написал это, но все равно это не работает, так как я отправляю почту на свой аккаунт Gmail, я получаю сообщение с пустым телом и поддельным вложением NONAME.

uses IdMessageBuilder;


procedure SendMail;
var
  MBuilder: TIdMessageBuilderRtf;
  MyMemoryStream: TMemoryStream;
begin
  try
    MBuilder := TIdMessageBuilderRtf.Create;
    MyMemoryStream := TMemoryStream.Create;
    MBuilder.RtfType := idMsgBldrRtfRichtext;
    // RichEdit1 has PlainText set to False
    // at design time I pasted some formatted text onto it
    RichEdit1.Lines.SaveToStream(MyMemoryStream);
    MBuilder.Rtf.LoadFromStream(MyMemoryStream);
    MBuilder.FillMessage(IdMessage1);
    IdSMTP1.Connect;
    IdSMTP1.Send(IdMessage1);
    IdSMTP1.Disconnect;
  finally
    MyMemoryStream.Free;
    MBuilder.Free;
  end;
end;

Ответы [ 3 ]

7 голосов
/ 23 июля 2010

Indy поддерживает отправку писем в формате RTF. Отправьте электронное письмо так же, как отправляли бы электронное письмо в формате HTML, просто используйте контекстный тип «text / rtf», «text / enriched» или «text / richtext» и отправляйте необработанные коды RTF, которые создаются TRichEdit, когда его свойство PlainText имеет значение false. Кроме того, если вы используете Indy 10, посмотрите на его класс TIdMessageBuilderRtf, чтобы правильно настроить структуру TIdMessage.

1 голос
/ 19 февраля 2015

Можно ли преобразовать rtf в текст с помощью TWebBrowser?

Вы можете конвертировать RTF в текст, используя TRichEdit - но, очевидно, это теряет все форматирование:

Использование TRichEdit во время выполнения без определения родителя

2: Вы можете найти несколько конвертеров RTF в HTML онлайн - некоторые бесплатные, некоторые нет. Как это:

http://wiki.delphi -jedi.org / вики / JVCL_Help: TJvRichEditToHtml https://www.habarisoft.com/scroogexhtml_delphi.html http://www.easybyte.com/products/rtf2html.html

http://www.sautinsoft.com/products/rtf-to-html/index.php

3: Вы можете переименовать вложение noname как NONAME.MHT, после чего оно должно быть открыто с помощью Internet Explorer.

Однако вы можете рассмотреть возможность использования элемента управления редактирования HTML, а не TRichEdit. Тогда вам не о чем беспокоиться. Что-то вроде этого вопроса: -

WYSIWYG HTML-редактор для Delphi

1 голос
/ 22 июля 2010

Очевидно (сам гуглил, когда я отправляю некоторые письма из Delphi, но не в этом случае), опция PR_RTF_COMPRESSED (расширенного) MAPI может вам помочь Также посмотрите на это .

...