![]() |
AW: IdSMTP und bcc Fehler
Eventuell solltest du von Indy weg und zu
![]() Da hast du dem Mail-Versand wesentlich besser im Griff ...
Delphi-Quellcode:
BTW: Wer und an wen gesendet wird muss nichts mit dem zu tun haben, was in der Mail selber drin steht.
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] ); |
AW: IdSMTP und bcc Fehler
Wenn das beim Send auftritt und Du diese meinst:
Code:
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.
Meldung: '5.52 <keine>: Recipient adress rejected: need fully-qualified adress'.
|
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. |
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:
Die vielen Application.Processmessages sind nur drin, damit mein Fortschrittsbalken zwischendurch "aktualisiert" wird.
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; 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 |
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 :) |
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:
Mit breakpoint in der smpt.pas bei der Send Procedure nochmals überprüft:
'info@josefkoller.de,test@t-online.de,test@gmx.de'
Code:
Das Komma bleibt am Anfang stehen. Das kann ja nicht funktionieren.
',test@t-online.de, test@gmx.de'
Nochmals besten Dank für Deine Mühe. ciao Josef |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz