Hallo smay,
hab mich vor einiger Zeit auch mit dem Thema Emails per IdSMTP versenden beschäftigt und bin auf genau das Problem gestoßen.
Um die Umlaut im Betreff der Email richtig darzustellen musst du den Betrefftext "von Hand" in das MIME-Format umwandeln.
Das kannst du mit dieser Funktion:
Delphi-Quellcode:
function TSendMailExt.MIMEConvert(s: String): String;
var
i: Integer;
begin
Result := '=?ISO-8859-15?Q?';
for i := 1 to Length(s) do
begin
if s[i] = '€' then
begin
Result := Result + '=A4';
continue;
end;
if ord(s[i]) > $99 then
Result := Result + Format('=%x', [Ord(s[i])])
else
Result := Result + s[i];
end;
Result := Result + '?=';
end;
Bei den Umlauten im Betreff wird das ganze schon entwas kniffeliger:
Zunächst musst du für den Mail-Body einen einen TIdText erstellen
Delphi-Quellcode:
uses ..., IdText;
[...]
procedure SendMail(...);
var
plainText: TIdText;
begin
...
plainText := TIdText.Create(Self.FMail.MessageParts);
plainText.Body.Text := MailBody;
plainText.ContentType := 'text/plain';
plainText.CharSet := 'ISO-8859-1';
plainText.ContentTransfer := 'BASE64';
plainText.ContentDisposition := 'inline';
...
Self.FMail ist die TIdMessage-Komponente.
Solltest du auch noch
HTML-Emails verschicken wollen, musst du zusätzlich zu dem PlainText (in dem auch schon der
HTML Code steht) noch einen weiteren TIdText erstellen, der dann den
HTML-Text darstellt:
Delphi-Quellcode:
uses ..., IdText;
[...]
procedure SendMail(...);
var
htmlText: TIdText;
begin
...
htmlText := TIdText.Create(Self.FMail.MessageParts);
htmlText.Body.Text := MailBody;
htmlText.ContentType := '
text/html';
htmlText.CharSet := '
ISO-8859-1';
htmlText.ContentTransfer := '
BASE64';
htmlText.ContentDisposition := '
inline';
...
end;
Hoffe das hilft dir ein wenig weiter.
Gruß