2010-07-22 25 views
5

Tôi muốn thực hiện tác vụ sau: chuyển đổi nội dung TRichEdit (văn bản rtf) thành nội dung thư điện tử không thuần văn bản.Gửi e-mail có văn bản rtf ở delphi

MAPI không hỗ trợ rtf, nhưng có cách nào để làm điều đó có thể với Indy?

Vấn đề là rtf là rtf và email là văn bản thuần hoặc HTML.

Ai đó có thể đề xuất mẹo không? Có thể chuyển đổi rtf thành văn bản bằng TWebBrowser không?

Về cơ bản các kịch bản là:
1) tài viết email trong một hình thức delphi,
2) Sau đó, email được gửi với MAPI để các ứng dụng thư mặc định (do đó, một cửa sổ email mới được tạo ra, và nội dung thư giống như tôi đã có ở dạng delphi)
3) Người dùng gửi email từ ứng dụng thư

Dù sao MAPI chỉ chấp nhận văn bản thuần túy.

UPDATE:

Cố gắng với Indy tôi đã viết điều này, nhưng nó vẫn không hoạt động, như tôi đã gửi thư nó vào tài khoản gmail của tôi, tôi nhận được một tin nhắn với cơ thể trống rỗng và noname giả tập tin đính kèm.

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; 

Trả lời

1

Rõ ràng (googled này bản thân mình, như tôi đã gửi một số từ Delphi, nhưng không phải trong trường hợp này), tùy chọn PR_RTF_COMPRESSED của (mở rộng) MAPI có thể giúp bạn ở đây. Ngoài ra, hãy xem this.

+0

Tôi muốn ngừng sử dụng MAPI, tôi muốn gửi email thông qua idSMTP trực tiếp – LaBracca

7

Hỗ trợ Indy gửi email RTF. Gửi email giống như cách bạn gửi email HTML, chỉ cần sử dụng "text/rtf", "text/riched" hoặc "text/richtext" Context-Type và gửi các mã RTF thô được tạo bởi TRichEdit khi thuộc tính PlainText của nó được đặt thành false. Ngoài ra, nếu bạn đang sử dụng Indy 10, hãy xem lớp TIdMessageBuilderRtf của nó để thiết lập cấu trúc TIdMessage chính xác.

+0

là có một ví dụ cho thấy làm thế nào để làm gì? Tôi đã thử với điều này nhưng tôi nhận được một thông báo sai: thủ tục SendMailRtf; var MBuilder: TIdMessageBuilderRtf; bắt đầu MBuilder: = TIdMessageBuilderRtf.Create; MBuilder.RtfType: = idMsgBldrRtfRichtext; MBuilder.Rtf: = RichEdit1.Lines; // được rtf từ reichedit MBuilder.FillMessage (IdMessage1); MBuilder.Free; IdSMTP1.Connect; IdSMTP1.Send (IdMessage1); IdSMTP1.Disconnect; kết thúc; – LaBracca

+0

Đã cố gắng tìm một ví dụ cho bạn. Đã không nhận được một, nhưng đã nhận được một workaround trao cho một người nào đó đang tìm kiếm các giải pháp tương tự. Hãy xem http://www.nldelphi.com/forum/showthread.php?t=15822. (Bằng tiếng Hà Lan: google dịch có thể là bạn của bạn). Họ cũng đề cập đến jvRichEditToHTML. – Tobiasopdenbrouw

+0

Thuộc tính TRichEdit.Lines không cung cấp quyền truy cập vào các mã RTF cần thiết cho email RTF. Đặt thuộc tính TRichEdit.PlainText thành False và gọi phương thức TRichEdit.SaveToStream() thay vào đó, sau đó truyền TStream kết quả tới phương thức TIdMessageBuilderRtf.RTF.LoadFromStream(). –

1

Có thể chuyển đổi rtf thành văn bản bằng TWebBrowser không?

Bạn có thể chuyển đổi RTF sang văn bản sử dụng TRichEdit - nhưng rõ ràng điều này mất tất cả định dạng:

Using TRichEdit at runtime without defining a parent

2: Bạn có thể tìm thấy một số RTF sang HTML chuyển đổi trực tuyến - một số miễn phí, một số không . Như thế này:

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: Bạn có thể đổi tên các tập tin đính kèm noname như NONAME.MHT và sau đó nó sẽ có thể mở ra với internet explorer.

Tuy nhiên bạn có thể muốn xem xét sử dụng điều khiển chỉnh sửa HTML, thay vì TRichEdit. Sau đó, bạn không có chuyển đổi để lo lắng về.Một cái gì đó giống như câu hỏi này: -

WYSIWYG HTML Editor Component for Delphi

+0

@Downvoter: đó có phải là vấn đề NONAME không, hay cái gì khác? Hãy cho tôi biết ... – Roddy

+0

Vui lòng liên kết câu hỏi của tôi (Sử dụng TRichedit khi đang chạy ...) – LaBracca

+2

@ user193655 - Ah, yeah :) Tôi nghĩ rằng vấn đề của bạn là gmail (và nhiều khách hàng khác) không hỗ trợ RTF trong email , do đó, chuyển đổi sang HTML là cách * duy nhất *. Bạn đã xem bất kỳ bộ chuyển đổi RTF nào sang HTML chưa? – Roddy

Các vấn đề liên quan