AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi IdSMTP sendet nicht und IdMessage wird nicht gespeichert.
Thema durchsuchen
Ansicht
Themen-Optionen

IdSMTP sendet nicht und IdMessage wird nicht gespeichert.

Ein Thema von Informatik2012 · begonnen am 15. Apr 2012 · letzter Beitrag vom 15. Apr 2012
Antwort Antwort
Informatik2012

Registriert seit: 30. Mai 2011
30 Beiträge
 
#1

IdSMTP sendet nicht und IdMessage wird nicht gespeichert.

  Alt 15. Apr 2012, 16:50
Ich probiere hier aus und es funktioniert. Mein SMTPSocket sendet die Emails nicht und bringt beim Disconnecten eine Fehlermeldung.
Kann mir da jemand helfen? Hier der Quelltext:
Delphi-Quellcode:
function login_SMTP(Username,PW,Server : String;Port : Integer; SMTPSocket : TIdSMTP):boolean;
var SetUp : TEinstellungen;
SSLIOHandler : TIdSSLIOHandlerSocketOpenSSL;
begin
  SetUp := LadeEinstellungen(Form2);
  if SMTPSocket.Connected then
  SMTPSocket.Disconnect();

   SMTPSocket.Username := Username;
   SMTPSocket.Password := PW;
   SMTPSocket.Port := Port;
   SMTPSocket.Host := Server;
  if Setup.smtpssl = true then
  begin
    SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create();
    SSLIOHandler.PassThrough := True;
    SSLIOHandler.StartSSL;
    SMTPSocket.IOHandler:= SSLIOHandler;
    SMTPSocket.UseTLS:=TIdUseTLS(2);
    end else
    begin
    SMTPSocket.UseTLS:=utNoTLSSupport;
    end;
    SMTPSocket.AuthType := satDefault;
   SMTPSocket.Connect;
   Result := SMTPSocket.Connected;
end;

procedure logoff_SMTP(SMTPSocket : TIdSMTP);
begin
   SMTPSocket.Disconnect();
end;

procedure sendMessage(Username,PW,Server : String;Port, Priority : Integer; fromMail,Betreff: String;Anhang : TStringList;toMail : TStringList;Nachricht : TRichEdit; SMTPSocket : TIdSMTP);
var IdNachricht : TIdMessage;
   i : integer;
   s : String;
  IdAnhang : TIdAttachmentFile;
begin
   if SMTPSocket.Connected = true then
   begin
      IdNachricht := TIdMessage.Create(nil);
      with TIdText.Create(IdNachricht.MessageParts, nil) do
      begin
         ContentType := 'text/plain';
         Body.Text := Nachricht.Text;
      end;
      s := '';
      with IdNachricht do
      begin
         ContentType := 'multipart/*';
         From.Text := fromMail;
         ReplyTo.EMailAddresses := fromMail;
         Subject := Betreff;
         Priority := TIdMessagePriority(Priority);
         s := BccList.EmailAddresses;
         for i := 0 to toMail.Count -1 do
         begin
            s := s+ toMail.Strings[i];
         end;
         BccList.EMailAddresses := s;
      end;
         if Anhang.Count >= 1 then
         begin
            for i := 0 to Anhang.Count -1 do
               IdAnhang := TIdAttachmentFile.Create(IdNachricht.MessageParts,Anhang[i]);
         end;
      SMTPSocket.SendMsg(IdNachricht);
   end;
end;
procedure TFrame3.SpeedButton2Click(Sender: TObject);
var s,hToMail : String;
F : File;
i,k : integer;
leerArray : Array of Integer;
jahr,monat,tag,stunde,minute,sekunde,millisekunde : Word;
begin
  SetUp:=ladeEinstellungen(Form2);
  SMTPSocket := TIdSMTP.Create();
  toMail := TStringList.Create;
  s := Edit1.Text;
  SetLength(leerArray,0);
  for i := 1 to Length(s) do
  begin
     if s[i]=' then
     begin
       Setlength(leerArray,length(leerArray)+1);
       leerArray[length(leerArray)-1] := i;
     end;
  end;
  hToMail := '';
  for i := 1 to leerArray[0]-1 do
    begin
       hToMail:=hToMail+s[i];
    end;
    toMail.Add(hToMail);
  hToMail := '';
  for i := 1 to length(leerArray)-1 do
    begin
      if i <= length(leerArray)-2 then
      begin
      for k := leerArray[i]+1 to leerArray[i+1]-1 do
        begin
          hToMail := hToMail+s[k];
        end;
        hToMail := '';
      end
      else
      begin
       for k := leerArray[length(leerArray)-1]+1 to length(s) do
       begin
          hToMail := hToMail + s[k];
       end;
      end;
    end;
  login_SMTP(SetUp.Username,SetUp.Passwort,SetUp.SMTPServer,SetUp.SMTPPOrt,SMTPSocket);
  sendMessage(SetUp.Username,SetUp.Passwort,SetUp.SMTPServer,SetUp.SMTPPort,2,SetUp.Username,Edit2.Text,Attachment,toMail,Richedit1,SMTPSocket);
  logoff_SMTP(SMTPSocket);
  Showmessage('Gesendet');
  NMessage := TIdMessage.Create();
  NMessage.Body.Text := Richedit1.Text;
  NMessage.Subject := Edit2.Text;
        s := NMessage.BccList.EmailAddresses;
         for i := 0 to toMail.Count -1 do
         begin
            s := s+ toMail.Strings[i];
         end;
  NMessage.BccList.EMailAddresses := s;
  NMessage.Date := Now;
  s:=DateToStr(NMessage.Date);
  CreateFile(PWideChar(extractfilepath(paramstr(0))+'\MailClient\Mails\gesendet\'+NMessage.Subject+s+'.msg'),0,0,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
  NMessage.SaveToFile(extractfilepath(paramstr(0))+'\MailClient\Mails\gesendet\'+NMessage.Subject+s+'.msg');
  Form2.Frame51.ListBox1.Items.Add('gesendet');
  Form2.Frame51.ListBox2.Items.Add(NMessage.BccList.EMailAddresses);
  Form2.Frame51.ListBox3.Items.Add(NMessage.Subject);
  Form2.Frame51.ListBox4.Items.Add(inttostr(tag)+'.'+inttostr(monat)+'.'+inttostr(jahr)+' '+inttostr(stunde)+':'+inttostr(minute)+'.'+inttostr(Sekunde));

end;
Also Das SaveToFile gibt eine Fehlermeldung dass es nicht zu speichern geht. und beim logoff kommt auch eine, sodass die Nachricht nicht gesendet wird.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: IdSMTP sendet nicht und IdMessage wird nicht gespeichert.

  Alt 15. Apr 2012, 18:55
Wie wäre es, wenn du mal etwas strukturierter vorgehen würdest?

1. Quelltext ordentlich formatieren, damit man die zusammengehörigen Blöcke auch erkennen kann
2. Überflüssige Parameter aus den Proceduren entfernen
3. DRY!!! Du baust die IdMessage 2 mal zusammen, irgendwie doppelt, gelle?

Lege dir das Befüllen der IdMessage in eine eigene procedure

Der SendMessage übergibst du dann nur noch die beiden Instanzen von TIdSMTP und TIdMessage

Dann wird das schon mal wesentlich übersichtlicher und erleichtert auch dir die Fehlersuche
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:27 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