Email per AUTH SMTP versenden
Hallo,
wie kann ich eine Email per AUTH SMTP versenden? (Also das wo man sich per SMTP einloggen kann...) Die Komponenten sind mir egal, also entweder Indy oder FastNet. Ich wüsste zwar wie ich das Protokoll selber machen müsste, aber das wäre der letzte Schritt denn ich machen würde. Mit Indy oder FastNet ist es ja eigentlich bequemer :lol:. |
Hier mal ein kleines Beispiel (Indy 9.x TSMTP Komponente namens SMTP)
Code:
- Der Rest ist wie normal´ohne AuthSMTP...{authentication settings} SMTP.AuthenticationType := atLogin; {Simple Login} SMTP.Username := 'derNameZumAnmelden'; SMTP.Password := 'dasDazugehörigePassword'; ...:cat:... |
Ich hab jetzt einen solchen Code im meinem Proggy stehen:
Code:
(AuthenticationType ist im ObjectManager schon gesetzt.)
procedure TForm1.Button2Click(Sender: TObject);
var Email: TIdMessage; i: integer; begin Gauge1.MaxValue := ListBox1.Items.Count; Gauge1.Progress := 0; Gauge1.MaxValue := ListBox1.Items.Count; ListBox2.Clear; ListBox2.Items.Add('Setze alle Login-Daten...'); smtp.Host := Edit1.Text; smtp.UserId := Edit2.Text; smtp.Password := Edit3.Text; ListBox2.Items.Add('Kontaktiere zum Mailserver...'); smtp.Connect; Email := TIdMessage.Create(nil); ListBox2.Items.Add('Starte zum Emailsenden...'); for i := 0 to ListBox1.Items.Count-1 do begin Email.Recipients.Clear; Email.Recipients.Add.Address := ListBox1.Items.Strings[i]; Email.Subject := Edit6.Text; Email.Body.Text := Memo2.Lines.Text; smtp.Send(Email); ListBox2.Items.Add('Newsletter wurde erfolgreich an "'+ListBox1.Items.Strings[i]+'" versandt.'); Gauge1.Progress := i+1; end; end; Jetzt bekomm ich immer folgenden Error: Zitat:
|
Moin Webby,
Fehler 11001 sagt aus: Zitat:
Da wird wohl ein Rechner nicht gefunden. |
Ups, stimmt ich hab ja "smtp.gmx.de" statt "mail.gmx.de" angegeben.:oops:
Naja, ich hab jetzt den Host verbessert aber jetzt kommt trotzdem folgende Fehlermeldung: Zitat:
Zitat:
|
Auf Anhieb finde ich keinen Fehler - aber schau Dir mal aus den aktuellen Indy-Demos die Demo MailClient2 an, vielleicht findest Du ja noch einen grundlegenden Unterschied. (Notfalls stelle einfach noch einmal den AuthenticationType im Code ein)...
|
Ok, ich werde es mir das Demo danach einmal anschauen...
|
Hab gerade das Demo doch noch schnell ausprobiert.
Leider kommt da der gleicher Error.:cry: Ich glaub mir bleibt nichts anderes übrig als selber eine Komponente zu programmieren. (Ich hab ja schon sowas Programmiert allerdings in PHP und da hat man halt den vorteil das alles Schritt für Schritt abläuft und nicht so "quer" wie in Delphi ;)) |
Eventuell liegt es auch an GNX. hats du es mal mit Outlook oder etwas ähnlichem probiert?
|
Wie schon mal gesagt über PHP klappt es super.
Wenn der Quelltext brauchbar wäre, könnte ich ihn hier posten... Und über Outlook Express funktionierts auch... |
Hai webby,
hast Du auch wirklich die richtigen Zugangsdaten für GMX? Als Benutzername musst Du keine Kundennummer nehmen! Ausserdem musst Du in deinem GMX-Profil die Art der SMTP-Sicherheit einstellen (Steht zumindest in der Hilfe von GMX)[/b] |
Vollständige E-Mail-Adresse geht auch.
|
Es wird wohl an eine (normalen) Unregelmäßigkeit im Protokoll bei GMX liegen, da ich die Indy Komponenten auch in meiner Software nutze und teilweise auch SMTP Auth nutze - ohne Probleme.
Vielleicht kannst Du etwas im Netz finden, Outlook kommt ja auch mit GMX zurande, also scheint es wohl ein häufigeres Problem zu sein... ...:cat:... |
Also ich hab vor einiger Zeit mal über die Fastnet-STMP-Kompo Mails über GMX abgeschickt - das hat funktioniert. Normales SMTP, kein SMTP-Auth. GMX braucht nur normales SMTP, vielleicht lässt es umgekehrt kein SMTP-Auth zu?
|
Doch GMX unterstützt AUTH SMTP, weil sonst dieser Code (von mir geschrieben) in PHP auch nicht gehen würde:
Code:
Und wenn ich ganz normal SMTP verwende muss ich mich erst per POP bei GMX einloggen, sonst geht nichts.
function smtpmail($host, $user, $pass, $emailaddy, $toemail, $subject, $message)
{ $fp = fsockopen($host, 25); if ($fp) { fgets($fp, 1024); fputs($fp, "EHLO $host\r\n"); fgets($fp, 1024); fputs($fp, "AUTH LOGIN\r\n"); fgets($fp, 1024); fputs($fp, base64_encode($user) . "\r\n"); fgets($fp, 1024); fputs($fp, base64_encode($pass) . "\r\n"); fgets($fp, 1024); fputs($fp, "MAIL FROM: $emailaddy\r\n"); fgets($fp, 1024); fputs($fp, "RCPT TO: $toemail\r\n"); fgets($fp, 1024); fputs($fp, "DATA\r\n"); fgets($fp, 1024); fputs($fp, "Subject: $subject\r\n"); fputs($fp, "FROM: $emailaddy\r\n"); fputs($fp, "TO: $toemail\r\n\r\n"); fputs($fp, "$message\r\n"); fputs($fp, ".\r\n"); fgets($fp, 1024) ; fputs($fp, "QUIT\r\n"); fgets($fp, 1024); fclose($fp); } else { echo "[b]Es konnte keine Email versandt werden, bitte wenden Sie sich an den Webmaster![/b] \n"; } } |
Ich weiß nicht genau, ob GMX die "POP before SMTP"-Methode benutzt, denn ich konnte schon Mails abschicken, als ich Stunden zuvor mal mich zum POP-Server verbunden hab.
|
Ich weiß nicht auf wieviel deren TimeOut gesetzt ist. Jedenfalls wird beim (erfolgreichen) POP-Zugriff die IP gespeichert und dann halt für SMTP aufbewahrt...
|
Du kannst bei GMX einstellen wie es arbeiten soll.
SMTP-Auth SMTP after POP mit IP prüfung (time out freieinstellbar) SMTP ohne IP Prüfung |
Ups, das wusste ich noch gar nicht.
Naja, ich geh ja normalerweise nicht auf die GMX Homepage, ich brauch ja nur die Emailadresse für meine Homepage. Jedenfalls hilft es trotzdem nichts :cry:. |
werden in deinem Delphiprogramm deine Zugangsadten auch richtig verschlüsselt? ich würds mal mitsniffen und vergleichen, was dein PHP und was dein Delphiprogramm _wirklich_ durch die leitung schreibt
gruss |
Sorry wegen der dummen Frage die jetzt kommt, aber wie sniffe ich die Indy Komponenten aus? :)
Bin ja in Bezug auf Indy ein Newbie... |
das hat grt nichts direkt mti den Indy Komponenten zu tun. Dazu nimmst du einfach ein externes Programm, dass dein Netzwerkdevice "mitschreibt".
Ich verwende dazu "ethereal - Interactively browse network traffic" (http://www.ethereal.com/ wenn jemand ein besseres Tool hat, dass vielleicht bei großen Datenmengen die Selektion erleichtert, wäre das cool, wenn ihr mir das sagen könntet. aber prinzipiell ist das tool geil... |
ahja, nohc zur vorgehensweise:
Einmal einen erfolgreichen Mailsendevorgang mitschreiben und einmal einen mit deinen Indy Komponenten mitschreiben und dann vergleichen, dass du wenigstens mal den fehler findest. |
Achso, ja solche Sniffer kenn ich schon, ich hatte auch einen immer auf meinem altem PC, dort ging er aber leider nie so richtig und auf meinem jetzigen stürtzt das Programm immer ab (nicht nur das, sogar ein BlueScreen) was mich bei Win XP (HE) schon ein bisschen verblüfft, weil ich das noch nicht mal mit meinen eigenen Programmen geschafft habe. :lol:
Ich werde mir mal dieses Programm näher anschauen, doch leider hab ich gesehen, dass es rund 10 MB hat. Ich hab leider noch immer ein 56k Modem... :-/ Ich melde mich, wenn ich es getestet hab... :) |
Ich hab jetzt das Programm, leider stürzt mein Computer auch mit ihm ab. :( Obwohl ich, wie auf der Site angewiesen, die Treiber dafür runtergezogen habe.
---------------------------------------- Yeapy! Mein 100stes Posting in DP!!! |
Hi
Ich hatte dasselbe Problem :? und das Tool hat mir perfect geholfen. Bei mir Lag es daran das wenn die EMail erstellt wird kein Absendername angegeben wird und GMX verbietet ganz einfach anonym zu verschicken. Ich hoffe ich konnte helfen. |
Ich hab es mal aus Neugierde mit meinem web.de Account probiert, da ging es... :-/
Ich glaube ich werde in Zukunft auch den dann benutzen... |
@ Webby nur so aus neigierde is das Email Prog zufällig aus dem Buch BHv Einstreiger Seminar?
cya |
Nein, es war Eigenerfindung. :)
Es sollte mal ein Newsletter-Versender werden, was ich aber mehr oder weniger schon aufgegeben habe (weil auch seit Anfang diesen Jahres meine alte Homepage nicht mehr existiert). Aber wenn es dich interessiert, ich hab ein Buch vom bhv-Verlag "Das Einsteigerseminar - PHP 4". :lol: |
Zitat:
nur mal als Anregung: Einen solchen "Newsletter-Versender" würde ich nie über einen SMTP-Server versenden. Besser ist es via DNS-Abfrage die IP(s) der Mailserver des Empfängers zu ermitteln und dann die eMail direckt dort abzusetzen. Dann kannst Du nämlich gleich die Meldungen des Servers auswerten (empfänger unbekannt, usw). |
Das wär wirklich besser! :)
Ich hab davon aber noch nie zuvor gehört. Gibt es da genauere Anregungen irgendwo im Netz? Also wie ich zum Beispiel direkt dorthin die Mail versenden kann?! |
Zitat:
Also, das versenden direckt an den Empfänger Server ist eigentlich ganz einfach.... Du brauchst "nur die IP-Adresse des Mailservers" und diese trägst Du dann bei deiner eMail-Kompo als HOST ein. Aber wie kommst Du an die IP-Adresse? Dazu musst du eine DNS-Abfrage machen. Du brauchst also die IP-Adresse eines DNS-Server (aber den bekommst Du ja immer von deinem Provider zugewiesen. Ansonsten gibt es genug bekannte IPs). Jetzt machst Du folgendes. Du holst dir aus der eMail Adresse des Empfängers die Domaine. z.B.: sharky_ffm@gmx.de Das wäre dann gmx.de Jetzt musst Du prüfen ob es einen oderer mehrere MX-Einträge (MessageExchange) für diese Domaine gibt. Wenn ja wird dir von dem DNS-Server entweder die IP oder ein DNS-Name des bzw. der Mail-Server zurückgegeben. Wenn es keinen MX-Eintrag gibt ist es in der Regel so das Du die Mail an den Typ-A Eintrag der MailDomaine. Uff.... das ist echt schlecht beschreiben. Von Synapse gibt es eine DNS-Unit Die alle Funktionen hat die Du benötigst. Schaue sie dir mal an. Damit habe ich das gelöst. Ich mache das ganze dann in Threads und versende so immer 10 eMail "gleichzeitig". Bei Frage melde dich einfach noch einmal. |
Ich empfehle dir nim die Indy Kombonente damit habe ich auch gute erfolge gehabt.
Delphi-Quellcode:
idMessage.Clear;
idSMTP.AuthenticationType:= atLogIn; idSMTP.Host := Host.Text; idSMTP.Username := Username.Text; idSMTP.Password := Passwort.Text; idMessage.Sender.Text:= (AbsenderName.Text)+' <'+(AbsenderEmail.Text)+'>'; idMessage.ReplyTo.EMailAddresses:= ReplyTo.Text; idMessage.Subject := Betreff.Text; idMessage.Body.Add(Nachricht.Text); idMessage.Recipients.EMailAddresses:= EmfaengerEmail.Text; idMessage.From.Address:= AbsenderEmail.Text; idSMTP.Connect; idSMTP.Send(idMessage); idSMTP.Disconnect; |
@ F.Art kannst bitte nen Beispiel posten wie man mit der Indy Dateianhänge verschickt?
Bei gmx klappt bei mir jetzt alles nachdem ich wie von Sharky beschrieben auf der site SMTP after POP mit IP prüfung eingestellt hab. Aber ich hab nochn Problem mit freenet, die server sind pop3.freenet.de und mx.freenet.de so hab ich die jedenfalls bei outlook eingestellt und da funktionierts. Aber irgendwie gehts bei meinem Programm nicht. Auf der site hab ich schon nachgeschaut nach einstellungsmöglichkeiten wie die bei gmx, gibts da auch noch irgendwelche tricks um mails über freenet zu verschicken? Vielen Dank masters001 |
bei freenet musst du authlogin machen und username ist deine@email.de und das passwort.
Delphi-Quellcode:
TidAttachment.Create(idMessage.MessageParts,Datei.Text);
|
@Sharky: Ich werde, wenn ich wieder mal Zeit habe das genauer nachprüfen. Ich glaube aber ich hab soweit alles verstanden! THX
|
Re: Email per AUTH SMTP versenden
habe mich mal dem code bedient. danke!!!
kann mir jemand sagen, wie ich ne message ausgeben lassen kann, die angibt, ob der mailversand erfolgreich oder nicht erfolgreich abgeschlossen wurde? gibt es da vielleicht ein onSended oder so? Gruß, dopeline |
Re: Email per AUTH SMTP versenden
Hallo
könnte mir jemand bitte sagen wie sicher AUTH SMTP (Indy) ist ?? wenn mann weiss dass SMTP sicherheitslücken hat!!!! :gruebel: |
Re: Email per AUTH SMTP versenden
Zitat:
...:cat:... |
Re: Email per AUTH SMTP versenden
dake für die Antwort :balloon:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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