在delphi中发送包含rtf文本的电子邮件

时间:2010-07-22 13:17:51

标签: delphi rtf sendmail indy mapi

我想执行以下任务:将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;

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

显然(我自己搜索过,因为我从Delphi邮寄了一些,但在这种情况下没有),(扩展)MAPI的PR_RTF_COMPRESSED选项可以帮到你。另请参阅this

答案 2 :(得分:1)

  

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

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

Using TRichEdit at runtime without defining a parent

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。然后你没有转换担心。像这个问题: -

WYSIWYG HTML Editor Component for Delphi