Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Email via Smpt (https://www.delphipraxis.net/108602-email-via-smpt.html)

Poring 16. Feb 2008 10:33


Email via Smpt
 
Hallo,

Ich möchte eine Email via Smtp versenden.
Dazu habe ich Smpt erstmal installiert (wie hier beschieben).

Gefunden habe ich zum versenden den folgenden Code:

Delphi-Quellcode:
uses
...IdAntiFreeze, IdMessage,IdAttachmentFile, IdText,IdSmtp;

procedure TForm1.Button1Click(Sender: TObject);
var
Email: TIdMessage;
s: integer;
begin
s := 0;
Email := TIdMessage.Create(nil);
Email.Recipients.Clear;
Email.Recipients.Add.Address := 'mail@hotmail.de'; //email des empfängers
Email.BccList.Add.Address := 'mail@hotmail.de'; //email des empfängers
Email.from.Text := edit1.text;        //Text der Email
Email.From.Name := 'mail@hotmail.de';       //Name dem die Email gehört, also mein Name
Email.From.Address:='mail@hotmail.de';     //Absender
Email.Subject:='Test';         //Betreff
Email.Date := Now;
  with TIdText.Create(email.MessageParts, nil) do
   begin
    Body.Text := RichEdit1.Text;
    CharSet := 'iso-8859-1';
    ContentTransfer := 'quoted-printable';
    ContentType := 'text/plain';
    ParentPart := -1;
   end;
  with TIdText.Create(email.MessageParts, nil) do
   begin
    Body.Text := RichEdit1.asansistring('html'); //[Fehler] Unit1.pas(52): E2003 Undefinierter Bezeichner: 'asansistring'
    CharSet := 'iso-8859-1';
    ContentTransfer := 'quoted-printable';
    ContentType := 'text/html';
    ParentPart := -1;
   end;
 
  idsmtp.Connect; //[Fehler] Unit1.pas(59): E2003 Undefinierter Bezeichner: 'Connect'
  try
   idsmtp.Send(Email); //[Fehler] Unit1.pas(61): E2003 Undefinierter Bezeichner: 'Send'
   idsmtp.Disconnect; //[Fehler] Unit1.pas(62): E2003 Undefinierter Bezeichner: 'Disconnect'
  except
  idsmtp.Disconnect; //[Fehler] Unit1.pas(64): E2003 Undefinierter Bezeichner: 'Disconnect'
end;
showmessage('Mail wurde verschickt');
end;
Ich habe makiert wo die Fehler sind.
Kann mir jemand helfen?

Mfg

marabu 16. Feb 2008 10:53

Re: Email via Smpt
 
Hallo,

wenn der Compiler dir sagt, dass ein bestimmtes Objekt die angegebene Methode nicht habe, dann kannst du ihm ruhig glauben. TRichEdit hat in meiner Version keine Methode AsAnsiString() und deine SMTP-Komponente (idSmtp1 ?) sollte nicht idSmtp heißen - so heißt doch die eingebeunden Unit. Benenne die Komponente um oder verwende self.idsmtp um die Namensüberdeckung zu umgehen.

Grüße vom marabu

Poring 16. Feb 2008 11:00

Re: Email via Smpt
 
Huhu,

soll ich dan anstatt
Delphi-Quellcode:
asansistring('html')
einfach
Delphi-Quellcode:
Body.Text:=RichEdit1.Text;
nehmen?

Und meine Unit heißt Unit1, von daher kann es dort zu keiner Namensüberlagerung kommen.
bei self.idsmpt.connect bekomme ich die Meldung: "Undefinierter Bezeichner 'idsmtp'"

Mfg

marabu 16. Feb 2008 11:08

Re: Email via Smpt
 
Wie du deinen Text aus dem RichEdit übernimmst, bleibt dir überlassen - als markup wirst du ihn ohne RTF2HTML-Übersetzer wohl nicht erhalten.

Wenn deine Unit Unit1 heißt, dann heißt deine SMTP-Client-Komponente wahrscheinlich IdSmtp1. Ich bezog mich auf die Unit IdSmtp, welche automatisch unter USES aufgeführt wird, sobald du eine SMTP-Komponente auf deine Form ziehst.

Poring 16. Feb 2008 11:13

Re: Email via Smpt
 
Und wie kann ich den Text dann übersetzten?
Ich kenne mich mit Smtp nicht wirklich gut aus, daher weis ich auch nciht ob es einen unterschied macht ob ich den Text aus einem RichEdit oder aus einen Memofeld zb. beziehe (wäre mir eigentlich egal wo raus - soalnge es funktioniert).

Unter Unit steht IdSmpt, dass stimmt. Nenne ich jedoch beim ButtonClick IdSmpt zu IdSmpt1 bekomme ich die meldung: Undefinierter Bezeichner 'IdSmtp1'.
Muss ich IdSmpt vorher noch deklarieren? Und wenn ja, wie?

Mfg

Klaus01 16. Feb 2008 11:25

Re: Email via Smpt
 
Zitat:

Zitat von Poring

Unter Unit steht IdSmpt, dass stimmt. Nenne ich jedoch beim ButtonClick IdSmpt zu IdSmpt1 bekomme ich die meldung: Undefinierter Bezeichner 'IdSmtp1'.
Muss ich IdSmpt vorher noch deklarieren? Und wenn ja, wie?

Mfg

Hallo,

Deine TypDeklaration sollte dann auch idsmtp1 beinhalten.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    IdSMTP1: TIdSMTP;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Den Namen änderst Du am besten im ObjectInspector.

Grüße
Klaus

Poring 16. Feb 2008 11:34

Re: Email via Smpt
 
Ah ok Danke!

Nun geht zumindest dort alles.

Will ich das Projekt Starten kommt:
Feld Form1.IdSmtp1 besitzt keine entsprechende komponente. Soll sie entfern werden?
Klicke ich auf nein, startet das Programm.
Klicke ich auf den Button stürzt das Programm ab und ich bekomme ein Fehler bei
IdSmtp1.Connect (bzw beim ersten IdSmtp1 im Quellcode)
Woran kann dies liegen?

Mfg

mkinzler 16. Feb 2008 12:12

Re: Email via Smpt
 
Das die Komponente in deinem Programm fehlt.

Poring 16. Feb 2008 12:15

Re: Email via Smpt
 
Und wie bekomme ich sie dort hinein? :gruebel:

mkinzler 16. Feb 2008 12:16

Re: Email via Smpt
 
Leg sie auf die Form.

Poring 16. Feb 2008 12:17

Re: Email via Smpt
 
Wie leg ich eine Smtp Komponente auf die Form?

mkinzler 16. Feb 2008 12:18

Re: Email via Smpt
 
Wie jede andere Komponente auch

Poring 16. Feb 2008 12:21

Re: Email via Smpt
 
Da gibts nur kein Smtp so wie nen Editfeld etc.
Jetzt bin ich was durcheinander ..

Die Muhkuh 16. Feb 2008 12:22

Re: Email via Smpt
 
Dann musst Du die Indy-Komponenten erst noch installieren.

marabu 16. Feb 2008 12:55

Re: Email via Smpt
 
Hi,

die Installation scheint ja nach Beitrag #1 bereits gelaufen zu sein. Wenn die Komponente trotzdem nicht aus der Palette auf die Form gezogen werden kann, dann muss man selbst Hand anlegen: Die Komponente unter einem vernünftigen Namen im private Abschnitt der Form-Deklaration eintragen und beim Ereignis OnCreate der Form instanzieren.

Delphi-Quellcode:
type
  TMainForm = class(TForm)
    // ...
  private
    SMTP: TIdSmtp;
    // ...
  end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  SMTP := TIdSmtp.Create(self);
  // ...
end;
Freundliche Grüße

T.E. 16. Feb 2008 13:08

Re: Email via Smpt
 
Genau du musst die INdys installiert haben, bevor du die idsmtp1. komponente auf dein form ziehen kannst.
danach müsste es aber klappen.

und was deine umwandlung in html betrifft (wenn ich das richtig verstanden habe hast du dsa ja vor) würde ich der den tipp geben die Jedi VCL zu installieren. die hat nämlich eine Komponente RTF to Html wenn ich mich nit irre.

Poring 16. Feb 2008 15:22

Re: Email via Smpt
 
Huhu,

erstmal danke euch für die Hilfe :)
Er will auch wenn ich nun das Project starte gleich aufs Internet zugreifen.
Nur bekomme ich beim Senden ein Fehler.

Scheint etwas mit Host not found zu sein.
Ich habe drinnen stehn:
Delphi-Quellcode:
IdSmtp1.Host:='smtp.hotmail.de';
Ich weis leider nicht ob dies in bezug auf hotmail stimmt? Bzw wie man es mit Gmail machen könnte.

Mfg

edit:
Ich poste mal wie der Code nun aussieht, vll hilft das ja weiter:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,IdAntiFreeze, IdMessage, IdText,IdSmtp,
  ComCtrls;

type
  TForm1 = class(TForm)

    Edit1: TEdit;
    Button1: TButton;
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
    IdSmtp1: TIdSmtp;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Email: TIdMessage;
begin
IdSmtp1.AuthType := atDefault;
IdSmtp1.Username:='mail@hotmail.de';
IdSmtp1.Password:='PW';
IdSmtp1.Port:=25;
IdSmtp1.Host:='smtp.hotmail.de';
Email := TIdMessage.Create(nil);
Email.Recipients.Clear;
Email.Recipients.Add.Address := 'mail@hotmail.de'; //email des empfängers
Email.BccList.Add.Address := 'mail@hotmail.de'; //email des empfängers
Email.from.Text := edit1.text;        //Text der Email
Email.From.Name := 'mail@hotmail.de';       //Name dem die Email gehört, also mein Name
Email.From.Address:='mail@hotmail.de';     //Absender
Email.Subject:='Test';         //Betreff
Email.Date := Now;

  with TIdText.Create(email.MessageParts, nil) do
   begin
    Body.Text := RichEdit1.Text;
    CharSet := 'iso-8859-1';
    ContentTransfer := 'quoted-printable';
    ContentType := 'text/html';
    ParentPart := -1;
   end;
 
  idsmtp1.Connect;
  try
   IdSmtp1.Send(Email);
   idsmtp1.Disconnect;
  except
  idsmtp1.Disconnect;
end;
showmessage('Mail wurde verschickt');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
IdSmtp1 := TidSmtp.Create(self);
end;

end.

marabu 16. Feb 2008 17:06

Re: Email via Smpt
 
Kurze Zwischenfrage: Du hast einen kostenpflichtigen Hotmail Plus Account? Hotmail selbst bietet nach meinen Informationen nur WebMail-Accounts.

Poring 16. Feb 2008 17:22

Re: Email via Smpt
 
Achso... ja gut ..
Den habe ich leider nicht, nein.
Bei welchem Anbiter wäre es denn dan möglich?

Ich habs mal über Gmail probiert, wenn ich dies jedoch mache bekomme ich 'Already Connected'
Ich habe zwar auch etwas mit TIdSSLIOHandlerSocketOpenSSL gelesen, nur weis ich nicht wie ich dies in die uses einbinden kann, das es deklariert wird. Von daher habe ich dies erstmal rausgelassen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
Email: TIdMessage;
MailHStack : TIdIOHandlerStack;
begin
IdSmtp1.AuthType := atDefault;
IdSmtp1.IOHandler := MailHStack;
IdSmtp1.UseEhlo := True;
IdSmtp1.Username:='mail@gmail.com';
IdSmtp1.Password:='PW';
IdSmtp1.Port:=587;
IdSmtp1.Host:='smtp.gmail.com';
Email := TIdMessage.Create(nil);
Email.Recipients.Clear;
Email.Recipients.Add.Address := 'mail@gmail.com'; //email des empfängers
Email.BccList.Add.Address := 'mail@gmail.com'; //email des empfängers
Email.from.Text := edit1.text;        //Text der Email
Email.From.Name := 'Absender';       //Name dem die Email gehört, also mein Name
Email.From.Address:='mail@gmail.com';     //Absender
Email.Subject:='Test';         //Betreff
Email.Date := Now;

  with TIdText.Create(email.MessageParts, nil) do
   begin
    Body.Text := RichEdit1.Text;
    CharSet := 'iso-8859-1';
    ContentTransfer := 'quoted-printable';
    ContentType := 'text/html';
    ParentPart := -1;
   end;
 
  idsmtp1.Connect;
  try
   IdSmtp1.Send(Email);
   idsmtp1.Disconnect;
  except
  idsmtp1.Disconnect;
end;
showmessage('Mail wurde verschickt');
end;

marabu 16. Feb 2008 18:32

Re: Email via Smpt
 
Was soll das eigentlich mal werden, wenn es fertig ist?

Hier zwei Links, die dir vielleicht helfen:

Liste mit POP3- und SMTP-Servern (Patrick Canterino)

IndySSL Tutorial

Poring 16. Feb 2008 18:33

Re: Email via Smpt
 
Eigentlich sollte das bei Knopfdruck nur eine Email an einen Mailaccount schicken mit dem Inhalt eines Edit/Memo-Feldes...

Edit:
Ich habs nun via Freenet gemacht (schien mir am einfachsten - dank deinem Link-)
Dort geht es nun mit dem Code. Denke cih werde es dabei auch belassen
Vielen Dank :) :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 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