Einzelnen Beitrag anzeigen

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