Novamente E-mail com Delphi 7
Boa tarde pessoal.
É o seguinte, como todo mundo sabe há necessidade de um dia ter que desenvolver na aplicação o envio de e-mail com anexos.
Até ai tudo bem, mas pesquisando no fórum da devmedia, as informações são muito desencontradas, infelizmente gerando mais dúvidas do que soluções.
Então venho através do fórum, solicitar a alguma alma bendita, o código fonte de envio de e-mail com anexos com o Delphi 7 fundional. Sei que é dificil pedir assim logo de cara, ainda mais o código, mas aqui vivemos num mundo livre, onde o conhecimento pertence ao mundo, e o propósito do fórum é ajudar as almas perdidas (como eu) a tentarem resolver seus pequenos problemas no dia a dia da programação.
Agradeço a todos e espero que a ajuda que eu obtiver com este tópico, também possa ajudar outras almas perdidas a encontrarem a luz no fim do tunel.
Um forte abraço a todos.
Valnei
É o seguinte, como todo mundo sabe há necessidade de um dia ter que desenvolver na aplicação o envio de e-mail com anexos.
Até ai tudo bem, mas pesquisando no fórum da devmedia, as informações são muito desencontradas, infelizmente gerando mais dúvidas do que soluções.
Então venho através do fórum, solicitar a alguma alma bendita, o código fonte de envio de e-mail com anexos com o Delphi 7 fundional. Sei que é dificil pedir assim logo de cara, ainda mais o código, mas aqui vivemos num mundo livre, onde o conhecimento pertence ao mundo, e o propósito do fórum é ajudar as almas perdidas (como eu) a tentarem resolver seus pequenos problemas no dia a dia da programação.
Agradeço a todos e espero que a ajuda que eu obtiver com este tópico, também possa ajudar outras almas perdidas a encontrarem a luz no fim do tunel.
Um forte abraço a todos.
Valnei
Valnei Reis
Curtidas 0
Melhor post
Claudia Nogueira
29/11/2012
Coloca um componente SSLSocket com Method = sslvSSLv3 e mode = sslmUnassigned.
IdMessage1.Clear;
IdMessage1.From.Text := Email1;
IdMessage1.Recipients.EMailAddresses := Email2[I]; // buscado no banco de dados
IdMessage1.Subject := 'Laudo de ' + Animal[I];
IdMessage1.Body.Text := 'Resultado de Laudo';
TIdAttachment.Create(IdMessage1.MessageParts, TFileName('PDF\'+IntToStr(NumLaudo)+'.pdf'));
IdMessage1.Date := StrToDateTime(FormatDateTime('DD/MM/YYYY HH:MM:SS',Now));
IdSMTP1.AuthenticationType := atLogin;
//Se for gmail
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 465;
IdSMTP1.Password := senha;
IdSMTP1.Username := email_completo;
//
//Se for pro hotmail
IdSMTP1.Host := 'smtp.live.com';
IdSMTP1.Port := 587;
IdSMTP1.Password := senha;
IdSMTP1.Username := email_completo;
SSLSocket.SSLOptions.Method := sslvTLSv1;
SSLSocket.PassThrough := true;
//
IdSMTP1.Connect;
//Se for hotmail
IdSMTP1.SendCmd('STARTTLS', 220);
SSLSocket.PassThrough := false;
//
SMTP.Authenticate;
IdSMTP1.Send(IdMessage1);
ninguém se arrisca a responder?
GOSTEI 1
Mais Respostas
Claudia Nogueira
05/11/2012
Tem um tópico recente falando sobre isso: [url]https://www.devmedia.com.br/forum/porta-de-conexao-para-envio-de-emails/426011[/url]
Inclusive eu desenvolvi um exemplo em Delphi7 e disponibilizei o código fonte: [url]http://www.cdnweb.com.br/EnviarEmail.rar[/url]
Inclusive eu desenvolvi um exemplo em Delphi7 e disponibilizei o código fonte: [url]http://www.cdnweb.com.br/EnviarEmail.rar[/url]
GOSTEI 0
Luiz Eduardo
05/11/2012
Esse é o que eu uso aqui, e funciona 100%.
Espero que lhe ajude aí parcero!
procedure tal tal tal (Sender: TObject); begin with IdMessage1 do begin IdMessage1.MessageParts.Clear; TIdAttachment.Create(IdMessage1.MessageParts, 'C:\\Windows\\System32\\arquivo + ponto + extensão'); From.Text := 'testekeypress@gmail.com'; //E-mail que envia os logs Recipients.EMailAddresses := "'; //E-mail que vai receber os dados Subject := (NomedoComputador); // Assunto IdSMTP1.AuthenticationType := atlogin; //Requer login //NAO MEXER IdSMTP1.Port := 587; IdSMTP1.Username := ''; //Nome de usuario (email) IdSMTP1.Password := ''; //Senha do email que envia IdSMTP1.Host := 'smtp.gmail.com'; //Servidor SMTP IdSMTP1.Connect; //Conecta ao servidor try IdSMTP1.Send(IdMessage1); //Envia except Application.Terminate; IdSMTP1.Disconnect; //Disconecta end; end; end;
Espero que lhe ajude aí parcero!
GOSTEI 0
Powerlog Tecnologia
05/11/2012
Tenho um modelo bem complexo (para add vários anexos) mas está com Skin, form herdado, etc.
Salvei a imagem aqui: https://dl.dropbox.com/u/35181834/Delphi/TelaEnvioEmail.jpg
Fonte (apenas .pas) aqui: https://dl.dropbox.com/u/35181834/Delphi/PasEnvioEmail.txt
Espero ter ajudado ;)
Salvei a imagem aqui: https://dl.dropbox.com/u/35181834/Delphi/TelaEnvioEmail.jpg
Fonte (apenas .pas) aqui: https://dl.dropbox.com/u/35181834/Delphi/PasEnvioEmail.txt
Espero ter ajudado ;)
GOSTEI 0
Luiz Eduardo
05/11/2012
Tenho um modelo bem complexo (para add vários anexos) mas está com Skin, form herdado, etc.
Salvei a imagem aqui: https://dl.dropbox.com/u/35181834/Delphi/TelaEnvioEmail.jpg
Fonte (apenas .pas) aqui: https://dl.dropbox.com/u/35181834/Delphi/PasEnvioEmail.txt
Espero ter ajudado ;)
Salvei a imagem aqui: https://dl.dropbox.com/u/35181834/Delphi/TelaEnvioEmail.jpg
Fonte (apenas .pas) aqui: https://dl.dropbox.com/u/35181834/Delphi/PasEnvioEmail.txt
Espero ter ajudado ;)
Mas Powerlog, este código que eu sugeri acima também adiciona vários anexos, basta apenas ir adicionando
TIdAttachment.Create(IdMessage1.MessageParts, 'C:\Windows\System32\arquivo + ponto + extensão');
uma abaixo do outro tá ligado? testa aê que você ver!! é um trecho de código bem simples, funcional e de fácil entendimento rsrs.
Abração cara!
GOSTEI 0
Luiz Eduardo
05/11/2012
Tenho um modelo bem complexo (para add vários anexos) mas está com Skin, form herdado, etc.
Salvei a imagem aqui: https://dl.dropbox.com/u/35181834/Delphi/TelaEnvioEmail.jpg
Fonte (apenas .pas) aqui: https://dl.dropbox.com/u/35181834/Delphi/PasEnvioEmail.txt
Espero ter ajudado ;)
Salvei a imagem aqui: https://dl.dropbox.com/u/35181834/Delphi/TelaEnvioEmail.jpg
Fonte (apenas .pas) aqui: https://dl.dropbox.com/u/35181834/Delphi/PasEnvioEmail.txt
Espero ter ajudado ;)
Mas Powerlog, este código que eu sugeri acima também adiciona vários anexos, basta apenas ir adicionando
TIdAttachment.Create(IdMessage1.MessageParts, 'C:\Windows\System32\arquivo + ponto + extensão');
uma abaixo do outro tá ligado? testa aê que você ver!! é um trecho de código bem simples, funcional e de fácil entendimento rsrs.
Abração cara!
GOSTEI 0
Edilcimar
05/11/2012
desculpe mas o código não funciona, eu tenho este aqui que até algum tempo atrás funcionava
IdSMTP1.AuthenticationType := atLogin;
IdSMTP1.Host := Smtp; // buscado no banco de dados
IdSMTP1.Username := Email1; // buscado no banco de dados
IdSMTP1.Password := Senha; // buscado no banco de dados
If not IdSMTP1.Connected then
IdSMTP1.Connect;
IdMessage1.Clear;
IdMessage1.From.Text := Email1;
IdMessage1.Recipients.EMailAddresses := Email2[I]; // buscado no banco de dados
IdMessage1.Subject := 'Laudo de ' + Animal[I];
IdMessage1.Body.Text := 'Resultado de Laudo';
TIdAttachment.Create(IdMessage1.MessageParts, TFileName('PDF\'+IntToStr(NumLaudo)+'.pdf'));
IdMessage1.Date := StrToDateTime(FormatDateTime('DD/MM/YYYY HH:MM:SS',Now));
IdSMTP1.Send(IdMessage1); - - - - aqui dá erro -> Project raised exception class EIdProtocolReplay error with
message '5.7.0 Must issue a STARTTLS command first. q22sm13975486anh.18'. Process stoped, etc, isto usando a porta 587, se utilizar a porta 25 dá erro de socket
IdSMTP1.AuthenticationType := atLogin;
IdSMTP1.Host := Smtp; // buscado no banco de dados
IdSMTP1.Username := Email1; // buscado no banco de dados
IdSMTP1.Password := Senha; // buscado no banco de dados
If not IdSMTP1.Connected then
IdSMTP1.Connect;
IdMessage1.Clear;
IdMessage1.From.Text := Email1;
IdMessage1.Recipients.EMailAddresses := Email2[I]; // buscado no banco de dados
IdMessage1.Subject := 'Laudo de ' + Animal[I];
IdMessage1.Body.Text := 'Resultado de Laudo';
TIdAttachment.Create(IdMessage1.MessageParts, TFileName('PDF\'+IntToStr(NumLaudo)+'.pdf'));
IdMessage1.Date := StrToDateTime(FormatDateTime('DD/MM/YYYY HH:MM:SS',Now));
IdSMTP1.Send(IdMessage1); - - - - aqui dá erro -> Project raised exception class EIdProtocolReplay error with
message '5.7.0 Must issue a STARTTLS command first. q22sm13975486anh.18'. Process stoped, etc, isto usando a porta 587, se utilizar a porta 25 dá erro de socket
GOSTEI 0
Edilcimar
05/11/2012
ninguém se arrisca a responder?
GOSTEI 0
Edilcimar
05/11/2012
é gmail aqui, você sabe o que significa aquele erro?
GOSTEI 0
Claudia Nogueira
05/11/2012
Sim, é por causa da conexão segura.
Tem que usar o componente TIdSSLIOHandlerSocket.
Eu digitei o nome do componente errado, o certo é o TIdSSLIOHandlerSocket.
Digitei a resposta de cabeça e tinha uns erros de digitação, vou postar novamente.
Em IOHandler do IdSMTP1 você liga o componente TIdSSLIOHandlerSocket.
O código pro gmail fica assim:
Se der algum erro, pode ser a versão das dlls libeay32.dll e ssleay32.ddl.
Aí me avisa que eu te mando.
Tem que usar o componente TIdSSLIOHandlerSocket.
Eu digitei o nome do componente errado, o certo é o TIdSSLIOHandlerSocket.
Digitei a resposta de cabeça e tinha uns erros de digitação, vou postar novamente.
Em IOHandler do IdSMTP1 você liga o componente TIdSSLIOHandlerSocket.
O código pro gmail fica assim:
IdMessage1.Clear;
IdMessage1.From.Text := Email1;
IdMessage1.Recipients.EMailAddresses := Email2[I]; // buscado no banco de dados
IdMessage1.Subject := 'Laudo de ' + Animal[I];
IdMessage1.Body.Text := 'Resultado de Laudo';
TIdAttachment.Create(IdMessage1.MessageParts, TFileName('PDF\'+IntToStr(NumLaudo)+'.pdf'));
IdMessage1.Date := StrToDateTime(FormatDateTime('DD/MM/YYYY HH:MM:SS',Now));
IdSMTP1.AuthenticationType := atLogin;
//Se for gmail
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 465;
IdSMTP1.Password := '*%wr2LcTtGMe';
IdSMTP1.Username := 'claudiadnh@gmail.com';
//
IdSMTP1.Connect;
IdSMTP1.Authenticate;
IdSMTP1.Send(IdMessage1);
Se der algum erro, pode ser a versão das dlls libeay32.dll e ssleay32.ddl.
Aí me avisa que eu te mando.
GOSTEI 1
Edilcimar
05/11/2012
Este componente não tem em nenhuma paleta indy
GOSTEI 0
Claudia Nogueira
05/11/2012
Está na paleta Indy I/O Handlers.
É o último da paleta, com um símbolo de um cadeado.
Meu software é feito com Delphi 7 também.
Acabei de testar.
É o último da paleta, com um símbolo de um cadeado.
Meu software é feito com Delphi 7 também.
Acabei de testar.
Este componente não tem em nenhuma paleta indy
GOSTEI 1
Edilcimar
05/11/2012
---------------------------
Project LabClin.exe raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process stopped. Use Step or Run to continue.
Project LabClin.exe raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process stopped. Use Step or Run to continue.
GOSTEI 1
Claudia Nogueira
05/11/2012
Isso é a versão das dlls.
Passa seu e-mail pra eu te mandar.
Passa seu e-mail pra eu te mandar.
---------------------------
Project LabClin.exe raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process stopped. Use Step or Run to continue.
Project LabClin.exe raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process stopped. Use Step or Run to continue.
GOSTEI 0
Edilcimar
05/11/2012
edilcimar@gmail.com
GOSTEI 0
Claudia Nogueira
05/11/2012
Foi.
edilcimar@gmail.com
GOSTEI 0
Edilcimar
05/11/2012
obrigado, usei mas o erro continua, apenas foi modificado
GOSTEI 0
Edilcimar
05/11/2012
obrigado, aparentemente funcionou, mandei um email para você de dentro do programa
GOSTEI 0
Claudia Nogueira
05/11/2012
Ok. Chegaram os e-mails.
obrigado, aparentemente funcionou, mandei um email para você de dentro do programa
GOSTEI 0
Eduardo Mendonça
05/11/2012
oi!
Eu queria saber O por que meu código não aparece esse :
quando eu Coloco ai eu não consigo enviar e-mail do Gmail mais de qualquer outro eu envio queria ver o que devo fazer?
Uso Delphi 7
Eu queria saber O por que meu código não aparece esse :
IdSMTP1.AuthenticationType:=atLogin;
quando eu Coloco
IdSMTP1.AuthType:=atDefault;
Uso Delphi 7
GOSTEI 0
Frederico Brigatte***
05/11/2012
Oi Claudia, estou precisando falar com vc. Aliás, fui baixar o exemplo e esta quebrado o link.
GOSTEI 0
Fernando Tremonti
05/11/2012
pode mandar pra mim também?
fernando_tremonti@hotmail.com
fernando_tremonti@hotmail.com
GOSTEI 0
Fernando Tremonti
05/11/2012
me encaminha?
fernando_tremonti@hotmail.com
fernando_tremonti@hotmail.com
GOSTEI 0