Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   IdSMTP und bcc Fehler (https://www.delphipraxis.net/173416-idsmtp-und-bcc-fehler.html)

Sir Rufo 24. Feb 2013 12:42

AW: IdSMTP und bcc Fehler
 
Eventuell solltest du von Indy weg und zu Ararat Synapse hin.

Da hast du dem Mail-Versand wesentlich besser im Griff ...

Delphi-Quellcode:
LSmtp : TSmtpSend;
LReceivers : TStringList;
LMail : TStringList;

// Wer sendet
if not LSmtp.MailFrom( LFromAddress, LMailSize ) then
  raise Exception.CreateFmt('SMTP.MailFrom(%s,%d) > %s ',[LFromAddress,LMailSize,LStmp.ResultString]);

// An wen wird gesendet
for LReceiver in LReceivers do
  // Jede Empfänger-Adresse wird einzeln an den Server gesendet
  // Somit bekommt man auch für jede Adresse eine Rückmeldung,
  // ob dieser Empfänger akzeptiert wird
  if not LSmtp.MailTo( LReceiver ) then
    begin
      // Mail-Adresse merken, oder was auch immer machen
    end;

// Was wird gesendet
if not LSmtp.MailData( LMail ) then
  raise Exception.CreateFmt( 'SMTP.MailData > %s',[LSmtp.ResultString] );
BTW: Wer und an wen gesendet wird muss nichts mit dem zu tun haben, was in der Mail selber drin steht.

Union 24. Feb 2013 12:49

AW: IdSMTP und bcc Fehler
 
Wenn das beim Send auftritt und Du diese meinst:
Code:
Meldung: '5.52 <keine>: Recipient adress rejected: need fully-qualified adress'.
Dann ist das keine Meldung von Indy, sondern vom eingesetzten SMTP Server. Auf die Prüfungen die dort durchgeführt werden, hast Du keinen Zugriff und auch kein Wissen darüber. Einige Server prüfen z.b. die Erreichbarkeit der Domain, andere sogar die Zustellbarkeit. Es könnte auch sein dass durch die große BCC Liste eine fest eingestellte maximale Headergröße des Servers überschritten wird etc. Wenn es sich tatsächlich um Fehler in den Mailadressen handelt, dann wirst Du ja die entsprechenden Einzelmails rejected bekommen und kannst dann evtl. wie bereits vorgeschlagen eine Prüfroutine über die Adressliste laufen lassen.

Sir Rufo 24. Feb 2013 13:34

AW: IdSMTP und bcc Fehler
 
Hier mal ein angepasster Quelltext mit synapse für deine Umgebung. Damit solltest du die fehlerhaften Mails besser herausfinden können.
Delphi-Quellcode:
type
  TForm1 = class( TForm )
    Button1 : TButton;
    sdbMemo1 : TMemo;
    ListBox1 : TListBox;
    procedure Button1Click( Sender : TObject );
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

uses
  smtpsend, mimemess, // ararat synapse units
  DMIMKER;

procedure TForm1.Button1Click( Sender : TObject );
var
  LMail : TMimeMess;
  LSmtp : TSMTPSend;
begin
  fDMIMKER.ZQMailverbindung.Open;
  try

    fDMIMKER.ZQAdressenmailbcc.Open;
    try

      LSmtp := TSMTPSend.Create;
      try

        LSmtp.TargetHost := fDMIMKER.ZQMailverbindungmailausgangsserver.AsString;
        LSmtp.TargetPort := '25';
        LSmtp.UserName  := fDMIMKER.ZQMailverbindungmailmailadresse.AsString;
        LSmtp.Password  := fDMIMKER.ZQMailverbindungmailpasswort.AsString;

        LMail := TMimeMess.Create;
        try

          // Header
          LMail.Header.From    := fDMIMKER.ZQMailverbindungmailmailadresse.AsString;
          LMail.Header.Subject := 'Test-Mail';
          LMail.Header.Priority := MP_normal;

          // Body
          LMail.AddPartHTML( sdbMemo1.Lines, nil );

          // Mail codieren
          LMail.EncodeMessage;

          if not LSmtp.Login
          then
            raise Exception.CreateFmt( 'SMTP.Login > %s', [LSmtp.ResultString] );

          try

            if not LSmtp.MailFrom( fDMIMKER.ZQMailverbindungmailmailadresse.AsString, 0 )
            then
              raise Exception.CreateFmt( 'SMTP.MailFrom > %s', [LSmtp.ResultString] );

            fDMIMKER.ZQAdressenmailbcc.First;

            while not fDMIMKER.ZQAdressenmailbcc.Eof do
              begin

                if not LSmtp.MailTo( fDMIMKER.ZQAdressenmailbccadrmailbccempfaenger.AsString )
                then
                  // fehlerhafte Mailadressen werden in eine Listbox ausgegeben
                  ListBox1.Items.Add( fDMIMKER.ZQAdressenmailbccadrmailbccempfaenger.AsString + ' > ' + LSmtp.ResultString );

                fDMIMKER.ZQAdressenmailbcc.Next;
              end;

            if not LSmtp.MailData( LMail.Lines )
            then
              raise Exception.CreateFmt( 'SMTP.MailData > %s', [LSmtp.ResultString] );

          finally

            if not LSmtp.Logout
            then
              raise Exception.CreateFmt( 'SMTP.Logout > %s', [LSmtp.ResultString] );

          end;

        finally
          LMail.Free;
        end;

      finally
        LSmtp.Free;
      end;

    finally
      fDMIMKER.ZQAdressenmailbcc.Close;
    end;

  finally
    fDMIMKER.ZQMailverbindung.Close;
  end;
end;

end.

josefkoller 24. Feb 2013 17:22

AW: IdSMTP und bcc Fehler
 
Hallo,

ich glaub, ich hab den Fehler.

Ich hab in der bcc Liste auch meine EMailadresse mit eingetragen. Diese Adresse ist identisch mit der Adresse, die ich in

IdMessage1.From.Address :=

stehen habe.

Meine eigene Adresse hab ich deswegen mit rein, weil ich das Ergebnis der Mail sehen wollte.
Das scheint die Exception auszulösen.

ich hab meine eigene Adresse aus der bcc-Liste raus und schon funktioniert es.

Delphi-Quellcode:
      try
        try
          IdMessage1.ContentType := 'text/html';
          IdSMTP1.AuthenticationType := atlogin;
          IdMessage1.Body := sdbMemo1.Lines; // Text
          IdMessage1.From.Address :=
            fdmimker.ZQMailverbindungMAILMAILADRESSE.AsString; // eigene EMailadresse
          IdMessage1.subject := sdbedit1.text; // Betreff
          IdMessage1.Priority := mpNormal;
          Application.ProcessMessages;

          //bcc Part
          s := '';
          fDMIMKER.ZQAdressenmailbcc.First;
          while not fDMIMKER.ZQAdressenmailbcc.Eof do
          begin
            s := s + IdMessage1.BccList.EMailAddresses +
              fdmimker.ZQAdressenmailbccADRMAILBCCEMPFAENGER.AsString+' ,';
            fDMIMKER.ZQAdressenmailbcc.Next;
          end;

          IdMessage1.BccList.EMailAddresses := s;
          IdMessage1.ReceiptRecipient.Address:= '';//wird autom mit'undisclosed-recipients' gefüllt;
 
          IdSMTP1.Username :=
            fDMIMKER.ZQMailverbindungMAILMAILADRESSE.AsString;
          IdSMTP1.Password := fdmimker.ZQMailverbindungMAILPASSWORT.AsString;
          IdSMTP1.Host :=
            fdmimker.ZQMailverbindungMAILAUSGANGSSERVER.AsString;

          IdSMTP1.Connect;
          Application.ProcessMessages;
          IdSMTP1.Send(IdMessage1);
        except
          on E: Exception do
          begin
           showmessage(e.Message);
          end;
        end;
     finally
       IdSMTP1.Disconnect;
     end;
Die vielen Application.Processmessages sind nur drin, damit mein Fortschrittsbalken zwischendurch "aktualisiert" wird.

Also die IdMessage1.From.Address nicht mit in die bcc-Liste.

Vielleicht braucht diesen Hinweis ja mal wer. (funktioniert so mit Indy 9);

Ciao

Josef

Sir Rufo 24. Feb 2013 18:39

AW: IdSMTP und bcc Fehler
 
Sieht so aus als ob Indy bei Mailadressen in der gleichen Domain (wie der Sender) diese abtrennt.
Das erklärt dann auch die Fehlermeldung :)

josefkoller 24. Feb 2013 20:48

AW: IdSMTP und bcc Fehler
 
Hallo,

bevor ich es wieder vergessen:

Hast einen tollen Spruch in Deiner Signatur. In meinem Fall trifft es nun ja tatsächlich den Kern der Sache.

Danke auch für den "Ausweich Code" mit Synapse. Ich hab auch schon daran gedacht, von Indy wegzugehen.

Synapse oder ICS würde sich anbieten. Ich scheu mich aber, wegen der Umstellerei.

Ich hab alles (Datenimport aus einer Web DB, die Mailverschickerei und solche Sachen) über Indy realisiert.

Deine Vermutung, daß die SMpt Komponente was aus den übergebenen Mailstrings rausschneidet, scheint tatsächlich der Grund meines Übels zu sein.

Wenn man z. b. die Eigenschaft:

IdMessage1.ReceiptRecipient.Address := mit dem Wert 'undisclosed-recipients' belegt, wird dieser String ebenfalls bei einer existierenden bcc-Liste entfernt.

Wahrscheinlich wurde auch in der bcc-Liste der doppelte info@josefkoller.de entfernt. Dann bleibt ein Komma am Anfang des Strings stehen. Und schon passiert es.

Z. b. bei meiner rumprobierei von mir so zusammen gestellt:
Code:
'info@josefkoller.de,test@t-online.de,test@gmx.de'
Mit breakpoint in der smpt.pas bei der Send Procedure nochmals überprüft:
Code:
',test@t-online.de, test@gmx.de'
Das Komma bleibt am Anfang stehen. Das kann ja nicht funktionieren.

Nochmals besten Dank für Deine Mühe.

ciao

Josef


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Seite 2 von 2     12   

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