![]() |
SMTP Email versenden schlägt fehl
Hallo und guten Morgen an alle DP´ler,
Hab jetzt mal ein wenig Zeit und wollte mich in Erinnerung an die DT mal mit dem Thema Indy beschäftigen und bin gerade dabei eine TestMail über Yahoo zu verschicken. Das Verbinden funktioniert auch ohne Probleme, allerdings kommt ein Fehler wenn das Send(idMessage) ausführe. Ich hab im Internet mal Gegoogled und auch mehrere Ports gefunden, die in frage kommt. Ich weiß aber auch, dass in der Veranstaltung auf den DT darauf hingewiesen wurde, dass man bestimmte Einstellungen machen muss. Leider kann ich mich nicht mehr genau daran erinnern. Vieleicht sieht ja jemand wo der Fehler liegt.
Delphi-Quellcode:
Der Quellcode ist nicht von mir sondern habe ich hier gefunden. Es scheint noch ein Fehler bei der idMessage zu geben, da sich mit Yahoo verbunden wird
//Configure SMPTP
SMTP.Host := 'smtp.mail.yahoo.de'; SMTP.Username := Username; SMTP.Password := Pw; SMTP.Port := 587; // welcher ist das bei Yahoo? // in Google habe ich den Hinweis gefunden, dass anstelle des Ports 25 der Port 587 verwendet // werden soll. Allerdings gibt es bei beiden die Fehlermeldung, dass keine Email versendet // werden konnte. //Configure idMessage idMessage.From.Text := 'Test'; idMessage.Sender.Text := 'Test'; idMessage.Recipients.EMailAddresses := Empfaengermail; idMessage.Subject := 'Test'; idMessage.Priority := TIdMessagePriority(mpHigh); idMessage.CCList.EMailAddresses := ''; idMessage.BccList.EMailAddresses := ''; idMessage.ReceiptRecipient.Text := ''; idMessage.Body.Clear; idMessage.Body := TestStringList; //Send E-Mail Try SMTP.Connect; SMTP.Send(idMessage); //<--- hier tritt der Fehler auf SMTP.Disconnect; Except If SMTP.Connected = True Then Begin Try SMTP.Disconnect; Except MessageDlg('Could not disconnect from the E-Mail Server: ' + 'smtp.mail.yahoo.de', mtError, [mbOK], 0); End; End; MessageDlg('Could not send E-Mail to: ' + Empfaengermail, mtError, [mbOk], 0); End; //Destroy TIdSMTP and TIdMessage Componente SMTP.Free; idMessage.Free; end; Hier mal ein paar Quellen, die ich gefunden hab: ![]() ![]() Vielen Dank BAMatze |
Re: SMTP Email versenden schlägt fehl
Soweit ich mich erinnere, musste ich mein Yahoo-Postfach erst für pop3/smtp-Zugriffe freischalten.
Pobier's mal mit GMX (Port25). HTH |
Re: SMTP Email versenden schlägt fehl
Absender- und Empfänger Email Adresse sind ungültig - das kann ja nicht funktionieren.
|
Re: SMTP Email versenden schlägt fehl
Zitat:
|
Re: SMTP Email versenden schlägt fehl
Delphi-Quellcode:
sollte offensichtlich sein. Müssen gültige Mailadressen sein. Wo soll denn bitte eine Mail an den Empfänger 'Test' hingehen? Und wie soll der Empfänger den Absender 'Test' erkennen?
idMessage.From.Text := 'Test';
idMessage.Sender.Text := 'Test'; smtp.mail.yahoo.de hat Port 25 offen. Und bitte verrate uns doch noch die Fehlermeldung. Der Inhalt von Username, PW und Empfaengermail könnte von Bedeutung sein (muss aber nicht zwingend) jenachdem, wie offen der Mailserver von Yahoo ist. Lässt der z. B. einen Mailversand ohne vorhergehende Anmeldung zu? Schau bitte mal unter ![]()
Code:
ausprobieren. Wenn Du damit mit Deinen Daten eine Mail versenden kannst, dann gehts mit den gleichen Werten auch über Indy.
Telnet smtp.mail.yahoo.de 25
|
Re: SMTP Email versenden schlägt fehl
Hi BAMatze,
mir fallen 3 unglücklich gewählte Dinge auf: Disconnect in der Exception, kein Try/Finally für IdSMTP/IdMessage.Free, keine richtige Fehlerbehandlung Du könntest neben dem Exception Handling aber auch IdSMTP.OnStatus verwenden, um etwas mehr Informationen zu erhalten, wo es hakt. Ebenso ein Portsniffer (ich nutze z.B. häufig SmartSniff) hilft weiter. Port 25 ist der richtige für SMTP, außer Du verwendest SSL. Für SSL benötigst Du den OpenSSL Client Socket IO Handler, mußt UseTLS richtig einstellen und die DLLs ins Anwendungsverzeichnis packen. Afaik muß bei Yahoo die Absenderadresse gültig sein und es gibt ein Limit von 5 Mails pro Connect. Port 25 ist SMTP Klartext, Port 465 SSL. 587 ist ein alternativer SMTP Port (für die 25), falls es Probleme durch einen blockenden ISP gibt. (Roter Kasten) @Stephan: Gut erklärt und schneller, dem kann ich nur zustimmen :thumb: Gruß Assertor :dp: |
Re: SMTP Email versenden schlägt fehl
Zitat:
Zur Fehlermeldung wurde ein Socket-Fehler 10054 angegeben, welcher allerdings auch noch auf dem falschen Port (465) ausgelöst wurde. Diesen Port habe ich auf der Yahoo-Seite für einen SMTP-Emailversand gefunden. Ok hier für alle die nochmal hier nach einem EMail-versand aus einem Programm heraus suchen, die Einstellungen, die ich verwendet hab.
Delphi-Quellcode:
Ok der Inhalt der Konstanden kann ich hier aus persönlichen Gründen wie gesagt nicht preisgeben, sind ja schließlich meine persönlichen Daten. Allerdings für SenderMail einfach bei yahoo anmelden, dann bekommt ihr Yahoo-Account mit EMail-Adresse (z.B. Schulze.Maier@yahoo.de = SenderMail und Username = Schulze.Maier) und die Empfangsemail ist beliebig, bei mir war das eine ...@live.de. Hoffe das hilft mal jemanden, der wie ich als Anfänger ein paar Probleme mit dem Einarbeiten hat.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdMessage, IdSMTPBase, IdSMTP; procedure TForm1.FormCreate(Sender: TObject); var SMTP : TIdSMTP; idMessage : TIdMessage; TestStringList: TStringList; begin TestStringList := TStringList.Create; TestStringList.Add('Test'); // Es wird im Textfeld der EMail das Wort "Test" angegeben. //Create TIdSMTP and TIdMessage Componente SMTP := TIdSMTP.Create(); idMessage := TIdMessage.Create(); //Configure SMPTP SMTP.Host := 'smtp.mail.yahoo.de'; SMTP.Username := Username; SMTP.Password := Pw; SMTP.Port := 25; // Wenn Ihr bei eurem Yahoo-Account nachseht, werden dort unter den Einstellungen für SMTP-EMailversand der Port 465 angegeben. wenn Ihr diesen verwendet erhaltet Ihr einen Socket-Error 10054. Dieser Port ist wie Assertor sagt für die Verwendung von SSL gültig. //Configure idMessage idMessage.From.Text := SenderMail; idMessage.Sender.Text := EmpfaengerMail; idMessage.Recipients.EMailAddresses := EmpfaengerMail; idMessage.Subject := 'Test'; idMessage.Body.Clear; idMessage.Body := TestStringList; // Schreibt "Text" in das Textfeld der EMail //Send E-Mail Try SMTP.Connect; SMTP.Send(idMessage); SMTP.Disconnect; Except If SMTP.Connected = True Then Begin Try SMTP.Disconnect; Except MessageDlg('Could not disconnect from the E-Mail Server: ' + 'smtp.mail.yahoo.de', mtError, [mbOK], 0); End; End; MessageDlg('Could not send E-Mail to: ' + Empfaengermail, mtError, [mbOk], 0); End; //Destroy TIdSMTP and TIdMessage Componente SMTP.Free; idMessage.Free; end; @Assertor und nahpets beide ein Dankeschön waren wirklich sehr hilfreiche Erklärungen für mich. Allerdings eins hab ich noch nicht ganz verstanden @Assertor, wie meinst du das mit dem Try/Finally. Könntest du eventuell den hier geposteten Quellcode umstellen, wie es besser wäre? Edit1 uses-Klausel hinzugefügt |
Re: SMTP Email versenden schlägt fehl
Hi,
kurz aus der Hand ohne Delphi:
Delphi-Quellcode:
Damit erhälst Du nun auch die echte Fehlermeldung.
procedure TForm1.FormCreate(Sender: TObject);
var IdSMTP: TIdSMTP; IdMessage: TIdMessage; TestStringList: TStringList; begin TestStringList := TStringList.Create; IdSMTP := TIdSMTP.Create(); IdMessage := TIdMessage.Create(); try TestStringList.Add('Test'); // Es wird im Textfeld der EMail das Wort "Test" angegeben. //Configure SMPTP IdSMTP.Host := 'smtp.mail.yahoo.de'; IdSMTP.Username := Username; IdSMTP.Password := Pw; // Port kann bei Default leer bleiben, wird von Indy festgelegt // IdSMTP.Port := 25; // (465 = SSL, aber dafür fehlt hier der OpenSSL Handler) //Configure idMessage IdMessage.From.Text := SenderMail; { warum Sender.Text? Und dann auch noch mit EmpfaengerMail??? Das wird Yahoo ablehenen, Du sagst damit, der Absender sei der Empfänger... IdMessage.Sender.Text := EmpfaengerMail; } IdMessage.Recipients.EMailAddresses := EmpfaengerMail; IdMessage.Subject := 'Test'; // idMessage.Body.Clear; // bei neuem Objekt nicht nötig IdMessage.Body := TestStringList; // Schreibt "Text" in das Textfeld der EMail try IdSMTP.Connect; IdSMTP.Send(IdMessage); IdSMTP.Disconnect; except On E:Exception do MessageDlg('Fehler beim Senden: ' + E.Message + ' [' + E.ClassName + ']', mtError, [mbOK], 0); end; finally IdMessage.Free; IdSMTP.Free; TestStringList.Free; end; end; Übrigens: Socket-Fehler 10054 bedeutet, die Gegenstelle hat die Verbindung getrennt. Bei dem SSL Port 465 ist das ohne Nutzung von SSL ja wohl klar... Gruß Assertor Edit: Variablennamen korrigiert |
Re: SMTP Email versenden schlägt fehl
Danke euch
BAMatze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 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