Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   In Delphi Alexandria Indy aktualisieren wegen Gmail messageID Fehlermeldung (https://www.delphipraxis.net/211723-delphi-alexandria-indy-aktualisieren-wegen-gmail-messageid-fehlermeldung.html)

Kostas 26. Okt 2022 21:43

In Delphi Alexandria Indy aktualisieren wegen Gmail messageID Fehlermeldung
 
Hallo Zusammen,

ich habe eine aktuelle Delphi Alexandria Installation mit allen Patches.
Ich versende eine Email an eine gmail.com Adresse. Die Email kommt zurück mit den Fehler "Messages missing a valid messageId header are
not 550 5.7.1 accepted."

Ich habe versucht Indy zu aktualisieren, da ich darüber Hinweise im Internet gefunden habe, doch das gelinkt mir nicht. Ich habe die aktuelle Version von GitHub heruntergeladen, Clean_Alexandria.cmd mit Admin rechte ausgeführt, Indy280.groupproj kompiliert und die zwei DesignTime Packages installiert, in den LibPath \core, \System und \Protocls hinzugefügt. Das lief alles Problemfrei.

Beim starten von Delphi kann LivePreview280 und dclIPIndyImapl280.bpl nicht geladen werden.
DevExpress und FastReport habe ich auch deinstalliert da sie Abhängigkeiten haben und versucht sie zu installieren. Doch DevExpress kann einige Packages nicht finden.

Hat es jemand geschafft Indy auf Alexandria zu aktualisieren?

Rolf Frei 27. Okt 2022 14:41

AW: In Delphi Alexandria Indy aktualisieren wegen Gmail messageID Fehlermeldung
 
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;

Kostas 27. Okt 2022 15:15

AW: In Delphi Alexandria Indy aktualisieren wegen Gmail messageID Fehlermeldung
 
Vielen lieben Dank, werde ich in meiner Umgebung ausprobieren.

Noch ein Hinweis: Aus dem Forum hier habe ich schon mal einen Hinweis bekommen über eine andere Komponenten EmailArchitect. Dabei gib es um Google und Microsoft die auf Auth2 umgestellt haben. EmailArchitect hat das integriert und funktioniert einwandfrei. Wenn ich Emails über EmailArchitect versende, gibt es das aktuelle Problem nicht.

Rolf Frei 27. Okt 2022 16:47

AW: In Delphi Alexandria Indy aktualisieren wegen Gmail messageID Fehlermeldung
 
Da weiss ich nicht Bescheid. Aber wenn du die Mails über deinen eigenen Server verschickst, brauchst du kein AUTH login. Das kommt nur zum Zuge, wenn du dich direkt mit dem gmail server verbinden willst oder du da Emals abrufen wills (pop3, etc.). In meinem Fall ist es so, dass der obige Code auf einen Webserver läuf, auf dem auch eine lokaler SMTP Server läuft. Da werden durch einen Shop Emails über den lokalen SMTP Server verschickt. Ob das nun bei dir überhaupt die gleiche Problematik ist, kann ich nicht sagen. In meinem Fall hat es geholfen, dass ich eben nicht die gmail Adresse des Shopbetreibers zum Versenden als Envelops-FROM nutze, sondern ein spzielles EMail das per SPF DNS Eintrag Berechtigung hat, von diesem Server aus EMails zu verschicken.

Kostas 27. Okt 2022 20:30

AW: In Delphi Alexandria Indy aktualisieren wegen Gmail messageID Fehlermeldung
 
Bei mir ist es schon ein Problem da die Software in vielen Vereinen eingesetzt ist. Jeder hat einen andere Provider und auch viel eben Google. Durch die Umstellung von Google auf Auth2 können die Anwender keine Emails mehr über den Google SMTP Server versenden.
Durch die aktuelle Umstellung von Google auf die MessageID oder was auch immer, senden die Anwender z.B. von T-Online aus die Email raus. Alle kommen an außer die die eine Google Mailadresse haben. Die kommen alle wieder zurück mit der entsprechenden Fehlermeldung.
Da ich in Projektarbeit stecke, hatte ich noch keine Zeit Indy durch EmailArchitect zu ersetzen und wollte prüfen ob ich durch aktualisieren von Indy das zweite Problem behoben bekomme. Ich muss jetzt doch Zeit finden für den Umbau auf EmailArchitect.

Vielen Dank nochmals und dir noch eine schöne Zeit.
Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz