باید از TIdEncoderMIME برای Encode کردن متن به base64 استفاده کنید. این کلاس یک رشته string به شما میده که حاوی متن نامه بصورت Encode شده هست. این رشته را باید به IdMessage بدید و Encoding را تنظیم کنید. در نهایت باید با IdSMTP پیام را ارسال کنید.
برنامه Mail Client کاربر باید بتونه این نامه و encoding اش را تشخیص بده و آن را Decode کنه و به کاربر درست نمایش بده.
کد شما چیزی شبیه به کد زیر میشه (فرصت نشد بعد از نوشتن تستش کنم):
uses
TntComCtrls, IdSMTP, IdMessage, IdCoderMIME;
procedure TForm1.SendMail;
var
Stream : TMemoryStream;
Encoder : TIdEncoderMIME;
EncodedText : string;
MailText : TIdText;
begin
Stream := TMemoryStream.Create;
Encoder := TIdEncoderMIME.Create(nil);
try
//Retrieve the message from a Unicode source
TntRichEdit1.Lines.SaveToStream(Stream);
//Encode the message
Stream.Position := 0;
EncodedText := Encoder.Encode(Stream);
finally
Encoder.Free;
Stream.Free;
end;
//Prepare the message
with IdMessage1 do
begin
IsEncoded := True;
ContentType := 'text/html';
ContentTransferEncoding := 'base64';
//Create a new message part
MailText := TIdText.Create(MessageParts);
MailText.ContentTransfer := 'base64';
MailText.ContentType := 'text/html';
MailText.Body.Text := EncodedText;
end;
//Sending the message
IdSMTP1.Host := 'smtp.myhost.com';
IdSMTP1.Username := 'user';
IdSMTP1.Password := 'pass';
{if needed, other properties are set here.
... }
IdSMTP1.Connect(30000);
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
end;