AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019
Thema durchsuchen
Ansicht
Themen-Optionen

Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

Ein Thema von MichaMD · begonnen am 29. Apr 2022 · letzter Beitrag vom 1. Mai 2022
Antwort Antwort
Seite 1 von 2  1 2      
MichaMD

Registriert seit: 20. Mär 2021
Ort: Magdeburg
28 Beiträge
 
Delphi 10.3 Rio
 
#1

Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 29. Apr 2022, 23:10
Moin,
Ich habe ein für mich seltsames Problem,
Ich habe eine auf Indy basierende Fragebogenabgabe erstellt(mit CE 10.4), welche auf verschiedenen Windows 10 Pcs funktioniert, sobald ich die exe(und die ssleay32.dll sowie libeay32.dll) jedoch auf Windows Server 2019 ziehe funktioniert alles bis auf den Email versand. Ich finde jedoch nichts zu bekannten Problemen diesbezüglich und 10.4 soll Windows Server 2019 unterstützen.

Ergänzung:
Die Windows 10 Pcs sind meine also mit Adminrechten, für Windows Server 2019 habe ich es auf einem Arbeitsrechner getestet, wo ich keinen Adminzugriff habe und wenig Infos oder Einfluss auf Netzwerkeinstellungen etc..

Anbei stark reduziert der Code:

Delphi-Quellcode:
unit Hauptunit;

interface

Uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls, System.UITypes, Mail;

type
  TForm1 = class(TForm)
    btn_Abgeben: TButton;
    procedure btn_AbgebenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn_AbgebenClick(Sender: TObject);
var
  Abgeben:integer;
  BodyList:TStringList;
  AttachmentList:TStringList;
  Absender:string;
  Empfänger:String;
  Betreff:string;
begin
   BodyList:=TStringList.Create;
   AttachmentList:=TStringList.Create;
       try
   begin
       BodyList.Add(******);
                 AttachmentList.Add(ExtractFilePath(Application.Exename) + '*******csv');
                  Absender:=**********@*******.de;
                  Empfänger:=******@*******.de;
                  Betreff:=***********;
                  if Form2.SendMail(Absender,Empfänger,Betreff,BodyList,AttachmentList) then
                    begin
                      showmessage('Abgabe erfolgreich');
                    end;
   end;
       finally
   begin
       BodyList.Free;
              AttachmentList.Free;
   end;
Delphi-Quellcode:
unit Mail;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdSMTPBase, IdSMTP, IdMessage, IdAttachment, IdAttachmentFile;

type
  TForm2 = class(TForm)
    IdSMTP: TIdSMTP;
    IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
    IdMessage: TIdMessage;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Function SendMail(Absender:string; Empfänger:string; Betreff:String; Nachricht:TStringList; Anhang:TStringlist):Boolean;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

Function TForm2.SendMail(Absender:string; Empfänger: string; Betreff: string; Nachricht: TStringlist; Anhang: TStringlist): Boolean;
var
  Mes:TIdMessage;
  Attachment:TIdAttachment;
  i:integer;
begin
  Mes:=TIdMessage.Create(self);
  try
    begin
      with Mes do
        begin
          Clear;
          ContentType:='multipart/*';
          From.Address:=Absender;
          Recipients.EMailAddresses:=Empfänger;
          Subject:=Betreff;
          Body:=Nachricht;

          if Anhang.Count <> 0 then
            begin
              for i := 0 to Anhang.Count-1 do
                begin
                  Attachment:=TIdAttachmentFile.Create(Mes.MessageParts,Anhang[i]);
                end;
            end;
        end;

      if IdSMTP.Connected then IdSMTP.Disconnect;

      IdSMTP.Port:=587;
      IdSMTP.UseTLS:=utUseExplicitTLS;
      IdSMTP.Host:=******@****.de;
      IdSMTP.Username:=*********;
      IdSMTP.Password:=********************;
      IdSMTP.AuthType:=TIdSMTPAuthenticationType.satDefault;

      IdSMTP.ConnectTimeout:=1000;
      IdSMTP.Connect;
      IdSMTP.Authenticate;

      try
        begin
          IdSMTP.Send(Mes);
          result:=true;
        end;
      except
        begin
          result:=false;
        end;
      end;
    end;
  finally
    begin
      IdSMTP.Disconnect;
      Attachment.Free;
      Mes.Free;
    end;
  end;
end;
end.

Geändert von MichaMD (30. Apr 2022 um 17:40 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 05:38
Hallo,
was kommt denn im try except als Fehlermeldung?
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#3

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 08:55
Hallo,
was kommt denn im try except als Fehlermeldung?
Delphi-Quellcode:
      try
        begin
          IdSMTP.Send(Mes);
          result:=true;
        end;
      except
        begin
          result:=false;
        end;
      end;
Solche Konstrukte sind meiner Meinung nach verantwortungslos.
Delphi-Quellcode:
      try
        begin
          IdSMTP.Send(Mes);
          result:=true;
        end;
      except
        on e : Exception do
        begin
          result := false;
          MessageDlg(e.Message,mtError,[mbOk],0);
          // oder zumindest einen Eintrag in 'ner Log-Datei, einem Protokoll, ...
        end;
      end;
Auch in btn_AbgebenClick könnte das Abfangen einer Exception hilfreich sein.

In SendMail werden nur Fehler beim IdSMTP.Send(Mes); abgefangen, aber letztlich ignoriert. Die Fehlerursache könnte aber durchaus auch z. B. beim Attachment := TIdAttachmentFile.Create(Mes.MessageParts,Anhang[i]); oder beim IdSMTP.Connect; oder beim IdSMTP.Authenticate; oder beim ... liegen.

Aus dem Code ist beim besten Willen nicht zu erkennen, was denn hier ggfls. falsch laufen könnte.
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#4

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 09:09
Du rufst SendMail in Form11 auf; hier ist die Routine in Form2 definiert. Testest Du mit der richtigen Unit?
  Mit Zitat antworten Zitat
MichaMD

Registriert seit: 20. Mär 2021
Ort: Magdeburg
28 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 17:27
Hallo,
was kommt denn im try except als Fehlermeldung?
Asche auf mein Haupt..., das hatte ich noch garnicht angeschaut.
Ich habs mal schnell nachgeholt, aber es werden keine Meldungen(weder bei Abgabe noch SendMail ausgespuckt, es hängt sich einfach auf.(Task Manager Status: inaktiv)

Delphi-Quellcode:
      try
        begin
          IdSMTP.Send(Mes);
          result:=true;
        end;
      except
        begin
          result:=false;
        end;
      end;
Solche Konstrukte sind meiner Meinung nach verantwortungslos.
Wegen der fehlenden Exceptionausgabe, oder weshalb? (Ehrlich interessiert)


In SendMail werden nur Fehler beim IdSMTP.Send(Mes); abgefangen, aber letztlich ignoriert. Die Fehlerursache könnte aber durchaus auch z. B. beim Attachment := TIdAttachmentFile.Create(Mes.MessageParts,Anhang[i]); oder beim IdSMTP.Connect; oder beim IdSMTP.Authenticate; oder beim ... liegen.

Aus dem Code ist beim besten Willen nicht zu erkennen, was denn hier ggfls. falsch laufen könnte.
Du hast absolut recht, ich habe jetzt entsprechende Fehlerausgaben eingefügt, die jedoch (siehe Antwort auf hoika) nichts ausgespuckt haben.
Zusätzlich habe ich einige Sendmessages verteilt und konnte eingrenzen wo das problem zu liegen scheint
Delphi-Quellcode:
showmessage('4');

          IdSMTP.ConnectTimeout:=1000;
showmessage('5');
          IdSMTP.Connect;
showmessage('6');
          IdSMTP.Authenticate;
  showmessage('7');
5 wird noch ausgegeben, 6 nicht mehr.


Du rufst SendMail in Form11 auf; hier ist die Routine in Form2 definiert. Testest Du mit der richtigen Unit?
Kleiner Übertragungsfehler hier fürs Forum, habs oben korrigiert. Ist die korrekte Unit. Aber Stimmt, hätte es natürlich sein können.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#6

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 17:37
Delphi-Quellcode:
      try
        begin
          IdSMTP.Send(Mes);
          result:=true;
        end;
      except
        begin
          result:=false;
        end;
      end;
Solche Konstrukte sind meiner Meinung nach verantwortungslos.
Wegen der fehlenden Exceptionausgabe, oder weshalb? (Ehrlich interessiert)
Ja, genau wegen der fehlenden Exceptionausgabe. Im Fehlerfalle die Fehlermeldung nicht auszugeben (egal wie, egal wohin) sondern einfach nur als Ergebnis ein false zu liefern, ist für die Fehlersuche nicht wirklich hilfreich.
Damit nimmt man sich jegliche Chance irgendwie auf Fehler zu reagieren, da man nie erfährt, was denn überhaupt schiefgelaufen sein könnte. Und wenn man solche Konstrukte über mehrere Funktionen und / oder Prozeduren verschachtelt hat, erfährt man nichtmal, wo denn ein Fehler aufgetreten sein könnte.
  Mit Zitat antworten Zitat
MichaMD

Registriert seit: 20. Mär 2021
Ort: Magdeburg
28 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 17:39
Oben noch vergessen zu erwähnen,
Die Windows 10 Pcs sind meine also mit Admin rechten, für Windows Server 2019 habe ich es auf einem Arbeitsrechner getestet, wo ich keinen Adminzugriff habe und wenig Infos oder Einfluss auf Netzwerkeinstellungen etc.
  Mit Zitat antworten Zitat
MichaMD

Registriert seit: 20. Mär 2021
Ort: Magdeburg
28 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 17:43
Delphi-Quellcode:
      try
        begin
          IdSMTP.Send(Mes);
          result:=true;
        end;
      except
        begin
          result:=false;
        end;
      end;
Solche Konstrukte sind meiner Meinung nach verantwortungslos.
Wegen der fehlenden Exceptionausgabe, oder weshalb? (Ehrlich interessiert)
Ja, genau wegen der fehlenden Exceptionausgabe. Im Fehlerfalle die Fehlermeldung nicht auszugeben (egal wie, egal wohin) sondern einfach nur als Ergebnis ein false zu liefern, ist für die Fehlersuche nicht wirklich hilfreich.
Damit nimmt man sich jegliche Chance irgendwie auf Fehler zu reagieren, da man nie erfährt, was denn überhaupt schiefgelaufen sein könnte. Und wenn man solche Konstrukte über mehrere Funktionen und / oder Prozeduren verschachtelt hat, erfährt man nichtmal, wo denn ein Fehler aufgetreten sein könnte.
Ok, da hast du schon Recht mit.
Da werde ich wohl zukünftig den inneren Schweinehund noch etwas überwinden müssen. Danke für den Hinweis.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#9

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 17:53
Zusätzlich habe ich einige Sendmessages verteilt und konnte eingrenzen wo das problem zu liegen scheint
Delphi-Quellcode:
showmessage('4');

          IdSMTP.ConnectTimeout:=1000;
showmessage('5');
          IdSMTP.Connect;
showmessage('6');
          IdSMTP.Authenticate;
  showmessage('7');
5 wird noch ausgegeben, 6 nicht mehr.
Das könnte auf ein Netzwerkproblem schließen lassen. Die Verbindung Richtung Mailserver scheint nicht wirklich aufgebaut werden zu können.

Kennst Du Blat?

Das ist ein Konsolenprogamm zum Versenden von Mails. Eventuell kannst Du damit mal versuchen, ob damit 'ne Mail zu verschicken ist. Wenn ja, dann musst Du in Deinem Programm weitersuchen, wenn nein, dann liegt da eine grundlegendere Problematik vor.

Achso:

Mails könnte man auch über die Kommandozeile via TelNet verschicken, da sieht man ggfls. auch, wo es hakt.
Gebrauchsanweisung dazu: E Mails über Telnet verschicken

Geändert von Delphi.Narium (30. Apr 2022 um 17:58 Uhr) Grund: Schreibfehler ...
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#10

AW: Mail via Indy klappt auf Windows 10 aber nicht auf Windows Server 2019

  Alt 30. Apr 2022, 22:09
Versuch mal: if idSMTP.connected then showmessage('6');

Ich bezweifle dass er überhaupt verbindet.
Schalte zum Testen mal die Windows Firewall ab.

Mirko

Geändert von oakley (30. Apr 2022 um 22:09 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 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