5

我想执行以下任务:将 TRichEdit 内容(rtf 文本)转换为非纯文本电子邮件正文。

MAPI 不支持 rtf,但有没有办法用 Indy 做到这一点?

问题是 rtf 是 rtf 而电子邮件是纯文本或 HTML。

有人可以建议一个技巧吗?是否可以使用 TWebBrowser 将 rtf 转换为文本?

基本上情况是:
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;
4

3 回答 3

7

Indy 支持发送 RTF 电子邮件。发送电子邮件的方式与发送 HTML 电子邮件相同,只需使用“text/rtf”、“text/enriched”或“text/richtext”上下文类型,然后发送由 TRichEdit 生成的原始 RTF 代码它的 PlainText 属性设置为 false。此外,如果您使用的是 Indy 10,请查看其 TIdMessageBuilderRtf 类以正确设置 TIdMessage 结构。

于 2010-07-22T20:59:28.957 回答
1

显然(我自己用谷歌搜索过这个,因为我从 Delphi 邮寄了一些,但在这种情况下不是),(扩展的)MAPI 的 PR_RTF_COMPRESSED 选项可以帮助你。也看看这个

于 2010-07-22T14:10:10.780 回答
1

是否可以使用 TWebBrowser 将 rtf 转换为文本?

您可以使用 TRichEdit 将 RTF 转换为文本 - 但显然这会丢失所有格式:

在运行时使用 TRichEdit 而不定义父级

2:您可以在线找到许多 RTF 到 HTML 转换器 - 有些是免费的,有些不是。像这些:

http://wiki.delphi-jedi.org/wiki/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。那么你就不用担心转换了。像这样的问题:-

Delphi 的所见即所得 HTML 编辑器组件

于 2015-02-19T17:28:28.547 回答