Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zwei Felder als Email senden
Chaka - Do 06.11.08 18:09
Titel: Zwei Felder als Email senden
Hallo,
also ich lerne Pascal erst, kann deswegen nicht so richtig viel.
Ich habe jedenfalls vor ein Programm zu entwickeln, das 2 Edit-Felder beinhaltet. Das eine ist für den Namen das andere für eine Email-Adresse. So und jetzt kommt das Problem. Eigentlich sollen die Daten die in das Feld geschrieben werden automatisch an eine Email Adresse gesendet werden. Aber ich weiß überhaupt nicht wie das funktionieren soll... Hoffe hier sind ein paar richtig gute Programmierer die mir helfen würden!
Danke schon einmal im Voraus
Paul
Swordooo - Do 06.11.08 19:44
Hi,
Delphi-Quelltext
1: 2: 3: 4:
| uses ShellApi; ... ShellExecute(Application.Handle, 'open', PChar('mailto:name@email.de?subject=Betreff&body=irgendein Text'), nil, nil, sw_ShowNormal); |
Das setzt aber ein E-Mail Programm Voraus wie z.B. Thunderbird o.ä.
MfG Swordooo
Yogu - Do 06.11.08 20:57
Um die Mail direkt aus Delphi heraus zu senden, benötigst du zum Beispiel die
INDYS. Dabei gibt es allerdings ein Sicherheitsproblem: Die Zugangsdaten für das Sender-Emailkonto (welches du brauchst, wenn du die Mails nicht direkt auf den Server hochlädst) können mehr oder weniger einfach ausgelesen oder abgefangen werden.
Um was handelt es sich denn? Wozu soll die Mail verschickt werden?
Chaka - Do 06.11.08 21:43
Erstmal Danke für die Hilfe. Ja, also es müsste direkt aus Delphi rausgesendet werden. Aber leider weiß ich nicht genau wie das funktioniert. Kannst du mir das vlt nochmal genauer erläutern? wie das genau funktioniert? Also der Benutzer der das Programm ausführt hat 2 Edit-Felder. Da trägt der dann seinen Namen und seine Email-Adresse ein. Dann klickt er auf einen Button und anschließend sollten die Daten dann an eine email Adresse versendet werden. Ob in der Email-Adresse steht:
Name: Max Mustermann
Email:
max@mustermann.de
oder max_mustermann,
max@mustermann.de ist völlig egal...
Viele Grüße
Paul
Chaka - Mi 12.11.08 18:02
Ok. Aber daraus werde ich nicht so richtig Schlau...
Ich muß also dieses Indy erst auf meinem Computer installieren. Dann muss ich in den Quelltext reinschreiben das ich Indy benutze und dann den Code noch einfügen, oder?
aber was muß ich da rein schreiben, das ich Indy verwende???
und wie muß der Code aussehen???
Viele Grüße
Paul
Tilman - Mi 12.11.08 18:49
Die "Indys" sind einfach weitere Komponenten wie TButton, TEdit usw. Nach dem du Indy installiert hast sind die dann in deiner Komponenten-Palette vorhanden und du kannst die einfach in dein Projekt reinziehen.
Chaka - Mi 12.11.08 18:59
ah ok danke!!!
MDX - Mi 12.11.08 19:03
Du könntest auch über PHP schicken lassen:
XML-Daten
1: 2: 3:
| <?php mail('AN', 'BETREFF', 'TEXT', 'From: DEINEMAILADRESSE'); ?> |
du bräuchtest nur einen free hoster wie funpic oder so...
und musst das dann per idhttp1.post an die PHP Datei schicken lassen, wie das geht, kuck einfach mal im Forum
Chaka - Mi 12.11.08 19:42
aha. So geht das also auch. Aber die Seite indyproject.org ist im Moment down... Also die Download-Links. Hab auch schon nach einem alternativ Download gesucht, aber nur einen für Microsoft Visual Studio.NET 2003 gefunden. Gestern war die auch nicht zu erreichen. Hat jemand einen download Link??? oder könnt ihr das mir schicken??
paul
Boldar - Mi 12.11.08 19:48
Swordooo hat folgendes geschrieben : |
Hi,
Delphi-Quelltext 1: 2: 3: 4:
| uses ShellApi; ... ShellExecute(Application.Handle, 'open', PChar('mailto:name@email.de?subject=Betreff&body=irgendein Text'), nil, nil, sw_ShowNormal); |
Das setzt aber ein E-Mail Programm Voraus wie z.B. Thunderbird o.ä.
MfG Swordooo |
Das geht doch genauso gut...
Chaka - Mi 12.11.08 19:52
Ja. Das geht auch, aber ich würde es gern so haben, das der die Email direkt an die Email Adresse sendet, statt das der dann noch Thunderbird & co. öffnet! Vlt. doch mit Php, wenn das funktioniert.
Boldar - Mi 12.11.08 20:23
Man sieht nichts vom Thunderbird...
Der wird sofort wieder geschlossen!
Chaka - Mi 12.11.08 21:22
aber da kommt doch dann dieses Verfassen Feld, oder?
Boldar - Mi 12.11.08 22:03
Nein, die Email wird schon von Delphi aus gesendet, es wird nur das Standart-Email-Programm dafür benutzt. D.h. der User sieht nichts davon.
Chaka - Do 13.11.08 17:11
Boldar hat folgendes geschrieben : |
| Nein, die Email wird schon von Delphi aus gesendet, es wird nur das Standart-Email-Programm dafür benutzt. D.h. der User sieht nichts davon. |
Ich habe das jetzt ausprobiert, doch der öffnet dann Thunderbird und zeigt das an, was ich da als Betreff und so eingegeben habe!
Boldar - Do 13.11.08 17:24
dann musst du statt sw_shownormal was anderes angeben, guck mal inner OH
oder frag einen der Profis hier...
Chaka - Do 13.11.08 17:45
Gut, ich warte :D
Wenn der das nicht anzeigen würde, wäre das Hammer.
Weiß jemand wie das geht??
LexXis - Do 13.11.08 18:12
sw_ShowHidden verhindert, dass das ausgeführte Programm angezeigt wird. Allerdings ändert das soweit ich weiß nichts an der Tatsache, dass Thunderbird/WhatEver die eMail trotzdem nicht senden wird.
mfg
Chaka - Do 13.11.08 18:31
Warum wird Thunderbird die Email nicht senden?
dieses Sw_showHidden funktioniert nicht. Das ist ein undefinierter Bezeichner laut Delphi!
Kannst du mir weiterhelfen?
LexXis - Do 13.11.08 18:42
Oh, huppala. Heißt natürlich SW_HIDE.
Zu Erklärung: Dein eMail-Client wird mit den angegebenen Parametern aufgerufen. Was er damit allerdings im Endeffekt macht, bleibt ja dem Programm überlassen. In dem speziellen Fall ist es eben "eintragen" und nicht "senden". Aber die wenigsten Clients sollten wohl eMails völlig automatisch an irgendwen verschicken. Da stände Mal-/Spyware ja Tür und Tor offen um Daten unbemerkt nach außen zu senden. Wer blockt schon sein eMail-Programm per Firewall :twisted
mfg
Xentar - Do 13.11.08 18:43
Also nochmal:
ShellExecute öffnet ein fremdes Programm. In diesem Fall das Standard-Mailprogramm. SW_Show, SW_Hide usw. gibt dabei an, ob das Programmfenster angezeigt werden, oder im Hintergrund geöffnet werden soll, usw.
Ob Thunderbird nun aber die Mail direkt absendet, oder erst das Nachrichtenfenster öffnet, da hat DEIN Programm (normalerweise) keinen Einfluss drauf - sondern hängt von vom aufgerufenen Programm (also in diesem Fall Thunderbird) ab.
Deswegen nochmal mein Hinweis: Nimm die Indy Komponenten - da bist du gar nicht auf fremde Anwendungen angewiesen.
Die Kompoenten sind meistens schon bei Delphi dabei, also schon vorinstalliert. Welche du brauchst, und wie du die benutzt, steht in dem Tutorial das ich ungefähr letzte Woche schon verlinkt hab..
Chaka - Do 13.11.08 18:55
Ok. Aber die Seite indyproject.org ist offline. Also nur die wo der Download drauf ist..
Und so hab ich keine Möglichkeit an die Installationsdatei ran zu kommen. Hat vlt. jemand die und kann die mir via icq oder email schicken???
ist offline:
http://www.atozed.com/indy/plus/install.iwp
Xentar - Do 13.11.08 19:03
Welche Delphi Version hast du?
Boldar - Do 13.11.08 19:32
Hier [
http://www.delphipraxis.net/topic47481.html] gibs ne Prozedur dafür, aber da wird ne Datei mitgeschickt. Man kann da dann doch einfach ein Datei-dummy mitschicken oder von den Profis hier die Procedur ändern lassen.
Chaka - Fr 14.11.08 18:58
Ich hab Delphi 2007!
Hat vlt jemand noch das Indy Paket???
Xentar - Fr 14.11.08 19:40
Chaka hat folgendes geschrieben : |
Ich hab Delphi 2007!
Hat vlt jemand noch das Indy Paket??? |
Sollte bei deiner Version schon bei sein..
Es sei denn, du hast es bei der Installation abgewählt.
Chaka - Sa 15.11.08 18:37
Super. Danke. Jetzt hab ich es auch!
Aber wo muß ich jetzt überall etwas eingeben (Servername...) und so? Ich hab das jetzt so:
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:
| procedure TForm1.BitBtn1Click(Sender: TObject); begin
case SmtpAuthType of 0: SMTP.AuthenticationType := atNone; 1: SMTP.AuthenticationType := atLogin; end;
SMTP.UserID := SmtpServerUser; SMTP.Password := SmtpServerPassword;
SMTP.Host := SmtpServerName; SMTP.Port := SmtpServerPort;
SMTP.Connect;
try SMTP.Send(Hallo); finally SMTP.Disconnect; end; |
Xentar - Sa 15.11.08 19:25
Du brauchst noch eine IdMessage.
In dieser kannst du die E-Mail bearbeiten (Betreff, Empfänger, Text, usw.)
Anschließend mit SMTP.Send(MyIDMessage); absenden und fertig.
Chaka - Sa 15.11.08 20:04
Sonst muss ich da nichts angeben???
hab das jetzt so:
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: 35: 36:
| procedure TForm1.BitBtn1Click(Sender: TObject); begin
case SmtpAuthType of 0: SMTP.AuthenticationType := atNone; 1: SMTP.AuthenticationType := atLogin; end;
SMTP.UserID := SmtpServerUser; SMTP.Password := SmtpServerPassword;
SMTP.Host := SmtpServerName; SMTP.Port := SmtpServerPort;
SMTP.Connect;
try SMTP.Send(MyIDMessage); finally SMTP.Disconnect; end;
MID:='wh'+FormatDateTime('yymmddssnnhh', now)+'A3F4E4@local'; IdMessage := TIdMessage.Create(Nil); IdMessage.Date := now; idMessage.From.Name:='Name des Absänders'; idMessage.From.Address:='Hier hab ich die Email Adresse an die der senden soll'; idMessage.Recipients.EMailAddresses:='von der adresse'; idMessage.Subject:='Das ist eine Testnachricht'; idMessage.Body.Add('TEXT_1'); idMessage.Body.Add('Text_2'); idMessage.AddHeader('Message-ID: <' + MID + '>'); |
aber angekommen ist bis jetzt nichts...
LexXis - Sa 15.11.08 20:13
Erst die IdMessage befüllen, dann versuchen zu senden ;)
Und natürlich drauf achten, dass auch die richtige IdMessage bei SMTP.Send() angegeben ist.
mfg
UGrohne - Sa 15.11.08 20:32
Tja, Mails verschicken ist keine so einfache Sache, wie man immer glaubt. Du hast in diesem Fall 2 Probleme:
Erstens kann es sein, dass der empfangende Mailserver die Mail ablehnt, weil sie von einer dynamischen Adresse kommt oder anderen Spam-Ähnlichkeiten unterworfen ist (Reverse-DNS usw.), solange Du die Mail nicht über einen von DIr "kontrollierten" SMTP-Server schickst, an dem Du Dich authentifizieren musst. Dann hast Du aber das Problem, dass ohne besondere Vorkehrungen, die Zugangsdaten wie schon gesagt, im Klartext in der Exe stehen.
So, das Zweite wären dann noch Virenscanner und Firewalls. McAffee z.B. blockt erstmal alle ausgehenden SMTP-Nachrichten, wenn sie nicht von bekannten Programmen kommen (Outlook usw.) und das merkt dann nicht mal jemand.
Dafür gibt es nur zwei Lösungen: Entweder Du überlasst dem Nutzer die Kontrolle, worüber und wie geschickt wird (eigener Mailclient, sein eigener Mailserver, ...) oder Du verwendest das PHP-Skript. Letzteres hätte den Charm, dass Du bestimmst, wer der Absender ist und diesem (im Idealfall) auch vertraut wird von anderen SMTP-Servern.
Chaka - So 16.11.08 19:41
Schade, jetzt war ich soweit. Gibts für das Php-Script nen Link?
UGrohne - So 16.11.08 20:36
Chaka hat folgendes geschrieben : |
| Schade, jetzt war ich soweit. Gibts für das Php-Script nen Link? |
Es kommt ja darauf an, was Du genau machen willst. Wenn Du an eine ganz bestimmte Adresse senden willst und weißt, dass dieser Mailserver nicht solche Spam-Maßnahmen ergreift, kannst Du es ja trotzdem verwenden.
Chaka - Mo 17.11.08 17:39
Ja, soll immer nur an eine Email-Adresse. Aber wenn jetzt der Virenscanner oder die Firewall das von dem Client nicht durchlässt... Geht bei gmx so eine Mail durch???
UGrohne - Mo 17.11.08 17:51
Chaka hat folgendes geschrieben : |
| Ja, soll immer nur an eine Email-Adresse. Aber wenn jetzt der Virenscanner oder die Firewall das von dem Client nicht durchlässt... Geht bei gmx so eine Mail durch??? |
Muddu probiern. Aber wenn die Firewall das nicht durchlässt, hast Du wenig Chancen. Daher stimmt das auch wieder ;).
Chaka - Mo 17.11.08 18:31
Muss ich da jetzt noch irgendwas verändern:
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 IdMessage := TIdMessage.Create(Nil); IdMessage.Date := now; idMessage.From.Name:='Programm'; idMessage.From.Address:='chaka@newsletter.de'; idMessage.Recipients.EMailAddresses:='**meine Email**@**die hab ich jetzt geändert**.de'; idMessage.Subject:='Das ist eine Testnachricht'; idMessage.Body.Add('TEXT_1'); idMessage.Body.Add('Text_2'); idMessage.AddHeader('Message-ID: <' + MID + '>');
case SmtpAuthType of 0: SMTP.AuthenticationType := atNone; 1: SMTP.AuthenticationType := atLogin; end;
SMTP.UserID := SmtpServerUser; SMTP.Password := SmtpServerPassword;
SMTP.Host := SmtpServerName; SMTP.Port := SmtpServerPort;
SMTP.Connect;
try SMTP.Send(idMessage); finally SMTP.Disconnect; end; |
ich hab das Ganz genauso wie hier. Muß ich da irgendwas ergänzen???
Xentar - Mo 17.11.08 18:36
1. Wozu das TIdMessage.Create ?
2. Message ID muss man normalerweise nicht selber setzen.
Chaka - Do 20.11.08 18:15
Ich bekomme das irgendwie nicht hin...
Kann mir das jemand noch mal genauer erklären???
Xentar - Do 20.11.08 18:47
Tolle Fehlerbeschreibung..
Hälst du es nicht für besser, erstmal mit den Grundlagen von Delphi anzufangen, bevor du dich an sowas versuchst..? Sowas wie "Wie benutze ich Komponenten" oder so ähnlich..
Boldar - Do 20.11.08 19:15
Chaka - Fr 21.11.08 18:55
Sorry, aber bei mir funktioniert das nicht. Da kommt immer die Meldung das der nicht weiß was mit S gemeint ist. Ich hab bei den Variablen S: String; eingetragen...
Was kann ich tun?
jaenicke - Fr 21.11.08 19:00
Wie sieht der Code denn aus, so wie du ihn jetzt bei dir geschrieben hast?
Boldar - Fr 21.11.08 21:02
s ist das functionsergebnis. Wenn
dann sind keine Fehler aufgetreten, ansonsten enthält s die Fehlermeldung.
Du kannst das einfach ignorieren und die function wie eine procedure aufrufen.
Chaka - So 21.12.08 19:57
Tut mir leid, aber irgendwie bekomme ich das nicht hin. kann man irgendwie auch mit anderen Sprachen das machen?
jaenicke - So 21.12.08 21:23
Chaka hat folgendes geschrieben : |
| Tut mir leid, aber irgendwie bekomme ich das nicht hin. |
Sehr präzise Beschreibung...
Chaka hat folgendes geschrieben : |
| kann man irgendwie auch mit anderen Sprachen das machen? |
Da sieht der Code im Grunde dann genauso aus. :nixweiss:
Wie gesagt:
jaenicke hat folgendes geschrieben : |
| Wie sieht der Code denn aus, so wie du ihn jetzt bei dir geschrieben hast? |
Antworte doch einfach mal, sonst ist es nicht möglich zu sagen warum es nicht geht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!