Ich nutze die mitgelieferte Version aus D11.
Hatte gerade erst das selbe Problem bei einem Kunden von uns. Irgendwas hat gmail mitte 2022 geändert, so dass nun diese komische Fehlermelung kommt. Ich glaube eigentlich, dass es ein falscher Fehler ist und eigentlich ein ganz anderer Fehler kommen müsste. Wenn du danach googlest wirst du feststellen, dass ab ca. Juni 22 sehr viel zu diesem Thema gefunden wird. Das Problem ist nicht die
Indy Komponente, sondern wie du den Absender verwendest.
Das Problem konnte ich hier so lösen, dass ich als Envelopesender nicht die gmail Adresse verwenden, sondern einen auf dem
SMTP Server gültige Email, der auf die selbe
IP wie der
SMTP Server zurück verweist (SPF Check muss funktionieren). Im eigentlichen Mailheader konnte ich die gmail Adresse drin lassen. Im gleichen Zug habe ich auch eine MsgId erstellt, aber diese allein hat das Problem nicht gelöst. Erst durch Verwendung einer lokalen EMailadresse als Sender, hat es funktioniert.
Das Problem ist nun aber noch, dass der Envelopsender nicht so einfach vom Mailheader (TIdMessage.From) unterschiedlich nutzen kann und man dafür die Kommunikation mit dem
SMTP Server selber machen muss. Ich habe die folgende Funktion seit vielen Jahren im Einsatz und kann für dich als Info dienen, wie das gemacht werden könnte:
Delphi-Quellcode:
procedure RFIdSMTPSendMail(ASMTP: TIdSMTP; AMsg: TIdMessage; const AMailFrom: String = '');
var
DoConnect: Boolean;
MsgID, s: String;
p: Integer;
procedure WriteRecipient(const AEmailAddress: TIdEmailAddressItem);
begin
ASMTP.SendCmd('RCPT to:<' + AEMailAddress.Address + '>', [250, 251]);
end;
procedure WriteRecipients(AList: TIdEmailAddressList);
var
i: integer;
begin
for i := 0 to AList.Count - 1 do begin
WriteRecipient(AList[i]);
end;
end;
begin
DoConnect := not ASMTP.Connected;
if DoConnect then
ASMTP.Connect();
try
p := Pos('@', AMailFrom);
if p = 0 then
s := '@deinedomaene.com' // <- Anpassen für deine Umgebung. Das muss Bestandteil der MsgId sein.
else
s := Copy(AMailFrom, p, 255);
MsgID := RFDeleteChars(RFGetNewGUID, ['{', '}', '-']) + s;
{$IFDEF INDY10_6}
AMsg.MsgId := MsgID;
{$ELSE}
AMsg.Headers.Values['Message-ID'] := '<' + MsgID + '>';
{$ENDIF}
ASMTP.SendCmd('RSET');
if AMailFrom <> '' then // Envelopesender abweichend vom MailHeader FROM
ASMTP.SendCmd('MAIL FROM:<' + AMailFrom + '>', 250)
else if AMsg.Sender.Address <> '' then
ASMTP.SendCmd('MAIL FROM:<' + AMsg.Sender.Address + '>', 250)
else
ASMTP.SendCmd('MAIL FROM:<' + AMsg.From.Address + '>', 250);
WriteRecipients(AMsg.Recipients);
WriteRecipients(AMsg.CCList);
WriteRecipients(AMsg.BccList);
ASMTP.SendCmd('DATA', 354);
AMsg.ExtraHeaders.Values['X-Mailer'] := ASMTP.MailAgent;
ASMTP.SendMsg(AMsg);
ASMTP.SendCmd('.', 250);
finally
if DoConnect then
ASMTP.Disconnect;
end;
end;