Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

Troubleshooting
Research
Professional Opinions
Ask a Question
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

troubleshooting Question

Indy10 IdSMTP hickups

Avatar of videojack
videojack asked on
Delphi
2 Comments1 Solution1141 ViewsLast Modified:
using D7se

i have 2 problems..
initially, my code will send an email..however, i never receive it..
i am using a ';' for delimiter for CC,..not sure if i should use  a , or a ;..
maybe thats problem1..

next big problem--
it sends once--A-OK..but thereafter, i get access violation error message..
i am not clearing something out..
any help--appreciated..thank you


procedure TfrmIndy.SendSMTPMail(V_Subject: String);
var
idAttach: TIdAttachmentFile;
htmpart, txtpart: TIdText;
V_Text: string;
V_To, V_CC: string;
V_html: string;
V_attac, V_file:string;
tempStr: string;
begin
   try
   if(frmLogs.shpShuttingDown.Brush.Color=clRed)then begin
      if(frmIndy.IdSMTP1.Connected)then frmIndy.IdSMTP1.Disconnect;
      sleep(100);
      frmLogs.shpSendSMTP.Brush.Color:=clSilver;
      application.ProcessMessages;
      end else begin
      frmMaster.pnlEmailStatus.color:=clSilver;
      application.ProcessMessages;
      //make sure we have an IP or dont try to send anything...
      if(frmSetup.lblIPaddress.Caption='')then begin
         if(frmLogs.shpGetIPaddress.Brush.Color<>clRed)then getIPaddress();
         sleep(10);
         while(frmLogs.shpGetIPaddress.Brush.Color=clRed)do begin
            application.ProcessMessages;
            end;
         end;
      if(frmSetup.lblIPaddress.Caption<>'')then begin
         try
         if(frmIndy.IdSMTP1.Connected)then frmIndy.IdSMTP1.Disconnect;
         sleep(200);
         except
         end;
 
      //not connected yet
      if(frmSetup.chkUseSSL.Checked)then begin
         frmIndy.idsmtp1.IOHandler:=frmIndy.IdSSLIOHandlerSocketOpenSSL1;
         frmIndy.IdSMTP1.UseTLS:=utUseRequireTLS;
         end else begin
         frmIndy.idsmtp1.IOHandler:=nil;
         frmIndy.IdSMTP1.UseTLS:=utNoTLSSupport;
         end;
   if(frmSetup.chkSendAuthentication.Checked)
      then frmIndy.IdSMTP1.AuthType:=satDefault
      else frmIndy.IdSMTP1.AuthType:=satNone;
 
   if(frmLogs.shpBtnSendTest.brush.Color=clLime)
      then frmSetup.mmoMailStatus.Lines.Add('IP is: '+frmSetup.lblIPaddress.Caption);
 
 
      //setup mail message
      //frmIndy.IdMessage1.MessageParts.Clear;
      frmIndy.IdMessage1:=TIdMessage.Create(nil);
      //frm who, to who, CC
      if(frmLogs.shpSendNWemail.Brush.Color<>clRed)
         then begin
         V_To:=frmSetup.mmoTo.Lines.Strings[0];
         frmSetup.mmoTo.Lines.Delimiter:=';';
         V_CC:=frmSetup.mmoTo.Lines.DelimitedText;
         end else begin
         V_To:=frmSetup.mmoNWto.Lines.Strings[0];
         frmSetup.mmoNWto.Lines.Delimiter:=';';
         V_CC:=frmSetup.mmoNWto.Lines.DelimitedText;
         end;
 
      //attachment
      V_html:='';
      V_attac:=frmSetup.edtAttachment.Text;
      V_file:=extractFileName(frmSetup.edtAttachment.Text);
 
      //body message
      frmSetup.Body.Lines.clear;
      application.ProcessMessages;
 
      if(frmLogs.shpSendNWemail.Brush.Color<>clRed)then begin
         if(frmMaster.btnStartMaster.Enabled=false)and
           (frmMaster.btnStopMaster.Enabled=true)
           then tempStr:='LOGGING'
           else tempStr:='NOT LOGGING';
         frmSetup.Body.Lines.Add('Watchman911Pro is: '+tempStr);
         end;
 
      if(frmSetup.chkAllowNeighborhoodWatchWebServer.Checked=false)
         then tempStr:=quotedStr('DISABLED')
         else tempStr:='';
      frmSetup.Body.Lines.Add(tempStr+' NeighborhoodWatch Pictures: http://'+
                                 frmSetup.lblIPaddress.caption+
                                 ':'+frmSetup.edtRemotePort.text
                                 +'/NWlogin.html');
 
      if(frmLogs.shpSendNWemail.Brush.Color<>clRed)then begin
         frmSetup.Body.Lines.Add('');
         if(frmSetup.chkAllowMyPrivateWebServer.Checked=false)
            then tempStr:=quotedStr('DISABLED')
            else tempStr:='';
         frmSetup.Body.Lines.Add(tempStr+' Private WebServer Pictures Database: http://'+
                                    frmSetup.lblIPaddress.caption+
                                    ':'+frmSetup.edtRemotePort.text
                                    +'/PRlogin.html');
 
         frmSetup.Body.Lines.Add('');
         frmSetup.Body.Lines.Add('FTP server(Databases Archive): ftp://'+
                                    frmSetup.lblIPaddress.caption+
                                    ':'+frmSetup.edtRemotePort.Text);
         end;
 
      application.ProcessMessages;
      V_Text:=frmSetup.Body.Text;
 
      //SetUp messaging
      frmIndy.IdMessage1.IsEncoded:=True;
      //SetUp from variables
      frmIndy.IdMessage1.CharSet:='iso-8859-1';
      frmIndy.IdMessage1.Encoding:=meMIME;
      frmIndy.IdMessage1.Subject:=V_Subject;
 
      frmIndy.IdMessage1.From.Text:=frmSetup.edtFrom.Text;  //'MyName@MyHost.it' ;
      frmIndy.IdMessage1.From.Name:='Watchman911Pro'; frmSetup.edtUserName.Text; //'NameDescriptionMail';
 
      frmIndy.IdMessage1.Recipients.Clear;
      frmIndy.IdMessage1.Recipients.add.Text:=V_To;
      frmIndy.IdMessage1.CCList.Clear;
      frmIndy.IdMessage1.CCList.Add.Text:=V_CC;
      frmIndy.IdMessage1.ContentType:='multipart/related';
      frmIndy.IdMessage1.Body.Clear;
 
      txtpart := TIdText.Create(frmIndy.IdMessage1.MessageParts);
      txtpart.Body.Text :=V_Text;
      txtpart.ContentType := 'text/plain';
      txtpart.ContentTransfer := '7bit';
 
      htmpart := TIdText.Create(frmIndy.IdMessage1.MessageParts);
      htmpart.Body.Text :=V_Html;
      htmpart.ContentType := 'text/html';
 
      if(trim(V_attac)='')then begin
         frmLogs.mmoErrorLog.lines.add('SendSMTPMail: trim(V_attac)=nil, aborting send');
         application.ProcessMessages;
         //result:=false;
         end;
 
      idAttach:=TIdAttachmentFile.Create(frmIndy.IdMessage1.MessageParts,V_attac);
      idAttach.ContentType := 'image/jpeg';
      idAttach.ExtraHeaders.Add('Content-ID: <'+V_file+'>');
      idAttach.ExtraHeaders.Values['content-id'] := V_file ;
      idAttach.DisplayName:= V_file ;
      idAttach.ContentDisposition := 'inline';
 
      frmIndy.idSMTP1.Host:=frmSetup.edtPostOffice.Text; //'smtp.MyHost.it' ;
      frmIndy.idSMTP1.Username:=frmSetup.edtUserName.Text; //'MyUser' ;
      frmIndy.idSMTP1.Password:=frmSetup.edtPassword.Text;       //'MyPW' ;
      frmIndy.IdSMTP1.Port:=strToInt(frmSetup.edtSMTPport.Text);
      frmIndy.IdSMTP1.ConnectTimeout:=10000;
      frmIndy.idsmtp1.ReadTimeout:=10000;
 
      frmMaster.lblEmailStatus.caption:='Connecting';
      if(frmLogs.shpBtnSendTest.brush.Color=clLime)
         then frmSetup.mmoMailStatus.lines.add('Connecting...');
      application.ProcessMessages;
 
      frmIndy.idSMTP1.Connect;
      application.ProcessMessages;
 
      if(frmLogs.shpBtnSendTest.brush.Color=clLime)
         then frmSetup.mmoMailStatus.Lines.Add('Sending...');
      application.ProcessMessages;
      frmIndy.idSMTP1.Send(frmIndy.IdMessage1);
 
      if(frmLogs.shpBtnSendTest.brush.Color=clLime)
         then frmSetup.mmoMailStatus.Lines.Add('DisConnecting...');
      frmIndy.idSMTP1.Disconnect;
      application.ProcessMessages;
 
      frmIndy.IdMessage1.Free;
      frmIndy.idSMTP1.Free;
      //frmIndy.IdMessage1.MessageParts.CleanupInstance;
      frmMaster.lblEmailStatus.caption:='Sent';
      frmMaster.pnlEmailStatus.color:=clGreen;
      application.ProcessMessages;
      if(frmLogs.shpBtnSendTest.brush.Color=clLime)
         then frmSetup.mmoMailStatus.Lines.Add('Sent');
      application.ProcessMessages;
      end;
   end;
 
   except on E:Exception do begin
      frmMaster.lblEmailStatus.caption:='Send Error';
      if(frmLogs.shpBtnSendTest.brush.Color=clLime)then begin
         frmSetup.mmoMailStatus.lines.add('Send Error');
         frmSetup.mmoMailStatus.Lines.Add('ERROR: ' +E.ClassName+' '+E.Message);
         end;
      frmMaster.pnlEmailStatus.color:=clRed;
      application.ProcessMessages;
 
      frmLogs.mmoErrorLog.Lines.Add(dateTimeToStr(now)+' SendSMTPMail: '+E.ClassName+' '+E.Message);
 
      try
      if(frmIndy.IdSMTP1.Connected)then frmIndy.IdSMTP1.Disconnect;
      sleep(100);
      frmIndy.IdMessage1.Free;
      frmIndy.idSMTP1.Free;
      except
      end;
 
      end;
   end;
 
   frmLogs.shpSendSMTP.brush.Color:=clSilver;
   application.ProcessMessages;
end;
ASKER CERTIFIED SOLUTION
Avatar of Geert G
Geert GFlag of Belgium imageOracle dba
Commented:
This problem has been solved!
Unlock 1 Answer and 2 Comments.
See Answers