Entwickler-Ecke

Internet / Netzwerk - SMTP(fastnet)


Jimbo - Mo 03.03.03 15:19
Titel: SMTP(fastnet)
Hallo,
ich muß als Hausaufgabe ein Mailprogramm schreiben und soll mich dabei an die FastNet-Komponenten halten.
POP3 funktioniert einwandfrei, die Mails werden auf der Festplatte gespeichert, etc...

Ich bekomme es aber einfach nicht gebacken eine Mail zu verschicken.
Mein Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  SMTP.Host := esmhost.text;
  SMTP.Port := 25;
  SMTP.UserID := eusername.text;
  SMTP.Connect;        

  SMTP.PostMessage.FromAddress := eusername.text;
  SMTP.PostMessage.FromName    := eusername.text;
  SMTP.PostMessage.ToAddress.Add(eempfaenger.text);
  SMTP.PostMessage.Body.Assign(nachricht);
  SMTP.PostMessage.Subject := ebetreff.text;
  SMTP.SendMail;
  SMTP.Disconnect;

Meine Fehlermeldung:
Die Autentifizierung ist fehgeschlagen

Wo liegt der Fehler?

Gruß
Jimbo


MSCH - Mo 03.03.03 18:22
Titel: HI
Das Senden von EMails sollte durch das ONConnect() Ereignis der SMTP-Komponente erst ausgelöst werden. Ansonsten gibts Schwierigkeiten. So hintereinander gehts nicht.

Zweitens kanns sein, das der Provider SMTP after Pop benutzt, du musst dich also erst mal via Pop verbinden/anmelden und dann ist erst SMTP erlaubt.

ein kleines Demo:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TSendmail.BitBtn1Click(Sender: TObject);
var I:Integer;
begin
  Mailer.Host:= Host;
  Mailer.UserID:= User;
  for I:=0 to Empfaenger.Items.Count-1 do
    Mailer.PostMessage.ToAddress.Add(Empfaenger.Items[i]);
  Mailer.PostMessage.FromAddress:= From;
  Mailer.PostMessage.FromName:='MeinName';
  Mailer.PostMessage.Subject:= Subjekt;
  Mailer.PostMessage.Date:=DateToStr(now);
  Mailer.PostMessage.ReplyTo:= from;
  for I:=0 to Content.Lines.Count-1 do
    Mailer.PostMessage.Body.Add(Content.Lines[i]);
  Mailer.Connect;
end;

procedure TSendmail.MailerConnect(Sender: TObject);
begin
  Mailer.SendMail;
end;

procedure TSendmail.MailerSuccess(Sender: TObject);
begin
  Mailer.Disconnect;
end;


mfg
MSCH


Jimbo - Di 04.03.03 15:08

@ MSCH
ich habe das Ganze jetzt umgeschrieben:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
 meldungen.lines.add('Try to connect');
 pop3.UserID := eusername.text;
 pop3.Password := epass.text;
 pop3.AttachFilePath := 'attach/';
 pop3.Host := ehost.text;
 pop3.TimeOut := 200000;
 pop3.connect;
if sende = true then begin
 meldungen.lines.add('Try to connect');
  SMTP.Host := esmhost.text;
  SMTP.Port := 25;
  SMTP.UserID := eusername.text;

 // SMTP.Port := 25;
 // SMTP.Connect;
  SMTP.PostMessage.Date:=DateToStr(now);
  SMTP.PostMessage.FromAddress := eusername.text;
  SMTP.PostMessage.FromName    := eusername.text;
  SMTP.PostMessage.ReplyTo     := eusername.text;
  SMTP.PostMessage.ToAddress.Add(eempfaenger.text);
  SMTP.PostMessage.Body.Assign(nachricht.lines);
  SMTP.PostMessage.Subject := ebetreff.text;
  SMTP.Connect;
  sende := false;
end;
end;


procedure TForm1.SMTPConnect(Sender: TObject);
begin
SMTP.SendMail;
meldungen.lines.add('Connected');
end;


procedure TForm1.SMTPSuccess(Sender: TObject);
begin
smtp.disconnect;
meldungen.lines.add('Nachrich(en) erfolgreich versandt.');
end;


leider erhalte ich folgende Fehlermeldung: Die Authentifizierung ist fehlgeschlagen.

Was bedeutet das überhaupt?
Wo liegt mein Failer?

Gruß
Jimbo


Klabautermann - Di 04.03.03 16:56

Hallo,
Jimbo hat folgendes geschrieben:
leider erhalte ich folgende Fehlermeldung: Die Authentifizierung ist fehlgeschlagen.
Was bedeutet das überhaupt?
Wo liegt mein Failer?

das bedeutet, das der SMTP Server nicht bestätigen kann, das du berechtigt bist über ihn zu senden.
Früher konnte jeder einfach so über jeden Mail-Server senden ohne sich identifizieren zu müssen. Als dann das Internet immer beliebter wurde und somit auch die Spamer immer häufiger auftraten hat man versucht dieses Manko durch das vorherige abrufen der E-Mail auf dem POP3 Server zu beheben. Das ist das ober beschriebende POP vor SMTP. Die war aber immer nur eine notlösung. Mitlerweile ist es schon wieder Jahre her, das der neue SMTP-Standart verabschiedet wurde, welcher eine möglichkeit für SMTP mit Passwort und Username bieten (SMTP Auth oder auch SMTP mit Login). Da der Standart mitlerweile schon älter ist gehen viele Provider in letzter Zeit dazu über diesen auch zu verwenden, ich schätze der über den du senden willst gehört dazu. Ich weiß nciht wie die Fastnetkomponenten heute aussehen, die letzen mit denen ich gearbeitet habe (Delphi 5) unterstützen diese Möglichkeit noch nicht. Wenn sie das heute nopch nicht bieten kann man sie nur als veraltet bezeichnen und sich nach einer alternative unsehen (Indy, ICS, ...?).

Wenn das nicht möglich ist, musst du einen Mailproxy vorschalten, der diese Sicherheitsmechanismen beherscht, sie lokal aber nicht verlangt.

Gruß
Klabautermann


BungeeBug - Di 04.03.03 17:09

soweit ich weiss gehört zu den meisten Anmeldungen auch nen PW ... ich konnte in deinem Quelltext nix davon finden ... ich denke mal das das DER Fehler is ...

MfG BungeeBug


Jimbo - Di 04.03.03 20:13

das problem ist, dass ich für die schule an delphi 5 professional gebunden bin.

sollte ich das dann wie mit der konsole machen (telnet) ?


Klabautermann - Di 04.03.03 20:26

Hallo,

wer ist denn dein Provider?
Bei einigen (z.B. GMX) kann man den Sicherheitsmechanismus einstellen. Dann kannst du dein Programm für POP vor SMTP fertigstellen und beschwerst dich bei der Abgabe, das dich die veralteten Komponenten davon abgehalten haben ein Zeitgemäßes Mailprogramm zu schreiben ;).

Oder du versuchst deine Lehrer zu überzeugen die Indys dazu zu installieren.

Gruß
Klabautermann


Jimbo - Di 04.03.03 20:57

Hi,

ich hab Web.de, allerdings wird das Prog warscheinlich auch auf meiner Adresse beim Schul-Server getestet werden müssen...

jahmm...ich habs ja mit Pop vor Smtp versucht, aber ich bekomm's einfach nich hin..und eben deshalb würd' ich lieber PROGRAMMIEREN lernen...und nicht das Komponenten-Anwenden...dann könnte ich jetzt nämlich alles so laufen lassen, wie's zeitgemäß ist...

erstmal muß ich das prog für meinen Account bei Web.de zum laufen bringen, aber da kommt halt auch bei POP vor SMTP der Fehler und mit der Komponente kann ich kein Passwort festlegen...............


mars - Di 04.03.03 21:24

Jimbo hat folgendes geschrieben:

und eben deshalb würd' ich lieber PROGRAMMIEREN lernen...und nicht das Komponenten-Anwenden


Also, dann müsstest du dich erst mal mit den verschiedensten Protokollen auseinandersetzen...Viel Spass dabei! :wink:


Jimbo - Di 04.03.03 21:43

gut möglich, aber ich meine, dass man mit den komponenten nicht weit kommen kann.


Klabautermann - Mi 05.03.03 13:21

Hallo,

Komponenten erleichtern das Arbeiten ungemein. Aber nur, weil sie einem die Arbeit abnehmen nicht weil sie etwas machen was man nicht auch selbst ereichenen könnte.

Aber es ist schon klar, das man sich dann auch an den Hersteller bindet und eben nur das machen kann was dieser anbietet.

Leider hast du wohl im moment keine Wahl, es sei denn du möchtest tatsächlich die Komunikation von Hand implementieren. Das sollte Machbar sein da SMTP ein recht kleiner Standart ist. Dennoch bedeutet es eine Menge mehr Arbeit.

Gruß
Klabautermann