Novamente E-mail com Delphi 7

Delphi

05/11/2012

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
Valnei Reis

Valnei Reis

Curtidas 0

Melhor post

Claudia Nogueira

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

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]
GOSTEI 0
Luiz Eduardo

Luiz Eduardo

05/11/2012

Esse é o que eu uso aqui, e funciona 100%.


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

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 ;)
GOSTEI 0
Luiz Eduardo

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 ;)


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

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 ;)


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

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



GOSTEI 0
Edilcimar

Edilcimar

05/11/2012

ninguém se arrisca a responder?
GOSTEI 0
Edilcimar

Edilcimar

05/11/2012

é gmail aqui, você sabe o que significa aquele erro?
GOSTEI 0
Claudia Nogueira

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:

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

Edilcimar

05/11/2012

Este componente não tem em nenhuma paleta indy
GOSTEI 0
Claudia Nogueira

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.

Este componente não tem em nenhuma paleta indy
GOSTEI 1
Edilcimar

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.
GOSTEI 1
Claudia Nogueira

Claudia Nogueira

05/11/2012

Isso é a versão das dlls.
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.
GOSTEI 0
Edilcimar

Edilcimar

05/11/2012

edilcimar@gmail.com
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

05/11/2012

Foi.

edilcimar@gmail.com
GOSTEI 0
Edilcimar

Edilcimar

05/11/2012

obrigado, usei mas o erro continua, apenas foi modificado
GOSTEI 0
Edilcimar

Edilcimar

05/11/2012

obrigado, aparentemente funcionou, mandei um email para você de dentro do programa
GOSTEI 0
Claudia Nogueira

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

Eduardo Mendonça

05/11/2012

oi!
Eu queria saber O por que meu código não aparece esse :
IdSMTP1.AuthenticationType:=atLogin;

quando eu Coloco
IdSMTP1.AuthType:=atDefault;
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
GOSTEI 0
Frederico Brigatte***

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

Fernando Tremonti

05/11/2012

pode mandar pra mim também?
fernando_tremonti@hotmail.com
GOSTEI 0
Fernando Tremonti

Fernando Tremonti

05/11/2012

me encaminha?

fernando_tremonti@hotmail.com
GOSTEI 0
POSTAR