Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SQL-Abfrage per EMail verschicken (https://www.delphipraxis.net/93815-sql-abfrage-per-email-verschicken.html)

AndiS75 11. Jun 2007 20:08


SQL-Abfrage per EMail verschicken
 
Hallo zusammen,

möchte gerne eine DB-Auswertung in einem Report per EMail verschicken können. Sprich ich will eine Anwendung schreiben, welche es mir ermöglicht zu einem bestimmten Zeitpunkt eine EMail zu verschicken, ohne einen bestimmtes Email Programm zu nutzen.

Also selber eine Maske erstellen mit Empfänger ... Also nicht über OLE ein bestimmtes Programm(Outlook oder David) starten.

Danke für eure Vorschläge



Gruß

Andreas

Jelly 11. Jun 2007 20:14

Re: SQL-Abfrage per EMail verschicken
 
Soll der Report direkt in die EMail rein oder als Anhang mitgeschickt werden ?

mkinzler 11. Jun 2007 20:15

Re: SQL-Abfrage per EMail verschicken
 
Such mal nach SMTP (z.B. bei den Indys)

AndiS75 11. Jun 2007 21:07

Re: SQL-Abfrage per EMail verschicken
 
Als Anhang oder in Body. Ist auch egal. Mir gehts in erster Linie nur darum, dass es möglich ist ohne OLE das Ganze zu realisieren.

Gruß

Jelly 11. Jun 2007 21:10

Re: SQL-Abfrage per EMail verschicken
 
Da wurden die Indys ja schon genannt.
Vielleicht helfen dir die MailTemplates Komponenenten aus der Codelib weiter. Basieren ebenfalls auf Indy.

AndiS75 12. Jun 2007 20:30

Re: SQL-Abfrage per EMail verschicken
 
Hm das Problem ist, dass ich von der Materie überhaupt keinen Plan hab. :-D
Gibt es Irgendwo ein Tutorial??

gruß

Jelly 12. Jun 2007 21:14

Re: SQL-Abfrage per EMail verschicken
 
Ich schau mal zu die Woche noch eine knappe Demo zu erstellen. Ist eigentlich ganz trivial, allerdings wohl nur aus meiner Sicht. :mrgreen:

Jelly 12. Jun 2007 22:11

Re: SQL-Abfrage per EMail verschicken
 
Habs dann doch noch heute geschafft.
Ein Demo Projekt hängt im Beitrag aus der Codelib an.

Das Beispiel zeigt, wie eine Mail personalisiert werden kann, wie Grafiken eingebunden werden können, und wie ganze Tabelle basierend auf TDataset eingebunden werden können. Master-Detail Beziehungen sind auch möglich, aber nicht im Demo eingebunden, dafür war die Zeit zu knapp.
Die Mailvorlage muss als HTML Datei vorliegen und heisst in der Demo MailVorlage.html.

AndiS75 13. Jun 2007 08:40

Re: SQL-Abfrage per EMail verschicken
 
Ok danke Dir erstmal. Werde heute Abend mal ne weil testen.



Gruß

AndiS75 13. Jun 2007 22:21

Re: SQL-Abfrage per EMail verschicken
 
Hallo,

hab jetzt ein bischen Code zusammengeklaut und eine Maske entworfen.
Versuche nun über die Maske auf meinen SMPT-Server zuzugreifen. Bekomme zwar keine Fehlermeldung beim senden, aber es kommt auch keine Mail an :( .

Delphi-Quellcode:


procedure TForm1.AusWertSend(an, Nachricht, vonMail, Betreff, Priority, CT, SMTPServer, SMTPUsername, SMTPPass: String;
                             SMTPPort : integer);
var
  IdMsgSend: TidMessage;
  SMTP: TidSmtp;
  POP: TidPop3;
  i: integer;
  s: string;
begin

  IdMsgSend := TidMessage.Create(nil);
  SMTP := TidSmtp.Create(nil);
  IdMsgSend.Clear;


  // Plain Text
  with TIdText.Create(IdMsgSend.MessageParts, nil) do
  begin
    ContentType := 'text/plain';
    Body.Text := Nachricht;
  end;

  // HTML Part
  with TIdText.Create(IdMsgSend.MessageParts, nil) do
  begin
    ContentType := 'text/html';
    Body.Text := 'Dateien\MailVorlage.html';
  end;

  with IdMsgSend do
  begin
    ContentType := CT;
    From.Text := vonMail;
    ReplyTo.EMailAddresses := vonMail;
    Subject := Betreff;
    Priority := Priority;
    s := '';
    BccList.EMailAddresses := an;
    ReceiptRecipient.Text := '';
  end;

  SMTP.AuthType := atDefault;

  SMTP.Username := SMTPUsername;
  SMTP.Password := SMTPPass;

  SMTP.Host := SMTPServer;
  SMTP.Port := SMTPPort;

  SMTP.Connect;

  ShowMessage(IntToStr(IdMsgSend.MessageParts.Count));
  try
    SMTP.Send(IdMsgSend);
  finally
    SMTP.Disconnect;
  end;
  IdMsgSend.free;
  SMTP.free;
 
end;

procedure TForm1.btnSendenClick(Sender: TObject);
begin
  AusWertSend(EditAdressen.Text, MemoText.Text,'Andi_S75@hotmail.de',EditBetreff.Text, 'mpnormal','BlaBlaBla',
              EditSMTP.Text,EditBenutzer.Text, EditKennwort.Text,25);

end;

Könnte sich einer bitte kurz die Mühe machen und schauen voran es liegt. Komme von selber leider nicht drauf.


Danke

AndiS75 14. Jun 2007 15:02

Re: SQL-Abfrage per EMail verschicken
 
HuHu :-D

Jelly 15. Jun 2007 06:49

Re: SQL-Abfrage per EMail verschicken
 
Ich könnte zurückrufen :angel2:
Hast Du meine Demo denn getestet?

AndiS75 15. Jun 2007 14:26

Re: SQL-Abfrage per EMail verschicken
 
Hab dein Demo getestet. Aber ich bekomme da eine Fehlermeldung. Irgendwas mit Host nicht erreichbar(natürlich hab ich die daten meinen providers benutzt). Hab dann bischen rumgestöbert und mir den Code zusammen gesucht.
Aber irgendwie funzt das auch nicht. :?

Jelly 16. Jun 2007 09:15

Re: SQL-Abfrage per EMail verschicken
 
Was hast du denn als Host und Port eingetragen. Auch die Art der Authentifizierung am SMTP Server kann eine Rolle spielen.

AndiS75 20. Jun 2007 21:38

Re: SQL-Abfrage per EMail verschicken
 
Host --> Mein Host und Auth--> atDefault. Nutze Delphi2007. Wenn ich folgen Code als Auth nutze bringt er mir die Fehlermeldung
--> Undefinierter Bezeichner "AuthenticationType"

Delphi-Quellcode:
  case SmtpAuth of
    0: SMTP.AuthenticationType := atNone;
    1: SMTP.AuthenticationType := atLogin; {Simple Login}
  end;
also muss ich folgenden Code verwenden

Delphi-Quellcode:
  case SMTPAuth of
    0 : SMTP.AuthType := atNone;
    1 : SMTP.AuthType := atDefault;
  end;
Hier bringt er mir die Fehlermeldung --> ... ist eine Exeption der Klasse EIdSMTPReplyError mit der Meldung '' aufgetreten. Also
keine Ahnung :-D

Delphi-Quellcode:


procedure TFrmMailMain.AusWertSend(An, Nachricht, vonMail, Betreff, Priority, CT, SMTPServer, SMTPUsername, SMTPPass: String;
                                   SMTPAuth, SMTPPort : integer);
var
  IdMsgSend: TidMessage;
  SMTP: TidSmtp;
  POP: TidPop3;
  i: integer;
begin

  IdMsgSend := TidMessage.Create(nil);
  SMTP := TidSmtp.Create(nil);
  POP := TidPop3.create(nil);
  IdMsgSend.Clear;


  // Plain Text
  with TIdText.Create(IdMsgSend.MessageParts, nil) do
  begin
    ContentType := 'text/plain';
    Body.Text := Nachricht;
  end;

  // HTML Part
  with TIdText.Create(IdMsgSend.MessageParts, nil) do
  begin
    ContentType := 'text/html';
    Body.Text := 'Dateien\MailVorlage.html';
  end;

  with IdMsgSend do
  begin
    ContentType := CT;
    From.Text := vonMail;
    ReplyTo.EMailAddresses := vonMail;
    Subject := Betreff;
    Priority := Priority;
    BccList.EMailAddresses := An;
    ReceiptRecipient.Text := '';
  end;

  IdMsgSend.ContentType := CT;

  case SMTPAuth of
    0 : SMTP.AuthType := atNone;
    1 : SMTP.AuthType := atDefault;
  end;

  {case SmtpAuthType of
    0: SMTP.AuthenticationType := atNone; //Normal
    1: SMTP.AuthenticationType := atLogin; //SMTPAuth
    2: begin //AfterPop
         SMTP.AuthenticationType := atNone;
         POP.Host := POPServer;
         POP.Username := POPUser;
         POP.Password := POPPass;
         POP.Port := POPPort;
         POP.Connect(5);
         POP.Disconnect;
       end;
    3: begin //afterPop+SMTPAuth
         SMTP.AuthenticationType := atLogin;
         POP.Host := POPServer;
         POP.Username := POPUser;
         POP.Password := POPPass;
         POP.Port := POPPort;
         POP.Connect(5);
         POP.Disconnect;
       end;
  end; }

  SMTPUsername := SMTPUsername;
  SMTP.Password := SMTPPass;
  SMTP.Host := SMTPServer;
  SMTP.Port := SMTPPort;

  SMTP.Connect;

  MemoLog.Lines.Add(IntToStr(IdMsgSend.MessageParts.Count));

  try
    SMTP.Send(IdMsgSend);
  finally
    SMTP.Disconnect;
  end;
  IdMsgSend.free;
  SMTP.free;

end;

Jelly 20. Jun 2007 21:42

Re: SQL-Abfrage per EMail verschicken
 
AuthType sollte erst mal auf atNone stehen.
Es handelt sich da aber wohl wirklich um eine SMTP Einstellung, und hat nix mit meinen Komponenten zu tun.

AndiS75 20. Jun 2007 22:12

Re: SQL-Abfrage per EMail verschicken
 
hab jetzt mal debugged. die Fehlermeldung kommt nur wenn SMTP.Send ausgeführt wird.

ist eine Exeption der Klasse EIdSMTPReplyError mit der Meldung '' aufgetreten. Was hat denn das blank zu bedeuten?

Delphi-Quellcode:
    SMTP.Connect;
    if SMTP.Connected then
      SMTP.Send(IdMsgSend);

Jelly 21. Jun 2007 10:05

Re: SQL-Abfrage per EMail verschicken
 
Es liegt also definitiv an deinem SMTP Server.
Musst du dich vorher eventuell per POP3 identifizieren bevor du Mails schicken kannst. Das machen viele Provider so, damit nicht jeder über ihren SMTP Server verschicken kann. Lade doch mal mit deinem Mailprogramm erst die Mails runter, und versuche anschliessend innerhalb kurzer Zeit das Senden über Indy.

AndiS75 21. Jun 2007 10:53

Re: SQL-Abfrage per EMail verschicken
 
Danke Dir werde es mal so probieren.


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