Indy Email versenden
-
Ich möchte per SMTP eine Email versenden.
Soweit Ich weiss sollte das mit TIdSMTP Funktionieren, aber Wie?
Ich möchte das mit meiner Email Adresse machen die Daten haben ich in den folgenden Strings:- SMPT Server in strSMPTServer
- Benutzername in strUser
- Passwort in strPasswort
- Betriff in strSubject
- Text in strText
- Email Empfänger in strMailTo
- Email sender in strMailFromWie muss man das jetzt machen??
-
Das hab sogar ich hin bekommen :p
Schau dir das FastNet beispiel für SMTP an, bei Indy ist das fast gleich.
-
Ausserdem gibt es auf der Indy-Homepage beispiele zu den Themen und eine Dokumentation zu den Komponentenzum download...
junix
-
jo, schau auf indy hp nach, oder google rum, da gibt es tausende(leicht übertrieben) beispiele für indy und delphi, alle leicht zu übersetzen.
J0
-
Wenn Ich das so woe in den FastNet Beispiel mache gibt es immer ein Fehlermeldung irgendetwas mit "authen... failure".
Was wohl am Login liegen muss
-
Dann sieh dir J0's hinweis an und zieh dir die Dokumentation und die Beispiele zu rate. Musst du dich vor dem Versenden beim SMTP zuerst mit POP authentifizieren?
-junix
-
Original erstellt von junix:
**Dann sieh dir J0's hinweis an und zieh dir die Dokumentation und die Beispiele zu rate. [b]Musst du dich vor dem Versenden beim SMTP zuerst mit POP authentifizieren?-junix**
kann manchmal sein. aber ich sagte es ist FAST wie bei Fastnet, nicht das es genauso ist.
zum heulen, senden kann ich im schlaf und empfangen bekomm ich net hin
-
bei den meisten services (besonders die kostenlosen, gmx)
muss man sich authentifizieren, das der unterschied zu indy und nmsmtp, indy kann das, nmsmtp nicht (bei meiner version zumindest,v 5.x)J0
-
Original erstellt von <J0>:
**bei den meisten services (besonders die kostenlosen, gmx)
muss man sich authentifizieren, das der unterschied zu indy und nmsmtp, indy kann das, nmsmtp nicht (bei meiner version zumindest,v 5.x)J0**
doch kann es, aber lange nicht so kompfortabel.
-
Kann einer von euch ein Beispiel geben wie man das bei gmx macht.
Bei mir klappt das mit den Authentifizieren einfach nicht.
Am besten mit den Indy Komponenten.
-
weil heute 1. Weihnachtstag ist: (bitte mich nicht anflamen, es ist ein lösungsweg, vielleicht für euch freaks ein beschissener
/*Benutzte komponenten: Indy Clienten: TIdSMTP Indy sonstiges: TIdMessage Name von TIdMessage = Message/* void __fastcall TForm1::Button1Click(TObject *Sender) { bool SuccesfullySended = false; //Host für Indy Clienten wird aus TEdit Host ausgelesen IdSMTP1->Host = Host->Text; //Benutzname für Indy Clienten wird aus TEdit Username ausgelesen IdSMTP1->UserId = Username->Text; //Passwort für Indy Clienten wird aus TEdit Passwort ausgelesen IdSMTP1->Password = Password->Text; //Für die Mail-Services, die authorisierung erfordern: //Host wird aus TEdit AuthHost ausgelesen IdSMTP1->SocksInfo->Host = AuthHost->Text; //Benutzname wird aus TEdit Username ausgelesen IdSMTP1->SocksInfo->UserID = Username->Text; //Benutzname wird aus TEdit Password ausgelesen IdSMTP1->SocksInfo->Password = Password->Text; //Absendername für die Mail wird aus TEdit Fromname ausgelesen Message->From->Name = Fromname->Text; //Absender für die Mail wird aus TEdit Username ausgelesen Message->From->Address = Username->Text; //'An wen' für die Mail wird aus TEdit Fromname ausgelesen Message->Recipients->EMailAddresses = Toname->Text; //Thema für die Mail wird aus TEdit Subject ausgelesen Message->Subject = Subject->Text; //Priorität für die Mail wird gesetzt Message->Priority = mpNormal; //Der Mail-Inhalt wird aus Memo1 ausgelesen Message->Body->Text = Memo1->Text; //Wenn nicht verbunde, verbinden if (IdSMTP1->Connected() == true) IdSMTP1->Disconnect(); IdSMTP1->Connect(); //Dass man sich authorisieren muss wird festgelegt IdSMTP1->AuthenticationType = atLogin ; //Authorisierung.. IdSMTP1->Authenticate() ; try { IdSMTP1->Send(Message); SuccesfullySended = true; } //Bei Fehler abfangen catch(...) { SuccesfullySended = false; Application->MessageBox ("Fehler beim Senden!","Fehler",0); IdSMTP1->Disconnect(); } //Und wieder trennen IdSMTP1->Disconnect(); //Und Benachrichtigen if (SuccesfullySended == true) Application->MessageBox ("Erfolg","Successfully sended!",0); else Application->MessageBox ("Fehler","Error!",0);
Falls es schlecht ist, ganze code beispiele zu posten, dann löscht den post (hab ne page mit den forumregeln nich gefunden).
Wenn es kritik gibt, postet sie bitte, damit ich mich verbessere.
J0
<edit>Ok, du wirst nur angeflamet, weil du type="C++" beim Code-tag vergessen hast. Ausserdem solltest du dir angewöhnen deine Sourcen etwas besser zu formatieren... Einrücken und so. das erleichtert so einiges.</edit>
[ Dieser Beitrag wurde am 25.12.2002 um 16:40 Uhr von junix editiert. ]
-
Hmmmm Da gibts (von meiner SIcht) nicht viel zu kritisieren. Ausser die lausige Formatierung der sourcen.
Die Lesbarkeit liegt unter aller sau. Ich hab mir mal erlaubt die Formatierung etwas leserlicher zu gestalten:/*Benutzte komponenten: Indy Clienten: TIdSMTP Indy sonstiges: TIdMessage Name von TIdMessage = Message*/ void __fastcall TForm1::Button1Click(TObject *Sender) { bool SuccesfullySended = false; /* Host, Benutzername und Passwort aufsetzen */ IdSMTP1->Host = Host->Text; IdSMTP1->UserId = Username->Text; IdSMTP1->Password = Password->Text; //Für die Mail-Services, die authorisierung erfordern: IdSMTP1->SocksInfo->Host = AuthHost->Text; IdSMTP1->SocksInfo->UserID = Username->Text; IdSMTP1->SocksInfo->Password = Password->Text; /* Mail zusammenstellen */ Message->From->Name = Fromname->Text; Message->From->Address = Username->Text; Message->Recipients->EMailAddresses = Toname->Text; Message->Subject = Subject->Text; Message->Priority = mpNormal; Message->Body->Text = Memo1->Text; //Wenn eine Verbindung steht, wird diese unterbrochen if (IdSMTP1->Connected()) IdSMTP1->Disconnect(); IdSMTP1->Connect(); /* Autorisierung konrigurieren und durchführen */ IdSMTP1->AuthenticationType = atLogin ; IdSMTP1->Authenticate() ; /* Versenden der Nachricht */ try { IdSMTP1->Send(Message); SuccesfullySended = true; } catch(...) { SuccesfullySended = false; Application->MessageBox ("Fehler beim Senden!","Fehler",0); IdSMTP1->Disconnect(); } IdSMTP1->Disconnect(); //Benachrichtigen if (SuccesfullySended == true) Application->MessageBox ("Erfolg","Successfully sended!",0); else Application->MessageBox ("Fehler","Error!",0); }
Was hab ich hier effektiv gemacht? Ich hab logische BLöcke voneinander getrennt. Habe auf einige unnötige Kommentare verzichtet und logische Blöcke zusammengefasst und diese Kommentiert.
Ausserdem habe ich mittels Einrücken etwas mehr Übersicht in die Strukturen gebracht. So steht nun die else-Anweisung nichtmehr direkt hinter dem else sondern auch - wie die then-anweisung auf einer neuen Zeile.
Innerhalb von Blöcken (das zwischen {}) habe ich ebenfalls um 1 Tabulator (üblicherweise 4 leerzeichen) eingerücktVersuch dir irgend einen Stil anzugewöhnen und diesen Konsequent einzuhalten, das erleichtert die Lesbarkeit von Quellen erheblich. Ausreden ala "nur ein schneller hack" oder so gelten hier nicht, denn es kostet praktisch keine mühe sich etwas mit der Formatierung zu beschäftigen schon während man die Sourcen schreibt. Ausserdem ist das reine Gewöhnungssache.
Ahja, Mach auch ausgiebig gebrauch von Absätzen (Returns). Sie fressen kein Heu machen aber den Code ebenfalls übersichtlicher.
-junix
[ Dieser Beitrag wurde am 25.12.2002 um 16:55 Uhr von junix editiert. ]
-
Ich habe Indy 9 da gibts UserID nicht aber Username. Müßte das gleiche sein.
Bei mir Funktioniert es aber trotzdem noch nicht.
Was muß denn in AuthHost->Text stehen?
Ich habe es mit den SMTP Server erfolglos versucht.
-
Statt der Vermutungsprogrammierung solltest dus mal mit systematischem Suchen von Informationen versuchen. Am Besten in der Dokumentation der Indy-Komponenten.
Der Autorisationsserver ist der den du auch z.B. bei Outlook Express angeben musst. (in der Regel der POP server)
-junix
-
Ich habe es mit dem POP3 Server von gmx probiert er gibt immer noch die gleiche Fehlermeldung.
-
wie währst anstelle von pop3.gmx.de mit pop.gmx.de ??? is bei gmx zumindest so
@ junix sorry wegen der schei** formatierung, benutze für gewöhnlich formatierungen, hab´s nur irgendwie vergessen
J0
-
Ich benutze den pop.gmx.net aber ich habe es auch schon mit pop.gmx.de probiert.
Ich habe noch ein paar Email Adressen bei anderen Anbietern, leider tritt dort der gleiche Fehler auf(Außer bei Web.de da gibt es einen andere Fehlermeldung).
Deshalb vermute Ich das eine Einstellung nicht richtig ist?
Oder hat es bei jemand anderes Funktiomiert??
-
Wie sieht diese Fehlermeldung aus?
Web.de benutzt nicht SMTP,sondern IMAP (oder so ähnlich)
Welche Indy Version hast du?
Ich habs mit den neuesten (ich glaube 9.10 oder so) getestet, alles klappt einwandfrei.J0
-
Ich habe Indy 9.0
Die Fehlermeldung lautet "535 {mp017-rz3} auth failure."
-
dann lad dir als erstes indy update runter.
auth failure bedeutet ja dass die athentication fehlgeschlagen ist.
dasss kann ja (eigendlich)
a) nur am falschen Password oder
b) am falschen server liegen (der richtige is mail.gmx.de)wenn du willst kann ich mal das fertige mail-programm inklusive aller sourcecodes hochladen, aber eigendlich müsstest du dafür genügend beispiele finden
J0