Entwickler-Ecke

Internet / Netzwerk - [Indy10] - Must issue a STARTTLS command first


jo-freaky - Di 03.07.07 21:17
Titel: [Indy10] - Must issue a STARTTLS command first
Hi,

ich habe bereits das Forum durchsucht und immer noch folgendes Problem:

Beim Versuch eine Email zu versenden (via googlemail) bekomme ich die Fehlermeldung
"Exception der Klasse EIdSMTPReplyError .... Meldung: 'Must issue a STARTTLS command first'"

Jetzt habe ich hier [http://www.indyproject.org/KB/Downloads%5CIndyKB.pdf] gelesen, dass man irgendwie mit TLS arbeiten muss.

Zitat: "For Indy 10
Indy 10 supports SMTP with explicit TLS. In the Indy 10's TIdSMTP, you simply have to assign a
TIdSSLIOHandlerSocketBase descendent to the TIdSMTP.IOHandler property and set the UseTLS
property to either utUseRequireTLS if you do not want to use an unencrypted connection or
utUseExplicitTLS if you are willing to use an unencrypted connection."

Leider sind meine bisherigen Versuche gescheitert das umzusetzen, weil ich keine Ahnung habe wie das gemacht werden muss.

Das hier ist mein bisheriger Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
//Serverdaten
  IdSmtp.Host := 'smtp.googlemail.com';
  IdSmtp.Port := 25;

  //Benutzerdaten für Authentifizierung
  IdSmtp.Username := 'meinemailaddy';
  IdSmtp.Password := 'meinpw';
  try
    IdSmtp.Connect;
    IdSmtp.Send(IdMessage);
  finally
    IdSmtp.Disconnect;
  end;


Ich hoffe ihr könnt / wollt mir helfen.

Vielen Danke im Voraus!

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


rolandt4088 - Do 05.07.07 15:29

Hallo,
ich habe es damit gelöst, dass ich mich vorher über pop3 einlogge.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
Procedure Tf_bestellung.BesttigungviaEMail1Click(Sender: TObject);
 begin 
  idpop3.Host := Query3.fieldbyname('pop3_server').AsString;
   idpop3.Username := Query3.fieldbyname('benutzer').AsString;
   idpop3.Password := Query3.fieldbyname('passwort').AsString;
   idpop3.Connect(-1);
   IDSMTP.Host := Query3.fieldbyname('smtp_server').AsString;
   IDSMTP.Username := Query3.fieldbyname('benutzer').AsString;
   IDSMTP.Password := Query3.fieldbyname('passwort').AsString;
   IDSMTP.Port := 25;
   idMessage.Subject:= subjekt_text;
   IdSMTP.Connect;//Stelle Verbindung her
   {....}
   try
    IdSMTP.Send(IdMessage);//Nachrich senden
   finally
    idsmtp.Disconnect;
    idpop3.Disconnect;
   end;
end;


Probiers mal. Wenn nicht melde Dich wieder.

Gruß
Roland


jo-freaky - Mi 25.07.07 22:03

Vorab erst einmal Sorry, dass ich mich jetzt erst wieder melde.

@Rolandt4088

Ich habe es genauso gemacht wie du, allerdings mit weniger Erfolg.

Jetzt kommt immer die Fehlermeldung:

"Conntecion Closed Gracefully"


Weisst du rat?

Dank im Vorraus!


rolandt4088 - Sa 28.07.07 00:50

Hallo

es wird Dir mitgeteilt, dass die Verbindung geschlossen ist.

Ich vermute, dass Du keine Verbindung hattest.

Der Profi dadrin bin ich auch nicht. Poste doch noch mal den Quelltext den Du jetzt hast, dann kann ich ich es mit meinen Benutzerdaten probieren.

Gruß
Roland


BenBE - Sa 28.07.07 10:30

Führe einfach mal Schrittweise aus, was Du oben Zitiert hast:

Setze eine entsprechende Komponente (TidSSLIOHandlerBlaBla auf das Form und setze die erwähnten Eigenschaften.

Die Ursprügliche Meldung besagt nämlich, dass eine TLS (oder SSL)-Verbindung erwartet wird, aber keine Verschlüsslung (SSL\TLS) initialisiert wurde.

Wer Lesen kann, ist klar im Vorteil ...


jo-freaky - Sa 28.07.07 16:49

@roland:
Ich habe genau deinen Quelltext genommen und meine Verbindungsdaten verwendet.

@BenBE:
Ich habe Schrittweise getan, was ich in meinem ersten Post zitiert hatte:

Fehlermeldung: Could not load SSL Library

Irgendwie komme ich kein bisschen weiter.


Danke für eure Bemühungen.


rolandt4088 - So 29.07.07 23:04

Hallo,
ich weiß jetzt gar nicht ob Du gestern meine Hilfe bekommen hast. Ich finde sie nicht.
Hier noch einmal die Lösung.
Du mußt allerdings noch die DLL-Dateien für Indy herunterladen und in ein Dein Projektverzeichnis kopieren.
Link zu den DLL-Dateien: http://www.freudundfreunde.de/download/indy/indy_openssl096g.zip
Hier der fertige Quellcode. Im Quellcode stehen noch wichtige Informationen.


Delphi-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:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//Serverdaten
  IdSmtp1.Host := 'smtp.googlemail.com';
  //IdSmtp1.Port := 25;
  //Benutzerdaten für Authentifizierung
  IdSmtp1.Username := 'dein benutzername@googlemail.com';
  IdSmtp1.Password := '*****';
  idMessage1.Subject:= Edit3.text;//Betreffzeile
  idMessage1.Recipients.EMailAddresses := edit1.text;//Empfänger
  idMessage1.Sender.text:= edit2.Text;//Absender
  idMessage1.Body.Add(Edit3.Text);//Text
  try
    IdSmtp1.Connect;
    IdSmtp1.Send(IdMessage1);
  finally
    IdSmtp1.Disconnect;
  end;
{IdSSLIOHandlerSocket1 auf die Form ziehen
 FOlgende Einstellung: SSLOptions:
                       Method: sslvSSLv2
                       Mode: sslmClient

 Einstellung bei IDSMTP1: IOHandler: isSSLIOHandlerSocket1
                          Port: 465
                          Authentication: atLogin

 Achtung: Bei Google mußt Du Deine E-Mail Einstellung folgendermaßen ändern:
  Gehe auf EInstellung --> Weiterleitung und POP
  Bei POP-Download: Entweder POP für alle Nachrichten oder
                             POP nur für ...
  Klick auf Änderung speichern}


end;


Viel Spaß
Roland