Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi: E-Mail-Versand / E-Mail-Formatierung (https://www.delphipraxis.net/157945-delphi-e-mail-versand-e-mail-formatierung.html)

SvenLittkowski 30. Jan 2011 23:18

Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hi. In einem meiner Programm will ich den Benutzern die Möglichkeit geben, mir E-Mails zu senden. Meine Vorstellung ist, daß dafür ein Fenster existiert mit zwei Textfeldern. Deren Werte sollen mir auf Knopfdruck zugesandt werden können (an meine Yahoo-E-Mail-Adresse). Hat jemand so etwas schon mal gemacht? Wie kann ich dies erreichen?

Bummi 30. Jan 2011 23:22

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Mit einer brauchbaren SMTP Komponente und den Zugangsdaten, oder per Outlook mit den üblichen Warnmeldungen die der Benutzer bestätigen muss.

SvenLittkowski 31. Jan 2011 00:33

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Kommt Delphi (in meinem Fall die Version 7) mit eigenen SMTP-Komponenten daher? Ich habe mich mal in dessen "Internet"-Registerkarte umgesehen, aber nichts gefunden, was direkt "SMTP" im Namen hat.

Ansonsten wäre meine resultierende Frage, ob Du mir bestimmte SMTP-Komponenten anderer Entwickler nennen kannst, falls Du da etwas wissen solltest. Vorzugsweise FreeWare. Ich werde mich auch noch mal im Internet umschauen, aber direkte Hinweise sind mir auch ganz Recht.

mkinzler 31. Jan 2011 05:23

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
-INDY
-Synapse
-ICS

Jens Hartmann 31. Jan 2011 06:44

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hier mal ein Tutorial...

Indy

Viel Spaß und Gruß Jens

fui-tak 31. Jan 2011 11:00

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Eine Alternative zu SMTP und oder Outlook wäre, dass du das Ganze über ein PHP-Script auf einem Webspace machst. Kostenlosen Webspace gibt es zum Beispiel bei funpic.de (oder vielleicht hast du schon einen)

An das kleine PHP-Script sendest du mittels TIdHTTP.Post (hier) die Daten.

Im PHP-Script werden die Daten dann mit $_POST['...'] eingelesen und mit der mail(...)-Methode als E-Mail verschickt.

Das Ganze hat den Vorteil, dass du kein extra E-Mail Konto angeben musst, wie bei SMTP, aber den Nachteil, dass, wenn du den Webspace nicht mehr haben willst, es nicht mehr funktioniert.

blauweiss 31. Jan 2011 12:20

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hallo Sven(?),

falls Du damit leben kannst, daß der Mail-Client (z.B. Outlook) sichtbar gestartet wird und die Mail vom Anwender interaktiv verschickt werden muß (evtl. mal rumspielen mit Parameter MAPI_DIALOG etc.), hier eine Unit mit Code zum Verschicken via MAPI:
Delphi-Quellcode:
unit uMapi;

interface

uses
  Mapi;

function SendMailviaMAPI(aSubject, aBody, aFileName,
                         aSenderName, aSenderEMail,
                         aRecepientName, aRecepientEMail: string): integer;

implementation

uses
  Forms;

function SendMailviaMAPI(aSubject, aBody, aFileName,
                         aSenderName, aSenderEMail,
                         aRecepientName, aRecepientEMail: string): integer;
var
  MapiMessage: TMapiMessage;
  lpSender,
  lpRecepient: TMapiRecipDesc;
  MapiFileDesc: TMapiFileDesc;
begin
  FillChar(MapiMessage, SizeOf(MapiMessage), 0);

  with MapiMessage do
    begin
      if (aSubject <> '') then
        lpszSubject := PChar(aSubject);

      if (aBody <> '') then
        lpszNoteText := PChar(aBody);

      if (aSenderEMail <> '') then
        begin
          lpSender.ulRecipClass := MAPI_ORIG;

          if (aSenderName = '') then
            lpSender.lpszName := PChar(aSenderEMail)
          else
            lpSender.lpszName := PChar(aSenderName);

          lpSender.lpszAddress := PChar('SMTP:' + aSenderEMail);
          lpSender.ulReserved := 0;
          lpSender.ulEIDSize := 0;
          lpSender.lpEntryID := nil;
          lpOriginator := @lpSender;
        end;

      if (aRecepientEMail <> '') then
        begin
          lpRecepient.ulRecipClass := MAPI_TO;

          if (aRecepientName = '') then
            lpRecepient.lpszName := PChar(aRecepientEMail)
          else
            lpRecepient.lpszName := PChar(aRecepientName);

          lpRecepient.lpszAddress := PChar('SMTP:' + aRecepientEMail);
          lpRecepient.ulReserved := 0;
          lpRecepient.ulEIDSize := 0;
          lpRecepient.lpEntryID := nil;
          nRecipCount := 1;
          lpRecips := @lpRecepient;
        end
      else
        lpRecips := nil;

      if (aFileName = '') then
        begin
          nFileCount := 0;
          lpFiles := nil;
        end
      else
        begin
          FillChar(MapiFileDesc, SizeOf(MapiFileDesc), 0);
          MapiFileDesc.nPosition := Cardinal($FFFFFFFF);
          MapiFileDesc.lpszPathName := PChar(aFileName);
          nFileCount := 1;
          lpFiles := @MapiFileDesc;
        end;
    end; // with MapiMessage

  Result := MAPISendMail(0, Application.Handle, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI {or MAPI_NEW_SESSION}, 0);
  if (Result = MAPI_USER_ABORT) then
    Result := SUCCESS_SUCCESS;
end; // SendMailviaMAPI

end.
Hier wird aber nur 1 Attachment verschickt. Falls mehr als 1 Datei angehängt werden soll, könntest Du entweder den Code modifizieren (lpFiles/nFileCount) oder mehrere Anhängsel in ein ZIP o.ä. packen und dieses anhängen.

Gruß,
blauweiss

Guido R. 31. Jan 2011 16:45

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hi Sven !

Wenn Du die Jedi Komponenten verwendest, dann kannst Du auch tJvMail benutzen.
Die Komponente ist wirklich sehr einfach zu bedienen.

Delphi-Quellcode:
procedure TForm1.SendButtonClick(Sender: TObject);
begin
 JvMail1.Subject := SubjectEdit.Text;
 JvMail1.Recipient.Clear;
 with JvMail1.Recipient.Add
  do Address := RecipientEdit.Text;
 JvMail1.Body.Text := BodyMemo.Lines.Text;
 JvMail1.SendMail(true);
end;
Die Übertragung erfolgt über das Standard-Mail-Programm.
Auch die Verwendung von Attachments (über StringListe von Dateinamen), CarbonCopy und BlindCopy (wie Recipient) ist möglich.

Einen Haken hat die Sache :
Über den Parameter bei JvMail1.SendMail kannst Du einstellen, ob der Editor des Mailprogramms geöffnet werden soll. Wählst Du hier false, so erscheint ein Dialog des Mailprogramms, der darauf hinweist, dass ein anderes Programm versucht eine Mail zu versenden und nachfragt, ob dies OK ist. - Automatisches Senden im Hintergrund, bspw. für automatische Berichte, funktioniert also nicht. Ein Klick auf "Senden" ist immer erforderlich.

Gruß
Guido

SvenLittkowski 31. Jan 2011 16:53

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hi. Vielen Dank zuerst einmal für Eure vielen Ratschläge, Anregungen und Ideen! :-)

Ich will die Benutzung externer anderer Programme vermeiden, da ich davon ausgehen muß, daß nicht jeder solche Programme besitzt bzw. benutzt. Ich selber bin dafür ein gutes Beispiel: Outlook Express ist zwar auf meinem System drauf, aber ich habe niemals irgendwelche E-Mails darin konfiguriert, da ich nur Yahoo benutze.

Mein Programm muß also ohne andere Hilfsprogramme auskommen. Auch ohne WebSpace (obwohl ich gut im PHP- und MySQL-Programmieren bin).

Ich schaue mir mal jetzt die folgenden Komponentensets an:
-INDY
-Synapse
-ICS

Wie gesagt, mein Programm muß ohne externe Voraussetzungen klarkommen. Weitere Hilfe willkommen. :-D

Sir Rufo 31. Jan 2011 18:57

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1078598)
Wie gesagt, mein Programm muß ohne externe Voraussetzungen klarkommen. Weitere Hilfe willkommen. :-D

Das geht ja schon mal garnicht.

Kein Internet, Mailserver? (sind ja auch extern)

Direktes Versenden von Mails (Client arbeitet als SMTP-Server) ist nicht so der Brüller, das machen die meisten SPAM-Trojaner auch und wird daher gleich mit einem hohen SPAM-Score bestraft.
Mein Mailserver würde solche Mails noch nicht mal annehmen.

Also wird ein externer Mailserver benötigt. Aber es gibt eigentlich keine freien SMTP-Server mehr.

Also dein Mailserver ... (der von Yahoo) ... wo du deine Zugangsdaten mit ausliefern musst, sonst nimmt der keine Mails zum Versenden an.

Somit bleibt eigentlich nur die Variante mit dem PHP-Skript, oder der Anweder kann sich aussuchen, ob er mit seinem Mail-Client (MAPI) oder direkt über sein Postfach die Mails versenden soll (Zugangsdaten müssen vom User eingegeben werden).

vergessen 31. Jan 2011 20:34

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1078598)

Ich will die Benutzung externer anderer Programme vermeiden...

Mein Programm muß also ohne andere Hilfsprogramme auskommen....
Auch ohne WebSpace...

Wie gesagt, mein Programm muß ohne externe Voraussetzungen klarkommen. Weitere Hilfe willkommen. :-D

Nachdem Du andere Programme und WebSpace ausgeschlossen hast, frage ich mich, was denn noch übrig bleibt?

SvenLittkowski 1. Feb 2011 04:21

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Ja, daran hatte ich gedacht:

"Direktes Versenden von Mails (Client arbeitet als SMTP-Server) ist nicht so der Brüller, das machen die meisten SPAM-Trojaner auch und wird daher gleich mit einem hohen SPAM-Score bestraft."

Ich selber habe ein Yahoo-Postfach, an welches ich die Mails senden lassen will. Schlimmstenfall werden die eingehenden Mails in meinem Spa-Folder abgelegt, wenn ich Dich richtig verstanden habe. Aber das ist okay für mich, ich kann ja dort immer nachsehen. So wie ich Dich verstehe, ist diese Lösung durchaus machbar, aber halt mit dem Risiko behaftet, von Yahoo als Spam betrachtet zu werden. Aber da dies mein eigenes E-Mail-Konto ist, an welches mein Programm die Vorschläge meiner Kunden versendet, würde ich halt dies in Kauf nehmen.

Kannst Du mir in dieser Richtung weiterhelfen? Ich habe dies noch nie programmiert. Gerne auch Links zu Lösungen dieser Art.

Synapse und ICS ließen sich nicht bei mir integrieren wegen Compiler-gemeldeten Fehlern. :-(
SAK ließ sich installieren, aber bei Aufruf des Testprogrammes und Benutzen desselben erhalte ich keine E-Mail (versandte mehrere testweise an mich).

Bummi 1. Feb 2011 07:30

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
nicht
Zitat:

(Client arbeitet als SMTP-Server)
sondern SMTP-Client.

Bei den Jedis ist eine Beispiel dabei, zu den Indys TIDSmtp sollten sich auch Demos finden lassen.
In der Firma setzen wir die Cleverkomponenten ein, diese sind zwar recht teuer, funktionieren dafür aber zuverlässig mit allen Konfigurationen und Verschlüsselungsprotokollen.

hathor 1. Feb 2011 10:14

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Es gibt -zig Beispiele:
http://www.google.com/codesearch?hl=...ail&sbtn=Suche

Sir Rufo 1. Feb 2011 11:22

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Zitat:

Zitat von Bummi (Beitrag 1078686)
nicht
Zitat:

(Client arbeitet als SMTP-Server)
sondern SMTP-Client.

Das meinte ich nicht ...

Um eine email zu versenden verbinde ich mich ja normalerweise mit meinem SMTP-Server (von meinem Postfach) und schicke diesem die Mail. Dieser SMTP-Server leitet die Mail jetzt Richtung Ziel-SMTP-Server weiter.

Die Anforderung war aber "ohne externe Voraussetzungen", also ohne die Kenntnis der Postfach-Daten vom Anwender.
Dann muss die Anwendung selber wie ein SMTP-Server auftreten und die Mail versenden.

Das war mit "Client arbeitet als SMTP-Server" gemeint.

Bummi 1. Feb 2011 11:38

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
@Sir Rufo
ok, aber dass dies zu scheitern verurteilt ist darüber sind wir uns ja einig und gar so problematisch wird es für Ihn ja nicht
Zitat:

Ich selber habe ein Yahoo-Postfach, an welches ich die Mails senden lassen will.
kam erst nach Deinem Post.:-D

Sir Rufo 1. Feb 2011 11:54

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Zitat:

Zitat von Bummi (Beitrag 1078786)
@Sir Rufo
ok, aber dass dies zu scheitern verurteilt ist darüber sind wir uns ja einig und gar so problematisch wird es für Ihn ja nicht
Zitat:

Ich selber habe ein Yahoo-Postfach, an welches ich die Mails senden lassen will.
kam erst nach Deinem Post.:-D

Die Problematiken habe ich ja dabei geschrieben.
Allerdings auch das Versenden in das Yahoo-Postfach kann über diesen Weg fehlschlagen.

Und der Anwendung die Zugangsdaten für das eigene Postfach mitzugeben (habe ich auch beschrieben) halte ich auch für bedenklich.

Was bleibt ist der Weg über ein lokales Mail-Programm (MAPI) oder direkt das Mail-Konto des Benutzers (der Benutzer muss seine Zugangsdaten im Programm erfassen).

Als weitere Alternative (die zwar auch bedenklich ist) sehe ich noch, extra für die Anwendung ein kostenloses Postfach einzurichten und diese Zugangsdaten der Anwendung mitzugeben.
Wird das Postfach gehackt (die Zugangsdaten wurden aus der Anwendung ausgelesen), dann ist das zwar doof aber nicht mehr dramatisch.

Bummi 1. Feb 2011 12:15

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Zitat:

(der Benutzer muss seine Zugangsdaten im Programm erfassen).
das ist das von uns üblicherweise eingesetzte(angebotene) Verfahren.....

alzaimar 1. Feb 2011 15:00

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Mal ne Frage zum Verständnis: Bei der Variante mit dem PHP-Skript... Wer ist denn da der Absender?:stupid:

SvenLittkowski 1. Feb 2011 17:44

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Alzaimer: Bei PHP gibt es die Funktion "mail()". Dort wird der Versender als ein Parameter erfasst.

Gut, ich würde dann ein Yahoo-Account einrichten für die Software, wenn es nicht anders geht. Aber wie würde der Programmcode dann aussehen? Totales Neuland für mich.

DP-Maintenance 2. Feb 2011 05:36

Dieses Thema wurde am "02. Feb 2011, 06:36 Uhr" von "mkinzler" aus dem Forum "Algorithmen, Datenstrukturen und Klassendesign" in das Forum "Netzwerke" verschoben.

SvenLittkowski 2. Feb 2011 17:28

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Weitere Hilfe durchaus nicht wenig willkommen. ;-)

SvenLittkowski 5. Feb 2011 17:01

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hi erneut.

Ich habe jetzt folgenden Code zum Senden einer E-Mail, doch mein Programm "erstarrt" beim Betätigen des Versandknopfes.

Delphi-Quellcode:
uses
  ... IdBaseComponent, IdComponent, IdTCPServer, IdSMTPServer, Gradient,
  IdMessage, IdUDPBase, IdUDPClient, IdSNMP, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, idreplysmtp, IdExplicitTLSClientServerBase,
  IdSMTPBase;

...

procedure TEpsilon.ButtonMailClick(Sender: TObject);
begin
 idSMTP.Host:='smtp.googlemail.com';
 idSMTP.Port:=465; //smtp service usually runs on this port 25 but GMail wants 465
 idSMTP.Password:='MyPassword';
 //setup idmessage parameters
 idmessage.From.address:=EditEMail.Text;
 idmessage.Recipients.EMailAddresses:='MeinComputerProgram@gmail.com';
 idmessage.CCList.EMailAddresses:='';
 idmessage.BccList.EMailAddresses:='';
 idmessage.Subject:='Mein Computer Program';
 idmessage.Body.Text:=EditMailEra.Text+EditMailOld.Text+EditmailAmount.Text+EditMailModern.Text;
 idmessage.Body.Text:=idmessage.Body.Text+MemoMail.Lines.Text;
 //send the message
 try
  try
   idSMTP.Connect;
   LabelStatus.Caption:='Connecting...'; //&#8230;then show the message
   LabelStatus.Hint:='Connecting...'; //&#8230;then show the message
   idSMTP.send(idmessage);
   LabelStatus.Caption:='Sending...'; //&#8230;then show the message
   LabelStatus.Hint:='Sending...'; //&#8230;then show the message
  //if an exception occurs&#8230;
  except
   on E: EIdSMTPReplyError do
   begin
    LabelStatus.Caption:=E.Message; //&#8230;then show the message
    LabelStatus.Hint:=E.Message; //&#8230;then show the message
   end;
  end;
 finally
  //disconnect from server
  if IdSMTP.Connected then
  begin
   IdSMTP.Disconnect;
   LabelStatus.Caption:='Disconnecting...'; //&#8230;then show the message
   LabelStatus.Hint:='Disconnecting...'; //&#8230;then show the message
  end;
 end;
end;
Außerdem benutze ich die Indy-Komponenten "IDMessage" und "IDSMTP".

- GMail will aber auch "My Server requires authentication" haben. Liegt es vieleicht daran?
- Und wenn, wie baue ich dies ein?
- Was sonst ist eventuell falsch oder Schuld am Erstarren des Programmes?
- Wie kann ich laufend die Caption vom StatusLabel den Status anzeigen lassen (beim Erstarren ist es leer)?

Mike_ 5. Feb 2011 19:49

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
First step:
Check your authentication settings and verify that your gmail account is set up for external sending.

Second step:
Program example
http://www.marcocantu.com/tips/oct06_gmail.html

Otherwise:
I upload a sample GMailSend-Application.

SvenLittkowski 5. Feb 2011 20:04

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hey Mike, vielen Dank, der Link scheint mir recht nützlich zu sein. Bitte gebe mir ein paar Minuten, um einige Sachen daraus auszuprobieren. Ich melde mich hier wieder danach.

Hey Mike, thanks a lot, that link seems quite useful to me. Please give me a few minutes to try out some parts of that code. I'll be back here, right after.

SvenLittkowski 5. Feb 2011 20:25

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Things I do wrong. I added code excerpts from your linked sample code, but on Execution (yes, it compiled error-free!) I get the following execution-aborting error message:

Zitat:

Zitat von My Delphi 7
Project MyProgram.exe raised exception class EIdOSSLOCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process stopped. Use Step or Run to continue.

And here the complete code:

Code:
implementation

uses Box1;

{$R *.dfm}

procedure TEpsilon.FormCreate(Sender: TObject);
begin
 Epsilon.Color:=Alpha.ColorDialog.Color;
end;

procedure TEpsilon.ButtonMailClick(Sender: TObject);
begin
 idSMTP.Host:='smtp.googlemail.com';
 idSMTP.Port:=465; //smtp service usually runs on this port 25
 idSMTP.Password:='MyPassword';
 idSMTP.UseTLS:=utUseExplicitTLS;
 //setup idmessage parameters
 idmessage.From.address:=EditEMail.Text;
 idmessage.Recipients.EMailAddresses:='MyEMail@gmail.com';
 idmessage.CCList.EMailAddresses:='';
 idmessage.BccList.EMailAddresses:='';
 idmessage.Subject:='My E-Mail';
 idmessage.Body.Text:=EditMailEra.Text+EditMailOld.Text+EditmailAmount.Text+EditMailModern.Text;
 idmessage.Body.Text:=idmessage.Body.Text+MemoMail.Lines.Text;
 //check if receipt confirmation is required
// if checkbox1.checked then idmessage.ReceiptRecipient.Text:=edfrom.Text; //if required, set the sendback email address to your email address
 //send the message
 try
  try
   idSMTP.Connect;
   LabelStatus.Caption:='Connecting...'; //…then show the message
   LabelStatus.Hint:='Connecting...'; //…then show the message
   idSMTP.send(idmessage);
   LabelStatus.Caption:='Sending...'; //…then show the message
   LabelStatus.Hint:='Sending...'; //…then show the message
  //if an exception occurs…
  except
   on E: EIdSMTPReplyError do
   begin
    LabelStatus.Caption:=E.Message; //…then show the message
    LabelStatus.Hint:=E.Message; //…then show the message
   end;
  end;
 finally
  //disconnect from server
  if IdSMTP.Connected then
  begin
   IdSMTP.Disconnect;
   LabelStatus.Caption:='Disconnecting...'; //…then show the message
   LabelStatus.Hint:='Disconnecting...'; //…then show the message
  end;
 end;
end;

procedure TEpsilon.ButtonBrowseClick(Sender: TObject); // doesn't function, so I disabled it - for now
begin
// if OpenDialog.Execute then TIdAttachmentFile.Create(idmessage.MessageParts,OpenDialog.FileName);
// AddAttachments;
end;
(*
procedure TEpsilon.AddAttachments; // caused problems, too
var
 li: TListItem;
 idx: Integer;
begin
 //clear the attachment listview
 lvAttachments.Items.Clear;
 //loop through Idmessage and count parts
 for idx:=0 to Pred(Idmessage.MessageParts.Count) do
 begin
  li:=lvAttachments.Items.Add;
  // Check if Idmessage contains any attachments…
  if Idmessage.MessageParts.Items[idx] is TIdAttachmentFile then
  begin
   //if so, get the file names…
   li.Caption:=TIdAttachmentFile(Idmessage.MessageParts.Items[idx]).Filename;
   //and add them to the listview
   li.SubItems.Add(TIdAttachmentFile(Idmessage.MessageParts.Items[idx]).ContentType);
  end
  else
  begin
   li.Caption:=Idmessage.MessageParts.Items[idx].ContentType;
  end;
 end;
end;
*)
procedure TEpsilon.IdSSLIOHandlerSocketOpenSSLStatusInfo(Msg: String);
begin
 LabelStatus.Caption:=Msg;
end;

procedure TEpsilon.IdSMTPStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: String);
begin
 LabelStatus.Caption:=AStatusText;
end;

end.

Mike_ 5. Feb 2011 21:25

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
"Could not load SSL library"

Question:
Well, whats the error ?

Answer:
Could not load SSL library



Hehe jetzt mal auf Deutsch :-)

Die .dll Dateien fehlen für die SSL Komponente die du benutzt (Aus lizenzrechtlichen Gründe wurde diese nicht mitgeliefert).

Schau auf der Indyseite nach oder bei meinen letzten Beiträgen.

Es ist von der Indykomponente abhängig, welche SSL .dll du benötigst.

Google it :thumb:
(Indy hat selbst eine Seite mit den SSL .dll´s)


Update1:
First search result @google:
http://www.google.de/#hl=de&xhr=t&q=...=8&oq=indy+ssl

->

http://www.indyproject.org/Sockets/ssl.en.aspx

SvenLittkowski 5. Feb 2011 21:44

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Also, ich habe jetzt von "http://indy.fulgan.com/SSL" das Archiv "openssl-1.0.0c-i386-win32.zip" heruntergeladen und die die folgenden DLL-Dateien daraus in ein Verzeichnis inenrhalb "Delphi/Source/Indy" extrahiert:
- libeay32.dll
- ssleay32.dll

Außerdem dabei war noch die folgende Datei, über deren Verwendung ich nichts weiß und sie dehalb nicht ausführe:
- openssl.exe

Dieses ganze Paket ist mir neu, hatte noch nie damit gearbeitet. Habe ich soweit alles richtig gemacht? Oder (das könnte ich mir fast vorstellen) müssen die DLLs woanders hin, vieleicht zu meiner eigenen Anwendung?

Mike_ 5. Feb 2011 21:53

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Windows first searches the directory where the exe is located and does not find the bound dlls. The 2nd place Windows searches for the dlls is in the shared system32 directory.

(This MSDN article describes the Windows search order for dlls http://msdn.microsoft.com/en-us/library/ms682586.aspx.)

SvenLittkowski 5. Feb 2011 22:06

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hmm, erneut Danke. :-)

Bedeutet aber auch, wenn ich mein Programm an Leute verteile, daß ich dann auch einen Installer benutzen muß, damit die DLLs an die richtige Stelle kopiert werden, oder?

Ich hatte die DLLs im selben Verzeichnis wie die EXE meines Programmes, aber trotzdem der selbe Fehler. Sind dies die korrekten DLLs?

Mike_ 5. Feb 2011 22:15

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1079771)
Ich hatte die DLLs im selben Verzeichnis wie die EXE meines Programmes, aber trotzdem der selbe Fehler. Sind dies die korrekten DLLs?

SvenLittkowski,

First step:
Question -> "Sind das die richtigen .dll´s"
Careful consideration -> Are more versions out there of the same kind of .dlls ?
Answer -> Yes

2nd step:
Question -> Why, who need different versions ?
Careful consideration -> What is the right version for my app. ? What do I use ?
Answer -> Indy v. X || Delphi X

3rd step:
Question -> Which version shoudl I take for Indy v. X || Delphi X ?
Careful consideration -> Google & Indypage

4th step:
Next time ask yourself that kind of questions and before asking, use the board search.

Otherwise I'm going to punish you by making you peel onions for 6 months in a submarine.
I swear I will. :-D



Idea:
http://www.delphipraxis.net/157566-i...ml#post1075647

SvenLittkowski 6. Feb 2011 00:18

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Well, but the shocking fact is, that I really love onions! I eat them even fresh! True thing that. And also, I am very interested for submarines, especially the ones with the new "whisper engines" (these magnetically charging water tubes). :-D

Well, I was of course looking before I was asking. I just today downloaded the latest version of the Indy components, v.10.0.52. And the DLLs I was downloading, are openssl v.1.0.0c for the i386 CPU and for Windows 32bit. That should work.

And the error is not an error of incompatibility, but of simply not finding them, as far as I can say. I wondered, if "libeay32.dll" and "ssleay32.dll" are the files I require. Seems so, based on what I researched. But still, why aren't they found? I have them just in the same folder like my new software I am developing, AND I pasted them inside my Windows' "System32" folder, too. Still, they are not found. That's why I wondered if these two files are the DLLs I needed, despite of my online research showing me, yes that they are.

I wished I could continue with the development, but this problem really holds me up.

Mike_ 6. Feb 2011 01:48

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
http://indy.fulgan.com/SSL/

Laut google (http://www.delphigroups.info/2/12/211367.html) kommt die Version 0.96 für dich in Frage.


Leider hast du aber meinen Rat nicht befolgt.
Denn ich hatte dir im vorherigen Post noch einen Link geschrieben zum Schluss als "Idea", wo genau diese Version als attachment von mir gepostet wurde.


Aber weißt du was ?
Du bist ein richtiger Glückspilz.
(Siehe Upload)

lG

SvenLittkowski 6. Feb 2011 02:37

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Yes! You was right, and using the new DLLs does not cause the program to error for missing DLLs! But - my program is back to the previous state of halting after having clicked the SEND button. Means, the source code is still faulty. And I can't find the problem with "Run to Cursor" and "Step Over". Es ist zum Mäusemelken!

Hier der Quelltext:

Code:
implementation

uses Box1;

{$R *.dfm}

procedure TEpsilon.FormCreate(Sender: TObject);
begin
 Epsilon.Color:=Alpha.ColorDialog.Color;
end;

procedure TEpsilon.ButtonMailClick(Sender: TObject);
begin
 idSMTP.Host:='smtp.googlemail.com';
 idSMTP.Port:=465; //smtp service usually runs on this port 25
 idSMTP.Password:='MyPassword';
 idSMTP.UseTLS:=utUseExplicitTLS;
 //setup idmessage parameters
 idmessage.From.address:=EditEMail.Text;
 idmessage.Recipients.EMailAddresses:='MyEMail@gmail.com';
 idmessage.CCList.EMailAddresses:='';
 idmessage.BccList.EMailAddresses:='';
 idmessage.Subject:='My E-Mail';
 idmessage.Body.Text:=EditMailEra.Text+EditMailOld.Text+EditmailAmount.Text+EditMailModern.Text;
 idmessage.Body.Text:=idmessage.Body.Text+MemoMail.Lines.Text;
 //check if receipt confirmation is required
// if checkbox1.checked then idmessage.ReceiptRecipient.Text:=edfrom.Text; //if required, set the sendback email address to your email address
 //send the message
 try
  try
   idSMTP.Connect;
   LabelStatus.Caption:='Connecting...'; //&#8230;then show the message
   LabelStatus.Hint:='Connecting...'; //&#8230;then show the message
   idSMTP.send(idmessage);
   LabelStatus.Caption:='Sending...'; //&#8230;then show the message
   LabelStatus.Hint:='Sending...'; //&#8230;then show the message
  //if an exception occurs&#8230;
  except
   on E: EIdSMTPReplyError do
   begin
    LabelStatus.Caption:=E.Message; //&#8230;then show the message
    LabelStatus.Hint:=E.Message; //&#8230;then show the message
   end;
  end;
 finally
  //disconnect from server
  if IdSMTP.Connected then
  begin
   IdSMTP.Disconnect;
   LabelStatus.Caption:='Disconnecting...'; //&#8230;then show the message
   LabelStatus.Hint:='Disconnecting...'; //&#8230;then show the message
  end;
 end;
end;

procedure TEpsilon.ButtonBrowseClick(Sender: TObject); // doesn't function, so I disabled it - for now
begin
// if OpenDialog.Execute then TIdAttachmentFile.Create(idmessage.MessageParts,OpenDialog.FileName);
// AddAttachments;
end;
(*
procedure TEpsilon.AddAttachments; // caused problems, too
var
 li: TListItem;
 idx: Integer;
begin
 //clear the attachment listview
 lvAttachments.Items.Clear;
 //loop through Idmessage and count parts
 for idx:=0 to Pred(Idmessage.MessageParts.Count) do
 begin
  li:=lvAttachments.Items.Add;
  // Check if Idmessage contains any attachments&#8230;
  if Idmessage.MessageParts.Items[idx] is TIdAttachmentFile then
  begin
   //if so, get the file names&#8230;
   li.Caption:=TIdAttachmentFile(Idmessage.MessageParts.Items[idx]).Filename;
   //and add them to the listview
   li.SubItems.Add(TIdAttachmentFile(Idmessage.MessageParts.Items[idx]).ContentType);
  end
  else
  begin
   li.Caption:=Idmessage.MessageParts.Items[idx].ContentType;
  end;
 end;
end;
*)
procedure TEpsilon.IdSSLIOHandlerSocketOpenSSLStatusInfo(Msg: String);
begin
 LabelStatus.Caption:=Msg;
end;

procedure TEpsilon.IdSMTPStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: String);
begin
 LabelStatus.Caption:=AStatusText;
end;

end.

Mike_ 6. Feb 2011 03:20

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Ich teste es schnell bei mir, leider habe ich mein Testprogramm von vor 1 Monate gelöscht.

Ich werde dann diesen Post updaten und hänge dir die Datei an.

SvenLittkowski 6. Feb 2011 03:49

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Hey, vielen Dank!

Wie kommt's, daß Du oft beide Sprachen verwendest (Englisch und Deutsch)? :-)

Mike_ 6. Feb 2011 04:07

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang findest du die funktionierende Source.

Falls du es Anderen zur Verfügung stellen möchtest, bau dir noch ein Try...Except ein.

Zitat:

Zitat von SvenLittkowski (Beitrag 1079785)
Hey, vielen Dank!

Wie kommt's, daß Du oft beide Sprachen verwendest (Englisch und Deutsch)? :-)

Mir war einfach danach in deinem Thread. :thumb:

Tip:
If you post sourcecode of an application, trim it.
Drop useless code.

Exempli gratia:
Delphi-Quellcode:
LabelStatus.Caption:='Connecting...'; //&#8230;then show the message
LabelStatus.Hint:='Connecting...'; //&#8230;then show the message
Label ZYX

SvenLittkowski 6. Feb 2011 06:47

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Beim Kompilieren das folgende: :-D

Zitat:

Zitat von Mein Delphi 7
[Hint] IdIOHandlerStack.pas(222): Overriding virtual method 'TIdIOHandlerStack.ConnectClient' has lower visibility (protected) than base class 'TIdIOHandlerSocket' (public)
[Error] IdIOHandlerStack.pas(222): Declaration of 'ConnectClient' differs from previous declaration
[Error] IdIOHandlerStack.pas(223): Method 'ReadFromSource' not found in base class
[Error] IdIOHandlerStack.pas(227): Method 'CheckForDataOnSource' not found in base class
[Error] IdIOHandlerStack.pas(228): Method 'CheckForDisconnect' not found in base class
[Error] IdIOHandlerStack.pas(235): Undeclared identifier: 'TIdBytes'
[Error] IdIOHandlerStack.pas(234): Method 'WriteDirect' not found in base class
[Error] IdIOHandlerStack.pas(238): Property 'ReadTimeout' does not exist in base class
[Error] IdIOHandlerStack.pas(313): Undeclared identifier: 'Toss'
[Error] IdIOHandlerStack.pas(319): Undeclared identifier: 'Toss'
[Error] IdIOHandlerStack.pas(329): Incompatible types
[Error] IdIOHandlerStack.pas(330): Undeclared identifier: 'FTransparentProxy'
[Error] IdIOHandlerStack.pas(330): Incompatible types
[Error] IdIOHandlerStack.pas(331): 'THEN' expected but identifier 'Enabled' found
[Error] IdIOHandlerStack.pas(332): Missing operator or semicolon
[Error] IdIOHandlerStack.pas(333): Missing operator or semicolon
[Error] IdIOHandlerStack.pas(347): Too many actual parameters
[Error] IdIOHandlerStack.pas(359): Undeclared identifier: 'ConnectTimeout'
[Warning] IdIOHandlerStack.pas(359): Comparing signed and unsigned types - widened both operands
[Error] IdIOHandlerStack.pas(368): Incompatible types
[Error] IdIOHandlerStack.pas(369): 'THEN' expected but identifier 'Enabled' found
[Error] IdIOHandlerStack.pas(370): Missing operator or semicolon
[Error] IdIOHandlerStack.pas(389): Undeclared identifier: 'IfFalse'
[Error] IdIOHandlerStack.pas(390): Incompatible types
[Error] IdIOHandlerStack.pas(397): Undeclared identifier: 'FClosedGracefully'
[Error] IdIOHandlerStack.pas(417): Cannot read a write-only property
[Error] IdIOHandlerStack.pas(420): Cannot read a write-only property
[Error] IdIOHandlerStack.pas(426): Undeclared identifier: 'BindingAllocated'
[Error] IdIOHandlerStack.pas(430): Undeclared identifier: 'FRecvBuffer'
[Error] IdIOHandlerStack.pas(430): Incompatible types
[Error] IdIOHandlerStack.pas(435): Incompatible types
[Error] IdIOHandlerStack.pas(436): Undeclared identifier: 'Receive'
[Error] IdIOHandlerStack.pas(437): Incompatible types
[Error] IdIOHandlerStack.pas(439): Undeclared identifier: 'Intercept'
[Error] IdIOHandlerStack.pas(439): Operator not applicable to this operand type
[Error] IdIOHandlerStack.pas(440): Missing operator or semicolon
[Error] IdIOHandlerStack.pas(441): Incompatible types
[Error] IdIOHandlerStack.pas(451): Undeclared identifier: 'InputBuffer'
[Error] IdIOHandlerStack.pas(451): Missing operator or semicolon
[Error] IdIOHandlerStack.pas(455): Undeclared identifier: 'Toss'
[Error] IdIOHandlerStack.pas(459): Undeclared identifier: 'IfTrue'
[Error] IdIOHandlerStack.pas(461): Undeclared identifier: 'FClosedGracefully'
[Error] IdIOHandlerStack.pas(467): Undeclared identifier: 'IfTrue'
[Error] IdIOHandlerStack.pas(471): Operator not applicable to this operand type
[Error] IdIOHandlerStack.pas(486): Undeclared identifier: 'ClosedGracefully'
[Error] IdIOHandlerStack.pas(487): Undeclared identifier: 'BindingAllocated'
[Error] IdIOHandlerStack.pas(499): Undeclared identifier: 'FInputBuffer'
[Error] IdIOHandlerStack.pas(499): Incompatible types
[Error] IdIOHandlerStack.pas(500): ')' expected but identifier 'Size' found
[Error] IdIOHandlerStack.pas(502): Undeclared identifier: 'RaiseConnClosedGracefully'
[Error] IdIOHandlerStack.pas(542): Undeclared identifier: 'SetDefaultClass'
[Fatal Error] Unit2.pas(7): Could not compile used unit 'IdIOHandlerStack.pas'

Liegt's vieleicht an unterschiedlichen Delphi-Versionen?

Aber das spielt letztendlich keine so große Rolle. Ich habe einfach Deinen Code kopiert und in mein Programm eingefügt, und meinen eigenen Code erstmal disabled. So, Programm gestartet und Mailknopf gedrückt und - Programm stehengeblieben...

Ich habe dann alles disabled, und dann von vorne und von hinten zeilenweise den Code enabled. Ich fand heraus, daß der Befehl "IdSMTP.Connect;" wohl das Erstarren des Programmes bewirkt. Was kann das verursachen? Mangeldne Kommunikation zum Google-Server? Zu langsame Kommunikation? Falsche Einstellungen des GMail-Kontos? Werde nochmal das Programm laufen lassen, dieses Mal aber mehrere Minuten warten, ob sich die Starre wieder löst.

UPDATE

Interessantes Ergebnis: GMail riet, "465" als Port zu verwenden, doch erst als ich Deine "587" verwendete, hing sich das Programm nicht mehr auf. Jedoch bekomme ich nun einen SSL-Fehler. Folgende Zeile wird markiert:

raise EIdOSSLConnectError.Create(RSSSLConnectError); ("Error connecting with SSL") Datei: IDSSLOpenSSL, bei mir Zeile 1849

hathor 6. Feb 2011 06:54

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
Bei mir gibt es keine Probleme beim Compilieren.
(DELPHI 2007)

Allerdings muss man die überflüssigen Files löschen:
Project1.dproj
Project1.dproj.local
Project1.identcache

SvenLittkowski 6. Feb 2011 07:29

AW: Delphi: E-Mail-Versand / E-Mail-Formatierung
 
hathor, vielen ank.

Aber bei mir gibt es keine dieser doppelte Dateien im Verzeichnis meiner neuen Anwendung.

Ich schlafe erstmal über dieses Problem, ist Nacht hier...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Seite 1 von 2  1 2      

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