Advertisement
hamacker

Using synapse to send email

Sep 12th, 2024
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.00 KB | Source Code | 0 0
  1. unit utils_email;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, smtpsend, mimepart;
  9.  
  10. {
  11.   Exemplo de uso da unit utils_email:
  12.  
  13.   var
  14.     Sender, Recipient, CC, BCC, Subject, Body, Attachments, ResultMsg: string;
  15.   begin
  16.     Sender := 'seu_email@exemplo.com';
  17.     Recipient := 'destinatario@exemplo.com';
  18.     CC := 'copia@exemplo.com';
  19.     BCC := 'copiaoculta@exemplo.com';
  20.     Subject := 'Assunto do Email';
  21.     Body := 'Conteúdo do email.';
  22.     Attachments := 'caminho_para_anexo1' + sLineBreak + 'caminho_para_anexo2';
  23.  
  24.     ResultMsg := SendEmail(Sender, 'senha_do_email', Recipient, CC, BCC, Subject, Body, Attachments);
  25.     if ResultMsg = '' then
  26.       writeln('Email enviado com sucesso')
  27.     else
  28.       writeln('Erro ao enviar email: ', ResultMsg);
  29.   end;
  30. }
  31.  
  32. function SendEmail(const AFrom, APassword, ATo, ACC, ACCO, ASubject, ABody, AAttachments: string): string;
  33.  
  34. implementation
  35.  
  36. function SendEmail(const AFrom, APassword, ATo, ACC, ACCO, ASubject, ABody, AAttachments: string): string;
  37. var
  38.   SMTP: TSMTPSend;
  39.   MsgBody: TStringList;
  40.   AttachmentList: TStringList;
  41.   i: Integer;
  42.   MimeMsg: TMimePart;
  43.   AttachmentStream: TMemoryStream;
  44.   FileExistsFlag: Boolean;
  45.   ErrorMsg: string;
  46. begin
  47.   Result := '';  // Se tudo der certo, retornará uma string vazia.
  48.   ErrorMsg := ''; // Variável para armazenar erros
  49.   SMTP := TSMTPSend.Create;
  50.   MsgBody := TStringList.Create;
  51.   AttachmentList := TStringList.Create;
  52.   MimeMsg := TMimePart.Create;
  53.   try
  54.     try
  55.       // Configura os dados de login do SMTP
  56.       SMTP.UserName := AFrom;
  57.       SMTP.Password := APassword;
  58.       SMTP.TargetHost := 'smtp.seuprovedor.com';  // Defina o servidor SMTP correto
  59.       SMTP.TargetPort := '25';                    // Defina a porta adequada (25, 587, 465)
  60.  
  61.       // Adiciona o corpo do e-mail à mensagem MIME
  62.       MimeMsg.Clear;
  63.       MimeMsg.MimeType := 'multipart/mixed';     // <- erro NAO TEM ESSE METODO
  64.       MimeMsg.AddPartText(ABody);                // <- erro NAO TEM ESSE METODO
  65.  
  66.       // Verifica se todos os arquivos indicados existem
  67.       AttachmentList.Text := AAttachments;
  68.       FileExistsFlag := True;
  69.       for i := 0 to AttachmentList.Count - 1 do
  70.         if not FileExists(AttachmentList[i]) then
  71.         begin
  72.           ErrorMsg := 'Arquivo não encontrado: ' + AttachmentList[i];
  73.           FileExistsFlag := False;
  74.           Break;
  75.         end;
  76.  
  77.       // Se houve erro ao verificar os arquivos, pular o envio
  78.       if not FileExistsFlag then
  79.       begin
  80.         Result := ErrorMsg;
  81.         Exit;
  82.       end;
  83.  
  84.       // Adiciona os anexos à mensagem MIME
  85.       for i := 0 to AttachmentList.Count - 1 do
  86.       begin
  87.         AttachmentStream := TMemoryStream.Create;
  88.         try
  89.           AttachmentStream.LoadFromFile(AttachmentList[i]);
  90.           MimeMsg.AddPartBinary(AttachmentStream, ExtractFileName(AttachmentList[i]));   // <- erro NAO TEM ESSE METODO
  91.         finally
  92.           AttachmentStream.Free;
  93.         end;
  94.       end;
  95.  
  96.       // Configura os destinatários e cabeçalhos
  97.       SMTP.MailFrom(AFrom, Length(MimeMsg.Lines.Text));
  98.       SMTP.MailTo(ATo);
  99.       if ACC <> '' then
  100.         SMTP.MailTo(ACC);  // Enviar cópia
  101.       if ACCO <> '' then
  102.         SMTP.MailTo(ACCO); // Enviar cópia oculta
  103.  
  104.       // Conectar e enviar o email
  105.       if SMTP.Login then
  106.       begin
  107.         if not SMTP.MailData(MimeMsg.Lines) then
  108.           Result := 'Erro ao enviar dados do email';
  109.         if not SMTP.Logout then
  110.           Result := 'Erro ao desconectar do servidor SMTP';
  111.       end
  112.       else
  113.         Result := 'Erro ao conectar no servidor SMTP';
  114.     except
  115.       on E: Exception do
  116.         Result :=
  117.           'Erro "' + E.Message + '": ' + sLineBreak +
  118.           'Unidade: ' + {$I %FILE%} + sLineBreak +
  119.           'Linha: ' + {$INCLUDE %LINE%} + sLineBreak +
  120.           'Método: ' + {$I %CURRENTROUTINE%} + sLineBreak;
  121.     end;
  122.   finally
  123.     SMTP.Free;
  124.     MsgBody.Free;
  125.     AttachmentList.Free;
  126.     MimeMsg.Free;
  127.   end;
  128. end;
  129.  
  130.  
  131. end.
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement