![]() |
Email mit Indy verschicken
Hallo,
dieses Thema wurde zwar schon oft erklärt und erwähnt, jedoch bin ich mir nicht ganz sicher. Ich möchte eine Email versenden. Jetzt fehlen mir die Grundkenntnisse. Ich habe meinen Emailaccount bei ![]() Falls jemand einen Link zur Demo für die Indy's hat, wäre ich sehr glücklich. Diese sollte mit Delphi 7 kompilierbar und mit Indy 10 geschrieben sein. Als nächste Frage stellt sich, wie ich gleichzeitig an 10 Leute schreiben kann. Zwar könnte ich das in eine For-Schleife packen, aber es gibt sicherlich eine resourcensparendere Möglichkeit, oder? Danke schon im Vorraus. :wink: |
Re: Email mit Indy verschicken
Zitat:
Such mal hier im Forum. Ich hab dazu schon mal was gepostet. Aber ich mach hier mal nen Schmalspur Code rein: Email ist eine TIdMessage Komponente idsmtp die smtp Komponente daran denken, das der Zielserver evtl. Username und PW braucht (kannst im Objektinspektor eintragen, ebenso den Host)
Delphi-Quellcode:
Gruss
procedure TFDMailer.startClick(Sender: TObject);
var Email: TIdMessage; begin s := 0; Email := TIdMessage.Create(nil); Email.Recipients.Clear; Email.Recipients.Add.Address := edit4.text; Email.BccList.Add.Address := bccedit1.text; (hier musst die BCCs reinpacken); Email.BccList.Add.Address := bccedit2.text; . .... Email.from.Text := edit3.text; Email.From.Name := edit2.Text; Email.From.Address := edit1.text; Email.Subject := T_betreff.Text; email.Date := Now; with TIdText.Create(email.MessageParts, nil) do begin Body.Text := mailbody.Text; CharSet := 'iso-8859-1'; ContentTransfer := 'quoted-printable'; ContentType := 'text/plain'; ParentPart := -1; end; with TIdText.Create(email.MessageParts, nil) do begin Body.Text := mailbody.asansistring('html'); CharSet := 'iso-8859-1'; ContentTransfer := 'quoted-printable'; ContentType := 'text/html'; ParentPart := -1; end; if trim(gdateiname) <> '' then TIdAttachmentfile.Create(email.MessageParts, gdateiname); idsmtp.Connect; try idsmtp.Send(Email); idsmtp.Disconnect; except idsmtp.Disconnect; end; showmessage('Mail wurde verschickt'); end; EL |
Re: Email mit Indy verschicken
Was ist s?
|
Re: Email mit Indy verschicken
Delphi-Quellcode:
Hier kommen wie verrückt Fehlermeldungen. Das Fettgedruckte kennt er nicht. Und bitte mal daneben schrieben, was für was zuständig ist :)
var
Email: TIdMessage; s: integer; begin s := 0; Email := TIdMessage.Create(nil); Email.Recipients.Clear; Email.Recipients.Add.Address := edit4.text; Email.BccList.Add.Address := bccedit1.text; Email.from.Text := edit3.text; Email.From.Name := edit2.Text; Email.From.Address := edit1.text; Email.Subject := T_betreff.Text; Email.Date := Now; with TIdText.Create(email.MessageParts, nil) do begin [b]Body.Text[/b] := mailbody.Text; [b]CharSet[/b] := 'iso-8859-1'; [b]ContentTransfer[/b] := 'quoted-printable'; [b]ContentType[/b] := 'text/plain'; [b]ParentPart[/b] := -1; end; with TIdText.Create(email.MessageParts, nil) do begin Body.Text := mailbody.asansistring('html'); CharSet := 'iso-8859-1'; ContentTransfer := 'quoted-printable'; ContentType := 'text/html'; ParentPart := -1; end; if trim(gdateiname) <> '' then TIdAttachmentfile.Create(email.MessageParts, gdateiname); |
Re: Email mit Indy verschicken
1. Den Antifreeze nicht vergessen
2. in Uses: IdAntiFreeze, IdMessage,IdAttachmentFile. 3. die TIdMessage Komponente hab ich EMail genannt. Der Mailbody ist ein Richtext. Also auch noch ne Richtext Komponente dazu machen. Und nun ist mal ein wenig Kreativität gefragt. Übrigens: auch bei indy selbst gibt hervorragende Beispiele Gruss EL |
Re: Email mit Indy verschicken
Aha ... und was ist das alles? :mrgreen:.
Ich werde mal damit anfangen, die Indydemo dazu runterzuladen und das Programm umzuschreiben. Trotzdem Danke! |
Re: Email mit Indy verschicken
So ... die Indykomonente funktioniert ja überhaut nicht ... Die kann ich erstmal vergessen ;)
Delphi-Quellcode:
das am Anfang mit //kommentierte: ich bin mir nicht sicher, was was ist ... habe ich recht mit dem, was ich daneben geschrieben habe?
var
Email: TIdMessage; s: integer; begin s := 0; Email := TIdMessage.Create(nil); Email.Recipients.Clear; //? Email.Recipients.Add.Address := edit4.text; //email des empfängers Email.BccList.Add.Address := bccedit1.text; //email des empfängers Email.from.Text := edit3.text; //Text der Email Email.From.Name := edit2.Text; //Name dem die Email gehört, also mein Name Email.From.Address:=edit1.text; //Absender Email.Subject:=edit2.text; //Betreff Email.Date := Now; with (**TIdText**).Create(email.MessageParts, nil) do begin (**Body.Text**) := mailbody.Text; (**CharSet**) := 'iso-8859-1'; (**ContentTransfer**) := 'quoted-printable'; (**ContentType**) := 'text/plain'; (**ParentPart**) := -1; end; with TIdText.Create(email.MessageParts, nil) do begin Body.Text := mailbody.asansistring('html'); CharSet := 'iso-8859-1'; ContentTransfer := 'quoted-printable'; ContentType := 'text/html'; ParentPart := -1; end; if trim(gdateiname) <> '' then TIdAttachmentfile.Create(email.MessageParts, gdateiname); idsmtp.Connect; try idsmtp.Send(Email); idsmtp.Disconnect; except idsmtp.Disconnect; end; showmessage('Mail wurde verschickt'); end; später habe ich mit (** **) Wörter kommentiert. Das ist ein Teil von denen, die Delphi nicht kennt. Habe ich irgendwas vergessen? Danke schon im Vorraus. P.S.: Weitere Fehler folgen noch ;) |
Re: Email mit Indy verschicken
Zitat:
with (**TIdText**). .... dann machst Du einfach ein USES IdText ... und fertig. Gruss EL |
Re: Email mit Indy verschicken
[/delphi]Super! Funktioniert alles! Letzte Frage:
Delphi-Quellcode:
Jetzt steht nicht nur ein Empfänger in einem Edit, sondern jetzt stehen 10 Empfänger in einer Listbox. Wie mache ich das?
Recipients.Add.Text := Trim(edit1.text);
Delphi-Quellcode:
Das geht leider nicht. Aber eine andere Frage, fast dieselbe:
Recipients.Add.Text := Trim(listbox1.items);
Ich will einem Stringsrray alle Listboxinhalte geben: Funktioniert auch nicht!
Delphi-Quellcode:
Danke schon im Vorraus!
var
adressen: array[1..1000] of string; begin for i:= 1 to listbox1.Items.count do begin adressen[i]:=listbox1.Items(i); end; |
Re: Email mit Indy verschicken
Zitat:
Delphi-Quellcode:
gehen
for i:= 0 to 10
email.Recipients.Add.Text := listbox1.Item[i]; end; Gruss EL PS.: Wenn Du einen fertigen NewsletterMailer brauchst... ich hab ihn |
Re: Email mit Indy verschicken
danke ... kannst ihn mir ja mal per pn schicken ... dann weiß ich, was ich noch einbauen kann ;)
|
Re: Email mit Indy verschicken
Zitat:
Gruss EL |
Re: Email mit Indy verschicken
egal ... ich brauch ja nur ein paar ideenanregungen ...
|
Re: Email mit Indy verschicken
Liste der Anhänge anzeigen (Anzahl: 1)
Sry wegen Doppelpost, aber ich verstehe eines nicht:
Mein Code:
Delphi-Quellcode:
Im Anhang ein Screenshot von einer Fehlermeldung.
procedure TForm1.SpeedButton3Click(Sender: TObject);
var i: integer; adressen: array[1..1000] of string; begin speedbutton3.Enabled:=False; try with email do begin Clear; From.Text := Trim(edit3.Text); for i:= 1 to listbox1.Items.count do begin Recipients.Add.Text := trim(listbox1.Items[i]); end; Subject := Trim(edit2.Text); Body.Assign(memo1.Lines); end; with idsmtp do begin Connect; try Send(email); finally Disconnect; end; end; finally speedbutton3.Enabled:=True; end; end; P.S.: Weiß jemand, wie ich HTML-Code aktivieren kann? Ich möchte sozusagen auch einen banner einfügen können, etc.: sowas halt: <a href>http://blabliblu...</a> oder wie auch immer |
Re: Email mit Indy verschicken
Die Listbox Items laufen von 0..count-1 und nicht von 1..Count :zwinker:
|
Re: Email mit Indy verschicken
Also nicht:
Delphi-Quellcode:
Sondern:
for i:= 1 to listbox1.Items.count do
begin Recipients.Add.Text := trim(listbox1.Items[i]); end;
Delphi-Quellcode:
Richtig?
for i:= 0 to listbox1.Items.count-1 do
begin Recipients.Add.Text := trim(listbox1.Items[i]); end; |
Re: Email mit Indy verschicken
Liste der Anhänge anzeigen (Anzahl: 1)
Aber bei dm meckert er auch wieder.
|
Re: Email mit Indy verschicken
was bitte nützt mir dieser nichtsaussagekräftige Screenshot... Debug doch mal deine Anwendung und grenz den Fehler ein. So kann Dir doch kein Mensch helfen...
|
Re: Email mit Indy verschicken
tut mir leid, aber was soll ich denn machen? ich hab schon vieles versucht, geändert, etc. den code habe ich auch schon mehrmals gepostet. was soll ich denn deiner meinung nach jetzt tun?
|
Re: Email mit Indy verschicken
Du musst doch eingrenzen können, in welcher Zeile der Fehler auftritt. Statt dein Programm normal mit F9 zu starten, setze doch mal einen Haltepunkt in die erste Zeile der Prozedur. danach gehst Du Zeile für Zeile mit F8 durch den Debugger.
|
Re: Email mit Indy verschicken
achso ... ich dachte, das wäre klar, weil ich nur eins geändert habe, und es seitdem nicht mehr funktioniert.:
Delphi-Quellcode:
Recipients.Add.Text := trim(listbox1.Items[i]);
|
Re: Email mit Indy verschicken
Ich würd das Hinzufügen einer Adresse so machen:
Delphi-Quellcode:
Die Unit IdEMailAddress nicht vergessen einzubinden.
...
var NewAddress : TIDEMailAddressItem ; begin ... NewAddress := email.Recipients.Add ; NewAddress.Address := trim(listbox1.Items[i]); end; |
Re: Email mit Indy verschicken
Liste der Anhänge anzeigen (Anzahl: 2)
Selber Fehler wie sonst. :(
Ich poste noch mal den Code, wie er jetzt grade ist:
Delphi-Quellcode:
p.s. anbei mein projekt ... vll liegt es ja auch an was anderem ...
procedure TForm1.SpeedButton3Click(Sender: TObject);
var i: integer; adressen: array[1..1000] of string; NewAddress : TIDEMailAddressItem ; begin speedbutton3.Enabled:=False; try NewAddress := email.Recipients.Add ; NewAddress.Address := trim(listbox1.Items[i]); (**for i:= 0 to listbox1.Items.count-1 do begin email.Recipients.Add.Text := trim(listbox1.Items[i]); end; **) with email do begin Clear; From.Text := Trim(edit3.Text); Subject := Trim(edit2.Text); Body.Assign(memo1.Lines); end; with idsmtp do begin Connect; try Send(email); finally Disconnect; end; end; finally speedbutton3.Enabled:=True; end; end; |
Re: Email mit Indy verschicken
Sorry, aber dein Quellcode im Anhang überschneidet sich nicht mit dem im Post. du hast aber wieder das gleiche Problem. Bei dieser Zeile:
Delphi-Quellcode:
Überleg mal, was für einen Wert i hat :zwinker:
NewAddress.Address := trim(listbox1.Items[i]);
Ausserdem willst Du ja alle Adresse aus deiner Listbox1 in die Recipients Liste legen... Kombinier doch mal ein bischen :wink: Weisst Du überhaupt was Du tust in deinem Code, oder sind das einfach nur ein paar zusammenwürfelte Codeschnippsel ? |
Re: Email mit Indy verschicken
Mir ist ziemlich alles klar, aber nachdem ich alles 10 Mal geändert habe, sind da sicherlich recht viele Fehler drin. Ich geh nochmals alles durch ;)
|
Re: Email mit Indy verschicken
Was mache ich falsch? Bei Breakponits, Fehler eingrenzen, logisch mitdenken ;) müsste es eigentlich klappen. Ich denke mal, es liegt an dem Befehl
Delphi-Quellcode:
bzw.
email.Recipients.Add.Text := adressen[i];
Delphi-Quellcode:
Ich bekomme immer den Fehler: Project1.exe raised exception class EldSMTPReplyError with message ''. Process stopped. Use run or step to continue.
email.Recipients.Add.Text := trim(adressen[i]);
Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var i,a: integer; adressen: array[1..1000] of string; begin speedbutton3.Enabled:=False; try a:=0; for i:= 0 to listbox1.Items.count-1 do begin a:=a+1; adressen[a] := listbox1.Items[i]; //memo1.lines.add(adressen[a]); end; for i:= 1 to a do begin email.Recipients.Add.Text := adressen[i]; //auch wenn ich es so mache, klappt es nicht: email.Recipients.Add.Text := trim(adressen[i]); end; with email do begin Clear; From.Text := Trim(edit3.Text); Subject := Trim(edit2.Text); Body.Assign(memo1.Lines); end; with idsmtp do begin Connect; try Send(email); finally Disconnect; end; end; finally speedbutton3.Enabled:=True; end; end; |
Re: Email mit Indy verschicken
Zitat:
|
Re: Email mit Indy verschicken
Wenn ich nur eine Emailadresse habe, und die über ein Edit eingebe, funktioniert es ja ...
Firewall hab ich net :lol: |
Re: Email mit Indy verschicken
Liste der Anhänge anzeigen (Anzahl: 1)
So, kurzzeitig hat es funktioniert, aber es klappt immer noch nicht einwandfrei. Hier der KOMPLETTE Code. Ich habe ihn etwas umgeschrieben. Vielleicht funktioniert er ja bei euch ;). Er meckert immer "IdSMTPReply". Ich bin mir aber sicher, dass meine Daten richtig sind, denn sie werden ja auch am Anfang akzeptiert.
Viele werden wahrcheinlich sagen, dass ich es umständlich gemacht habe beim Senden, weil ich nicht mehrere Adressen mit einem Mal schicke, sondern die gesamte Prozedure so oft ausgeführt wird, bis er alle Emails durch hat. Naja, wie dem auch sei. Ich hoffe, ich finde bald das Problem. Wäre schön, wenn ihr mir sagen würdet, was ich falsch mache. Ich habe die Übergabe von den 2 Formen kontrolliert, Breakpoints gesetzt(leider zeigt Delphi keineWerte mehr an, wenn man ümit der Maus drüber geht), etc. :coder2: Was mache ich denn falsch? :wiejetzt: |
Re: Email mit Indy verschicken
Versteht ihr mich nicht? Habe ich meine Frage nicht präzise genug gestellt? Habe ich irgendetwas anderes falsch gemacht? Oder warum ann mir keiner helfen? Ist es etwas Einzigartiges, was ich beantwortet haben möchte, oder ist es gar unmöglich? ;)
|
Re: Email mit Indy verschicken
Also der Thread ist schon älter, da ich aber im Moment das gleiche problem hab eine Frage:
Zitat:
MfG :angel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz