Email SMTP Delphi 7
Boa tarde, alguém já conseguiu utilizar SMTP da paleta indy delphi 7. Atualizei o indy para versão 10 e fiz uma classe para receber os componentes de envio email.
Minha classe.
Depois criei um formulário para usuário digitar os dados referente ao email
e ai esta o codigo desse formulário, porém, ao executar esta me retornando erro "SSL negotiation failed"
Tenho as DLL libeay32.dll e ssleay32.dll dentro da pasta do meu projeto e ambas versao 0.9.8.17.
Onde pode esta o erro no meu codigo ou configuracao, se alguem tiver um exemplo funcionando ficarei muito grato
Minha classe.
unit classSMTPMail;
interface
uses Dialogs, SysUtils, Variants, dateutils, IdMessage, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
IdMessageClient, IdSMTPBase, IdSMTP, IdServerIOHandler, IdSSL, IdSSLOpenSSL,
IdAttachment, IdMessageParts, IdEmailAddress, IdAttachmentFile, Forms;
type
newMail = class
messageRecipient:string;
messageCC : String;
messageSubject : String;
messageFromAddress : String;
messageBodyAdd : String;
messageAttachment : String;
function sendMail() : Boolean;
end;
implementation
uses uDMPrincipal, Biblioteca, Variaveis;
function newMail.sendMail : Boolean;
var
SMTPCon : TIdSMTP;
SMTPMsg : TIdMessage;
SMTPIOHandler : TIdSSLIOHandlerSocketOpenSSL;
SMTPAttachment : TIdAttachment;
begin
SMTPCon := TIdSMTP.Create();
SMTPMsg := TIdMessage.Create();
SMTPIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create();
DMPrincipal.db_SMTPMail.Open;
// DMPrincipal.db_SMTPMail.Execute;
SMTPCon.AuthType := satDefault;
SMTPCon.Host := DMPrincipal.db_SMTPMailHOST.AsString;
SMTPCon.Port := DMPrincipal.db_SMTPMailPORT.AsInteger;
SMTPCon.Username := DMPrincipal.db_SMTPMailUSERNAME.AsString;
SMTPCon.Password := Decrypt(DMPrincipal.db_SMTPMailPASSWORD.Asstring, chave);
SMTPCon.IOHandler := SMTPIOHandler;
SMTPCon.UseTLS := utUseExplicitTLS;
with SMTPIOHandler do
begin
Destination := DMPrincipal.db_SMTPMailHOST.AsString;
Host := DMPrincipal.db_SMTPMailHOST.AsString;
Port := DMPrincipal.db_SMTPMailPORT.AsInteger;
SSLOptions.Method := sslvSSLv3;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 0;
end;
//Preparar Mensagem...
SMTPMsg.CharSet := 'utf-8';
SMTPMsg.Encoding := meMIME;
SMTPMsg.ContentType := 'multipart/mixed';
SMTPMsg.Priority := mpNormal;
SMTPMsg.Date := Now;
SMTPMsg.From.Name := 'Heitor Guarda Borges';
SMTPMsg.Recipients.Add;
SMTPMsg.Recipients.EMailAddresses := messageRecipient; // Remetente
SMTPMsg.From.Address := messageFromAddress; // Destinatario
if (messageCC <> '') then
SMTPMsg.BccList.EMailAddresses := messageCC;
SMTPMsg.Subject := messageSubject; // Assunto
SMTPMsg.Body.Add(messageBodyAdd); // Corpo
if FileExists(messageAttachment) then
SMTPAttachment := TIdAttachmentFile.Create(SMTPMsg.MessageParts, messageAttachment);
try
try
SMTPCon.Connect();
SMTPCon.Authenticate();
except
on E:Exception do
begin
MessageDlg('Erro ao conectar ao Serviço de Envio de Emails, se o problema persistir Contate o Administrador.'+#13+
'Falha na conexão e/ou autenticação: '+E.Message, mtWarning, [mbOK], 0);
DMPrincipal.db_SMTPMail.Close;
SMTPCon.Free;
SMTPIOHandler.Free;
Result := False;
exit;
end;
end;
SMTPCon.Send(SMTPMsg);
SMTPCon.Disconnect();
SMTPMsg.Clear;
DMPrincipal.db_SMTPMail.Close;
except
on ex: exception do
begin
raise exception.Create('Falha no envio da mensagem.' + #13 + ex.Message);
DMPrincipal.db_SMTPMail.Close;
SMTPCon.Free;
SMTPIOHandler.Free;
Result := False;
exit;
end;
end;
Showmessage('Email enviado com sucesso para '+messageRecipient);
DMPrincipal.db_SMTPMail.Close;
SMTPCon.Free;
SMTPIOHandler.Free;
Result := True;
end;
end.Depois criei um formulário para usuário digitar os dados referente ao email
unit uFrmEnviaEmail;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, PngBitBtn, IdIOHandler, IdServerIOHandler,
IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdAttachment,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageParts,
IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP,
IdMessage, IdEmailAddress, IdAttachmentFile, ComCtrls;
type
TFrmEnviaEmail = class(TForm)
Panel1: TPanel;
PngBtnFechar: TPngBitBtn;
PngSend: TPngBitBtn;
Label1: TLabel;
GroupBox1: TGroupBox;
edtRemet: TEdit;
edtDest: TEdit;
edtAssunto: TEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
memoMSG: TMemo;
lbAnexos: TListBox;
PngBtnAnexar: TPngBitBtn;
Panel2: TPanel;
statusBar: TStatusBar;
OpenDialog1: TOpenDialog;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure PngBtnFecharClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PngSendClick(Sender: TObject);
procedure PngBtnAnexarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmEnviaEmail: TFrmEnviaEmail;
implementation
uses classSMTPMail, uDMPrincipal, Biblioteca, Variaveis, UsuariosAcao;
{$R *.dfm}
procedure TFrmEnviaEmail.PngBtnFecharClick(Sender: TObject);
begin
Close;
end;
procedure TFrmEnviaEmail.FormShow(Sender: TObject);
begin
DMPrincipal.db_SMTPMail.Open;
Label1.Caption := 'Servidor(es) Ativo(s): '+IntToStr(DMPrincipal.db_SMTPMail.RecordCount);
AcaoUser[0] := 'Acessou o uso do módulo '+FrmEnviaEmail.Caption;
LogUsuario(DMPrincipal.Ado_usuariolog, FrmEnviaEmail.Caption, AcaoUser[0]);
end;
procedure TFrmEnviaEmail.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DMPrincipal.db_SMTPMail.Close;
AcaoUser[0] := 'Finalizou o uso do módulo '+FrmEnviaEmail.Caption;
LogUsuario(DMPrincipal.Ado_usuariolog, FrmEnviaEmail.Caption, AcaoUser[0]);
end;
procedure TFrmEnviaEmail.PngSendClick(Sender: TObject);
var
xsendmail : newMail;
i: integer;
begin
PngSend.Enabled := False;
Screen.Cursor := crHourglass;
statusBar.Panels[0].Text := 'Aguarde...';
xsendmail := newMail.Create;
xsendmail.messageRecipient := edtRemet.Text; // Remetente
xsendmail.messageFromAddress := edtDest.Text; // Destinatario
xsendmail.messageSubject := edtAssunto.Text; // Assunto
// corpo
xsendmail.messageBodyAdd := '<html>';
xsendmail.messageBodyAdd := ' <body>';
xsendmail.messageBodyAdd := ' <h4>Prezado(a)</h4>';
xsendmail.messageBodyAdd := ' <font>';
xsendmail.messageBodyAdd := ' Para eventuais esclarecimentos, estamos em plena disposição.';
xsendmail.messageBodyAdd := ' <hr>';
xsendmail.messageBodyAdd := ' <font>';
xsendmail.messageBodyAdd := ' '+MemoMSG.Text;
xsendmail.messageBodyAdd := ' </font>';
xsendmail.messageBodyAdd := ' <b><font>';
xsendmail.messageBodyAdd := ' <hr>';
xsendmail.messageBodyAdd := ' ''Isoft - ''
';
xsendmail.messageBodyAdd := ' <font>';
xsendmail.messageBodyAdd := ' ''rua paraguai, 3118''
';
xsendmail.messageBodyAdd := ' </font>';
xsendmail.messageBodyAdd := ' </font></b>';
xsendmail.messageBodyAdd := ' </body>';
xsendmail.messageBodyAdd := '</html>';
// anexa os arquivos
if lbAnexos.Items.Count > 0 then
begin
for i := 0 to lbAnexos.Items.Count -1 do
xsendmail.messageAttachment := lbAnexos.Items.Strings[i];
end;
try
except
On Exc:Exception do
begin
ShowMessage('Erro ao carregar o anexo. Verifique o item anexado e tente novamente!');
abort;
end;
end;
if (xsendmail.sendMail()) then
begin
xsendmail.Destroy;
statusBar.Panels[0].Text := 'Concluído!!!';
Screen.Cursor := crDefault;
PngSend.Enabled := True;
end
else
begin
xsendmail.Destroy;
statusBar.Panels[0].Text := 'Falha no envio do email!!!';
Screen.Cursor := crDefault;
PngSend.Enabled := True;
end;
end;
procedure TFrmEnviaEmail.PngBtnAnexarClick(Sender: TObject);
var
i: integer;
begin
if OpenDialog1.Execute then
begin
for i:= 0 to OpenDialog1.Files.Count -1 do
if (lbAnexos.Items.IndexOf(OpenDialog1.Files[i]) = -1) then
lbAnexos.Items.Add(OpenDialog1.Files[i])
end;
end;
end.e ai esta o codigo desse formulário, porém, ao executar esta me retornando erro "SSL negotiation failed"
Tenho as DLL libeay32.dll e ssleay32.dll dentro da pasta do meu projeto e ambas versao 0.9.8.17.
Onde pode esta o erro no meu codigo ou configuracao, se alguem tiver um exemplo funcionando ficarei muito grato
Iramar Junior
Curtidas 0
Respostas
Marcelo Calmon
08/07/2016
Olá Iramar, tudo bem?
Estou com um problema parecido com o seu, até postei a situação no fórum. Acessando seu problema verifiquei que você consegui a versão0.9.8.17 das DLL libeay32 e ssleay32. Se não for incomodo para você, será possível enviá-las para meu email, mcsolucao@yahoo.com.br. Se eu obtiver sucesso com o meu problema lhe informo.
Obrigado.
Marcelo Calmon
Estou com um problema parecido com o seu, até postei a situação no fórum. Acessando seu problema verifiquei que você consegui a versão0.9.8.17 das DLL libeay32 e ssleay32. Se não for incomodo para você, será possível enviá-las para meu email, mcsolucao@yahoo.com.br. Se eu obtiver sucesso com o meu problema lhe informo.
Obrigado.
Marcelo Calmon
GOSTEI 0
Hamilton Oliveira
08/07/2016
Olá pessoa!
Tive o mesmo problema e depois de muitas tentativas descobri que o erro não era nos códigos e nem das dlls e sim na permissão do Gmail de acesso com "dispositivos menos seguros".
Você tem que ativar o seu acesso na sua conta do gmail para o acesso.
Veja mais no link https://support.google.com/accounts/answer/6010255?hl=pt-BR.
Estou usando o Delphi Xe7 e funcionou beleza.
Qualquer coisa posto o meu código pra você testar.
Abraço.
Tive o mesmo problema e depois de muitas tentativas descobri que o erro não era nos códigos e nem das dlls e sim na permissão do Gmail de acesso com "dispositivos menos seguros".
Você tem que ativar o seu acesso na sua conta do gmail para o acesso.
Veja mais no link https://support.google.com/accounts/answer/6010255?hl=pt-BR.
Estou usando o Delphi Xe7 e funcionou beleza.
Qualquer coisa posto o meu código pra você testar.
Abraço.
GOSTEI 0
Eduardo Silva
08/07/2016
Tive o mesmo problema e depois de muitas tentativas descobri que o erro não era nos códigos e nem das dlls e sim na permissão do Gmail de acesso com "dispositivos menos seguros".
Eu já tintei isso e não funcionou a dois dias atras o meu sistema estava funcionando tudo beleza hoje não consigo mandar e-mails pelo sistema apresentando as mensagens 'Could not load SSL library.'ou 'connection closed gracefully' ou 'SSL is not available on this server.' eu estava utilizando as Dll indy_openssl096 não sei se tem uma versão mais atual para para o indy10 do Delphi7.
se alguém tiver essas Dlls mais atuais para o Delphi 7 e indy 10.1.5 favor passa o link de onde baixar e qual é a versão a ser baixada.
GOSTEI 0
Haroldo Junior
08/07/2016
Tive o mesmo problema e depois de muitas tentativas descobri que o erro não era nos códigos e nem das dlls e sim na permissão do Gmail de acesso com "dispositivos menos seguros".
Eu já tintei isso e não funcionou a dois dias atras o meu sistema estava funcionando tudo beleza hoje não consigo mandar e-mails pelo sistema apresentando as mensagens 'Could not load SSL library.'ou 'connection closed gracefully' ou 'SSL is not available on this server.' eu estava utilizando as Dll indy_openssl096 não sei se tem uma versão mais atual para para o indy10 do Delphi7.
se alguém tiver essas Dlls mais atuais para o Delphi 7 e indy 10.1.5 favor passa o link de onde baixar e qual é a versão a ser baixada.
GOSTEI 0