Vivendo&Aprendendo Postado Outubro 5, 2017 Denunciar Share Postado Outubro 5, 2017 Olá pessoal. Fiz um sistema de backup para minha aplicação e este deve enviar o arquivo para um e-mail de dentro do sistema mesmo. Estou usando o Indy 9.0.18 e delphi 7. Esse é o código que estou usando no botão enviar e-mail. procedure TFrmBackup.BtnEmailClick(Sender: TObject); begin IdSMTP.Host:= 'smtp.gmail.com'; IdSMTP.Port:= 465; IdSMTP.Username:= 'XXXX'; IdSMTP.Password:= 'XXXX'; IdMessage.From.Address:= 'XXXX@gmail.com'; IdMessage.From.Name:= 'Sistema de Backup'; IdMessage.Recipients.EMailAddresses:= EdtPara.Text; IdSMTP.Connect(3000); Application.ProcessMessages; IdSMTP.Send(IdMessage); Application.MessageBox('E-Mail enviado com sucesso!','Aviso',mb_IconInformation +mb_ok); IdSMTP.Disconnect; EdtPara.Clear; end; O erro corre na linha em negrito. Error conecting with SSL Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 5, 2017 Denunciar Share Postado Outubro 5, 2017 a versão do seu Indy é muito antiga tente com essa http://www.indyproject.org/Sockets/fpc/indy-10.2.0.3.zip abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Outubro 5, 2017 Autor Denunciar Share Postado Outubro 5, 2017 (editado) Obrigado Jhonas, baixei, mas algumas funções nesta dão erro que na outra versão não dava. Agora está dando erro de Conncetion Closed Gracefully Pode me dar alguma dica? Editado Outubro 5, 2017 por Vivendo&Aprendendo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 5, 2017 Denunciar Share Postado Outubro 5, 2017 isso não é um erro, é apenas uma mensagem de aviso voce pode ignorar esse aviso teclando F9, e continuar o envio, no entanto, não vai resolver a exceção. isso ocorre quando a conexão é fechada antes de finalizar o envio solução: Connection closed gracefully Como o EIdConnClosedGracefully é uma exceção comum especialmente com determinados servidores, ele desce da EIdSilentException. Na guia Exceções de idioma das Opções do Debugger (Menu Ferramentas), você pode adicionar EIdSilentException à lista de exceções para ignorar. Depois disso, as exceções ainda ocorrerão no código e serão tratadas, mas o depurador não interromperá o programa para depurá-las. ou veja em http://www.swissdelphicenter.ch/en/showarticle.php?id=1 veja tambem se o problema esta no timeout do componente TIdSSLIOHandlerSocketOpenSSL: Código: IdSSLIOHandlerSocketOpenSSL1.ReadTimeout := 30000; Veja tambem com relação ao GMail http://tsdn.tecnospeed.com.br/blog-da-consultoria-tecnica-tecnospeed/post/corrigindo-o-erro-connection-closed-gracefully-gmail em ultimo caso, voce ainda pode tentar outra versao do indy ( voce não mencinou qual a versão do seu windows ) http://minhaweb2.zapto.org:9090/downloads/Indy10.rar abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Outubro 5, 2017 Autor Denunciar Share Postado Outubro 5, 2017 (editado) Jhonas, já tentei as duas primeiras opções de links que mandou, o ultimo link não abre. Testei com essa linha de código e com a exceção e deu o erro assim mesmo. Editado Outubro 5, 2017 por Vivendo&Aprendendo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 5, 2017 Denunciar Share Postado Outubro 5, 2017 o ultimo link é um provedor particular, voce só conseguira baixar os arquivos se ele estiver ativo com relação ao seu código... testei aqui com o delphi 7 e usando a versão do Indy 10.2.0.1 e funcinou corretamente caso queira tentar outro código: Componentes IdSSLIOHandlerSocket1 = Vai na SSLOption= Method : sslvSSLv3 IdSMTP1 IdMessage1 Codigo : Código: IdSMTP1.Host := 'smtp.gmail.com'; IdSMTP1.Username := 'SuaContaGmailAqui'; IdSMTP1.Password := 'SuaSenhaGmailAqui'; IdSMTP1.Port := StrToInt(Trim('465')); //-- requer autenticacao IdSMTP1.AuthenticationType:= atLogin; //-- conexao segura SSL IdSMTP1.IOHandler := IdSSLIOHandlerSocket1; IdMessage1.MessageParts.Clear; //-- ORIGEM IdMessage1.From.Address := Trim('Seu Endereço'); IdMessage1.Subject := Trim('Seu Titulo da Msg Pro Carinha'); IdMessage1.Body.Text := Trim('Sua Mensagem pro Carinha'); //-- DESTINO IdMessage1.Recipients.EMailAddresses := 'Email Do Carinha'; IdMessage1.BccList.EMailAddresses := ''; IdMessage1.CCList.EMailAddresses := ''; if NOT IdSMTP1.Connected then IdSMTP1.Connect(2000); if IdSMTP1.Connected then begin //IdSMTP1.Authenticate; IdSMTP1.Send(IdMessage1); Application.ProcessMessages; IdSMTP1.Disconnect; ======================================================================== procedure TfrmENVIAR.FormCreate(Sender: TObject); begin with SMTP do begin AuthenticationType := atLogin; Host := 'smtp.gmail.com'; IOHandler := SSLSocket; Password := 'senha'; Port := 465; Username := 'nome@gmail.com'; end; SSLSocket.SSLOptions.Method := sslvSSLv3; SSLSocket.SSLOptions.Mode := sslmClient; end; Botão ENVIAR: begin with MSG do begin Body.Text := memo1.text ; From.Address := 'email do remetente'; //opcional From.Name := 'Agenda'; //opcional Recipients.Add; Recipients.Items[0].Address := eddest.Text ; Recipients.Items[0].Name := eddest.Text ; //opcional Subject := 'Tarefas de hoje' ; end; try SMTP.Connect(); SMTP.Send(MSG); SMTP.Disconnect; except ShowMessage('Falha no envio!'); exit; end; ShowMessage('E-MAIL COM OS COMPROMISSOS FOI ENVIADO COM SUCESSO!'); ; end; email := TIdMessage.Create(nil); serV := TIdSMTP.Create(nil); if Autenticacao then begin SSL := TIdSSLIOHandlerSocket.Create(nil); { seta as propriedades do componente IdSMTP } Serv.IOHandler := SSl; serV.Port := 465; end else serV.Port := 25; serV.AuthenticationType := atLogin; Serv.Username := Usuario; Serv.Password := Senha; serV.Host := Servidor; { Seta as propriedades do componente IdMessage } email.From.Address := EmailRemetente; email.Recipients.EMailAddresses := EmailDestinatario; email.Subject := Assunto; email.Body.Text := Mensagem; { insere os anexos } for i := 0 to FAnexo.Count - 1 do begin TIdAttachment.Create(email.MessageParts,FAnexo.Strings[i]); end; { envia o email } try try serV.Connect(1000); serV.Send(email); except raise EspdNFeEmail_EnviarEmailException.Create('Erro ao enviar Email Verifique as Configurações do Email'); end; finally if serV.Connected then serV.Disconnect; end; end; email.Free; serV.Free; if Autenticacao then SSL.Free; abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Outubro 5, 2017 Autor Denunciar Share Postado Outubro 5, 2017 Abusando de sua boa vontade, teria como me enviar esse exemplo que você fez? aslalexandre@hotmail.com Segue abaixo todo meu código unit UnBackup; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ShellAPI, StdCtrls, DB, ADODB, ExtCtrls, ComCtrls, Buttons, AbBase, AbBrowse, AbMeter, AbZBrows, AbZipper, AbArcTyp, Mask, DBCtrls, ShellCtrls, CommCtrl, ShlObj, ActiveX, Grids, DBGrids, MAPI, IdMessage, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, Gauges, WinSkinData, MSNPopUp, IdExplicitTLSClientServerBase, IdSMTPBase, IdIOHandlerStack, IdSSL; const WM_ICONTRAY = WM_USER + 1; type TFrmBackup = class(TForm) StbBarra: TStatusBar; Timer: TTimer; PnProg: TPanel; Zip: TAbZipper; SaveDlg: TSaveDialog; ListBox: TListBox; BtnBackup: TSpeedButton; BtnFechar: TSpeedButton; PnInf: TPanel; Label1: TLabel; IdSMTP: TIdSMTP; // IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket; IdMessage: TIdMessage; BtnEmail: TSpeedButton; EdtPara: TEdit; LblPara: TLabel; IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL; procedure TimerTimer(Sender: TObject); procedure BtnFecharClick(Sender: TObject); procedure MSNPopUpClick(Sender: TObject); procedure BtnBackupClick(Sender: TObject); procedure MSNPopUpURLClick(Sender: TObject; URL: String); procedure BtnEmailClick(Sender: TObject); private { Private declarations } public { Public declarations } Function DataPorExtenso : String; end; var FrmBackup: TFrmBackup; implementation uses UnDados, UnPrincipal; {$R *.dfm} //Função de data por extenso function TFrmBackup.DataPorExtenso:String; const Meses : Array [1..12] of String = ('Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'); Semana : Array [1..7] of String = ('Domingo','Segunda-Feira','Terça-Feira','Quarta-Feira','Quinta-Feira','Sexta-Feira','Sábado'); var Dia, Mes, Ano, DiaSem : Word; begin DecodeDate(Date,Ano,Mes,Dia); DiaSem := DayOfWeek(Date); Result := Semana[DiaSem] + ', '+ IntToStr(Dia) +' de '+ Meses[Mes] + ' de ' + IntToStr(Ano); end; procedure TFrmBackup.TimerTimer(Sender: TObject); begin StbBarra.Panels[0].Text := DataPorExtenso + ' - ' + TimeToStr(Time); end; procedure TFrmBackup.BtnFecharClick(Sender: TObject); begin Close; end; procedure TFrmBackup.MSNPopUpClick(Sender: TObject); begin //Show; end; procedure TFrmBackup.BtnBackupClick(Sender: TObject); var Origem, Destino, Nome : String; begin ListBox.Font.Color := clBlack; ListBox.Font.Style := []; ListBox.Clear; ListBox.Items.Add('FECHANDO AS TABELAS DO BANCO DE DADOS!'); DmDados.ConectaBanco.Connected := False; ListBox.Items.Add(' '); ListBox.Items.Add('VERIFICANDO O ARQUIVO. AGUARDE!'); ListBox.Items.Add(' '); ListBox.Items.Add('ARQUIVO VERIFICADO COM SUCESSO!'); ListBox.Items.Add(' '); ListBox.Items.Add('COMPACTANDO O ARQUIVO!'); Origem := ExtractFilePath(Application.ExeName)+'Dados\Dados.mdb'; If SaveDlg.Execute Then Destino := SaveDlg.FileName; Nome := 'Backup '+ FormatDateTime('[dd-mm-yyyy] [hh-mm-ss]', Now) +'.zip'; //MSNPopUp.Text := 'BackUp efetuado com sucesso! '+#13 +Nome; //MSNPopUp.ShowPopUp; BtnBackup.Enabled := False; Zip.StoreOptions := [soStripDrive, soStripPath, soRemoveDots, soRecurse]; Zip.FileName := Destino; Zip.AddFiles(Origem, 0); Zip.CloseArchive; Zip.Save; RenameFile(Destino,Nome); MessageBeep(MB_ICONINFORMATION); ListBox.Items.Add(savedlg.FileName); ListBox.Items.Add(Nome); ListBox.Items.Add(' '); ListBox.Items.Add('CONCLUÍDO!'); ListBox.Items.Add(' '); ListBox.Items.Add('ABRINDO AS TABELAS DO BANCO DE DADOS!'); ListBox.Items.Add(' '); BtnBackup.Enabled := True; DmDados.ConectaBanco.Connected := True; DmDados.Senhas.Active := True; //---------Configura a mensagem para ser enviada para o e-mail IdMessage.Subject:= Nome; IdMessage.Body.Add('Esta mensagem foi enviada pelo sistema.'); IdMessage.Body.Add('Arquivo de backup do banco de dados do sistema.'); IdMessage.Body.Add(' '); IdMessage.Body.Add('Backup do dia/hora: '+Nome);//+DateToStr(Date)+' - '+TimeToStr(Time)); IdMessage.Body.Add(' '); IdMessage.Body.Add('Atenção! Sempre faça o backup diário!'); //-------anexa o arquivo automaticamente //TIdAttachment.create(idmessage.MessageParts, TFileName(Nome)); end; procedure TFrmBackup.MSNPopUpURLClick(Sender: TObject; URL: String); begin Show; end; procedure TFrmBackup.BtnEmailClick(Sender: TObject); begin IdSMTP.Host:= 'smtp.gmail.com'; IdSMTP.Port:= 465; IdSMTP.Username:= 'aslalexandre@gmail.com'; IdSMTP.Password:= 'aslale'; IdMessage.From.Address:= 'aslalexandre@gmail.com'; IdMessage.From.Name:= 'Sistema de Backup'; IdMessage.Recipients.EMailAddresses:= EdtPara.Text; IdSMTP.Connect;//(3000); IdSSLIOHandlerSocketOpenSSL1.ReadTimeout := 30000; Application.ProcessMessages; IdSMTP.Send(IdMessage); Application.MessageBox('E-Mail enviado com sucesso!','Aviso',mb_IconInformation +mb_ok); IdSMTP.Disconnect; EdtPara.Clear; end; end. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 5, 2017 Denunciar Share Postado Outubro 5, 2017 Seria tipo isso: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdMessage, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, StdCtrls, IdServerIOHandlerSocket, IdServerIOHandler; type TForm1 = class(TForm) Button1: TButton; IdSMTP1: TIdSMTP; IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket; IdMessage1: TIdMessage; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with IdSMTP1 do begin AuthenticationType := atLogin; Host := 'smtp.gmail.com'; IOHandler := Socket; Password := 'aslale'; Port := 465; Username := 'aslalexandre@gmail.com'; end; IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv2; IdSSLIOHandlerSocket1.SSLOptions.Mode := sslmBoth; IdMessage1.From.Address:= 'aslalexandre@gmail.com'; //-- requer autenticacao IdSMTP1.AuthenticationType:= atLogin; //-- conexao segura SSL IdSMTP1.IOHandler := IdSSLIOHandlerSocket1; IdMessage1.MessageParts.Clear; //-- ORIGEM IdMessage1.From.Address := Trim('Seu Endereço'); IdMessage1.Subject := Trim('Sistema de Backup'); IdMessage1.Body.Text := Trim('Texto: Envio de Email - Teste'); //-- DESTINO IdMessage1.Recipients.EMailAddresses := 'aslalexandre@gmail.com'; IdMessage1.BccList.EMailAddresses := ''; IdMessage1.CCList.EMailAddresses := ''; if NOT IdSMTP1.Connected then IdSMTP1.Connect(3000); if IdSMTP1.Connected then begin //IdSMTP1.Authenticate; IdSMTP1.Send(IdMessage1); Application.ProcessMessages; Application.MessageBox('E-Mail enviado com sucesso!','Aviso',mb_IconInformation +mb_ok); IdSMTP1.Disconnect; //EdtPara.Clear; end; end; end. ou pode tentar esse exemplo: http://programandodetudo.blogspot.com.br/2011/07/enviando-email-com-programa-feito-em.html abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Outubro 6, 2017 Autor Denunciar Share Postado Outubro 6, 2017 Bom dia Jhonas e mais uma vez obrigado pela atenção. Olha realmente não sei o que estou fazendo de errado, pois não funciona aqui. Uso win7 e já copiei seu código, baixei o exemplo que mandou e todos dão erro. Agora está dando erro nessas linhas: with IdSMTP1 do begin AuthenticationType := atLogin; e IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv2; IdSSLIOHandlerSocket1.SSLOptions.Mode := sslmBoth; e //-- requer autenticacao IdSMTP1.AuthenticationType:= atLogin; e if NOT IdSMTP1.Connected then IdSMTP1.Connect(3000); Esse componente IdSSLIOHandlerSocket1 é o mesmo que esse IdSSLIOHandlerSocketOpenSSL1? No exemplo o erro acontece ao clicar no botão: Não foi possível conectar ao servidor SMTP. Cloud not load SSL lbrary Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 6, 2017 Denunciar Share Postado Outubro 6, 2017 veja... esses componentes. Voce tem que coloca-los no Form ( estão nas Paletas do Indy ) IdSMTP1: TIdSMTP; IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket; IdMessage1: TIdMessage; Erro: Não foi possível conectar ao servidor SMTP. Cloud not load SSL library tem que ter a biblioteca SSL ( voce pode baixar da Internet ) Esse componente IdSSLIOHandlerSocket1 é o mesmo que esse IdSSLIOHandlerSocketOpenSSL1? acho que sim OBS: quanto aos erros que voce reportou, aqui não acontece. Então não posso te dizer o motivo dos erros na sua maquina. abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Outubro 6, 2017 Autor Denunciar Share Postado Outubro 6, 2017 Cara, já tem as dll's baixadas, não acho esse componente IdSSLIOHandlerSocket1, apenas esse IdSSLIOHandlerSocketOpenSSL1. Todos os componentes estão no form e não entendo porque dos erros. Vou instalar outra versão do delphi e testar em outra máquina tb. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 6, 2017 Denunciar Share Postado Outubro 6, 2017 Amigo, nesse tópico voce disse que já havia resolvido esse problema outro exemplo para o Gmail http://www.activedelphi.com.br/forum/viewtopic.php?t=65938&highlight=yahoo abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Outubro 7, 2017 Autor Denunciar Share Postado Outubro 7, 2017 E isso mesmo Jhonas, nem me lembrava desse tópico. Parei de programar em Delphi em 2009 e voltei agora devido uma necessidade de um cliente. Neste tópico aí vocês resolveram meus problemas, mas usei o mesmo programa desenvolvido na época e ele mesmo está dando os erros. Mas valeu. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 7, 2017 Denunciar Share Postado Outubro 7, 2017 isso tem haver com a versão do indy que voce estava usando naquele tempo. outra coisa que vi no Gmail... foi implantado um sistema de criptografia ( SSL ) que dificulta um pouco as coisas e voce tem que configurar o seu email para habilitar o ( POP e SMTP ) OBS: Tente alguns desses Demos do proprio site da Indy http://www.indyproject.org/Sockets/Demos/index.EN.aspx abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Vivendo&Aprendendo
Olá pessoal. Fiz um sistema de backup para minha aplicação e este deve enviar o arquivo para um e-mail de dentro do sistema mesmo.
Estou usando o Indy 9.0.18 e delphi 7.
Esse é o código que estou usando no botão enviar e-mail.
procedure TFrmBackup.BtnEmailClick(Sender: TObject);
begin
IdSMTP.Host:= 'smtp.gmail.com';
IdSMTP.Port:= 465;
IdSMTP.Username:= 'XXXX';
IdSMTP.Password:= 'XXXX';
IdMessage.From.Address:= 'XXXX@gmail.com';
IdMessage.From.Name:= 'Sistema de Backup';
IdMessage.Recipients.EMailAddresses:= EdtPara.Text;
IdSMTP.Connect(3000);
Application.ProcessMessages;
IdSMTP.Send(IdMessage);
Application.MessageBox('E-Mail enviado com sucesso!','Aviso',mb_IconInformation +mb_ok);
IdSMTP.Disconnect;
EdtPara.Clear;
end;
O erro corre na linha em negrito.
Error conecting with SSL
Link para o comentário
Compartilhar em outros sites
13 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.