2010-07-22 60 views
5

我想執行以下任務:將TRichEdit內容(RTF文本)轉換爲非純文本電子郵件正文。用delphi中的RTF文本發送電子郵件

MAPI不支持RTF,但有沒有辦法做到這一點可能與印地?

問題是rtf是rtf,而電子郵件是純文本或HTML。

有人可以提出一個竅門嗎?使用TWebBrowser可以將RTF轉換爲文本嗎?

基本上場景爲:
1)用戶在一個Delphi形式寫入電子郵件,
2)電子郵件然後用MAPI發送到默認的郵件客戶端(從而產生一個新的電子郵件窗口,以及消息體是我在德爾福的形式相同)
3)用戶從郵件客戶端發送電子郵件

無論如何MAPI只接受純文本。

UPDATE:

與印地嘗試我寫這篇但仍不能正常工作,我發送郵件到我的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; 

回答

1

顯然,(此一派我自己,因爲我郵寄一些德爾福,但不是在這種情況下),(延長)MAPI的PR_RTF_COMPRESSED選擇可以幫助你在這裏。也請看this

+0

我想停止使用MAPI,我更願意發送的電子郵件通過idSMTP直接 – LaBracca 2015-02-19 21:25:07

7

Indy支持發送RTF電子郵件。發送電子郵件的方式與發送HTML電子郵件的方式相同,只需使用「text/rtf」,「text/enriched」或「text/richtext」Context-Type,併發送由TRichEdit生成的原始RTF代碼其PlainText屬性設置爲false。另外,如果您使用的是Indy 10,請查看其TIdMessageBuilderRtf類以正確設置TIdMessage結構。

+0

有顯示瞭如何做一個例子嗎?我試過這個,但我得到一個錯誤的消息: 程序SendMailRtf; var MBuilder:TIdMessageBuilderRtf; 開始 MBuilder:= TIdMessageBuilderRtf.Create; MBuilder.RtfType:= idMsgBldrRtfRichtext; MBuilder.Rtf:= RichEdit1.Lines; //從reichedit獲取rtf MBuilder.FillMessage(IdMessage1); MBuilder.Free; IdSMTP1.Connect; IdSMTP1.Send(IdMessage1); IdSMTP1.Disconnect; 結束; – LaBracca 2010-07-23 08:00:16

+0

試圖爲你找到一個例子。沒有得到一個,但確實得到了一個解決方案的解決方法。看看http://www.nldelphi.com/forum/showthread.php?t=15822。 (在荷蘭語:谷歌翻譯可能是你的朋友)。他們還提到了jvRichEditToHTML。 – Tobiasopdenbrouw 2010-07-23 11:38:12

+0

TRichEdit.Lines屬性不提供對RTF電子郵件所需的RTF代碼的訪問權限。將TRichEdit.PlainText屬性設置爲False,然後調用TRichEdit.SaveToStream()方法,然後將生成的TStream傳遞給TIdMessageBuilderRtf.RTF.LoadFromStream()方法。 – 2010-07-24 06:11:18

1

是否可以使用TWebBrowser將RTF轉換爲文本?

您可以轉換RTF使用TRichEdit到文本 - 但顯然這失去了所有的格式:

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

+0

@Downvoter:是NONAME問題還是別的?讓我知道... – Roddy 2015-02-19 21:15:09

+0

搞笑你鏈接我的問題(在運行時使用TRichedit ...) – LaBracca 2015-02-19 21:26:28

+2

@ user193655 - 啊,是啊:)我認爲你的問題是,Gmail(和許多其他客戶端)不支持電子郵件中的RTF ,所以轉換爲HTML是* only *的方式。你看過任何這些RTF到HTML轉換器嗎? – Roddy 2015-02-20 10:05:12

相關問題