Bei uns werden aus u.a. historischen Gründen unterschiedliche Mailkomponenten verwendet (z.B. auch für untersch. Delphi-Verionen). Damit die aber alle gleich aussehen, sind diese jeweils in einer einfallsreich TMail genannten Klasse gekapselt.
Ich soll nun diese Kapselung für Delphi 10 mit Indy10-Komponenten durchführen. Benutze dazu die Indykomponenten idMessage und idSMTP und habe bei Testmails schon zwei Probleme:
a) Der Absendername kommt nicht an, obwohl mMn gesetzt.
b) Umlaute im Body werden verschluckt.
Zu b): Wirklich verschluckt, d.h. nicht durch ? oder ähnliches ersetzt. Im Betreff/Subject klappt das aber! Habe schon mit CharSet rumprobiert, aber bisher ohne Erfolg.
Hier mal die initiallisierung von idMessage:
Delphi-Quellcode:
function TMail.getidMessage: TidMessage;
var i : Integer;
begin
if self.fidMessage = nil then
self.fidMessage := Tidmessage.Create(nil);
self.fidMessage.Priority := mpNormal;
self.fidMessage.Date:= now;
// self.fidMessage.CharSet:= 'ISO-8859-15';
self.fidMessage.From.Text:= Absendername;
self.fidMessage.Sender.Text:=Absendername;
for i:=0 to FFrom.Count-1 do
self.fidMessage.ReplyTo.EMailAddresses := FFrom.Strings[i];
//self.fidMessage.ReplyTo.Assign(FFrom);
for i:=0 to FTo.Count-1 do
self.fidMessage.Recipients.EMailAddresses := FTo.Strings[i];
//self.fidMessage.Recipients.Assign(FTo);
for i:=0 to FBcc.Count-1 do
//self.fidMessage.BccList.EMailAddresses :=
showmessage(FBcc.Strings[i]);
//self.fidMessage.BccList.Assign(FBcc);
for i:=0 to FCc.Count-1 do
self.fidMessage.CcList.EMailAddresses := FCc.Strings[i];
//self.fidMessage.CcList.Assign(FCc);
self.fidMessage.Subject:= Betreff;
self.fidMessage.Body.Clear;
self.fidMessage.Body:= FBody;
result:= self.fidMessage;
end;
Hier der Aufruf der Klasse in einem Form:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Mail:TMAIL;
begin
Mail:=TMail.Create;
Mail.An:='mich@zuhause.de';
Mail.Von:='mama@papa.de';
Mail.Absendername:='Max Mustermann';
Mail.Betreff:= 'Hallöchen däs ist ein übeler Straßentest';
Mail.Text:='Hallöchen däs ist ein übeler Straßentest';
Mail.Text:='';
Mail.Text:='Dies ist das Ende';
Mail.Send;
Mail.Free;
end;