AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SMTP Email versenden schlägt fehl
Thema durchsuchen
Ansicht
Themen-Optionen

SMTP Email versenden schlägt fehl

Ein Thema von BAMatze · begonnen am 16. Jun 2009 · letzter Beitrag vom 16. Jun 2009
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 08:43
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:
//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;
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

Hier mal ein paar Quellen, die ich gefunden hab:
Originalthreat von dem der Quellcode stammt
Änderung Port (ist aber älter, kann sich also auch wieder geändert haben)

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
invalid_operation
(Gast)

n/a Beiträge
 
#2

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 08:56
Soweit ich mich erinnere, musste ich mein Yahoo-Postfach erst für pop3/smtp-Zugriffe freischalten.

Pobier's mal mit GMX (Port25).

HTH
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 08:57
Absender- und Empfänger Email Adresse sind ungültig - das kann ja nicht funktionieren.
Andreas
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 09:45
Zitat von shmia:
Absender- und Empfänger Email Adresse sind ungültig - das kann ja nicht funktionieren.
Wie kommst du darauf?
2. Account Sero
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 10:07
Delphi-Quellcode:
idMessage.From.Text := 'Test';
idMessage.Sender.Text := 'Test';
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?

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 http://de.wikipedia.org/wiki/Simple_...nsfer_Protocol, dort bei "Das Protokoll" findest Du eine Tabelle mit Befehlen. Diese kannst Du über
Code:
Telnet smtp.mail.yahoo.de 25
ausprobieren. Wenn Du damit mit Deinen Daten eine Mail versenden kannst, dann gehts mit den gleichen Werten auch über Indy.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 10:15
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

Gruß Assertor

Frederik
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 10:38
Zitat von nahpets:
Delphi-Quellcode:
idMessage.From.Text := 'Test';
idMessage.Sender.Text := 'Test';
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?

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 http://de.wikipedia.org/wiki/Simple_...nsfer_Protocol, dort bei "Das Protokoll" findest Du eine Tabelle mit Befehlen. Diese kannst Du über
Code:
Telnet smtp.mail.yahoo.de 25
ausprobieren. Wenn Du damit mit Deinen Daten eine Mail versenden kannst, dann gehts mit den gleichen Werten auch über Indy.
Hallo und schonmal Danke an nahpets hab jetzt mit einigen Hinweisen erfolgreich eine EMail versendet. Ich schreibe hier mal, da es für mich aus den bisherigen Threats, die ich gefunden hab nicht wirklich ersichtlich war, auf was wo eingetragen ist. Allerdings werde ich einige Daten nur beispielhaft angeben, da es sich dabei um Logindaten und EMail-Adressen von mir handelt.

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:
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;
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.

@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
2. Account Sero
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 10:49
Hi,

kurz aus der Hand ohne Delphi:

Delphi-Quellcode:
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;
Damit erhälst Du nun auch die echte Fehlermeldung.

Ü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
Frederik
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: SMTP Email versenden schlägt fehl

  Alt 16. Jun 2009, 11:13
Danke euch
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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