Fórum Novamente E-mail com Delphi 7 #428051

05/11/2012

0

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

Responder

Post mais votado

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?

Claudia Nogueira

Claudia Nogueira
Responder

Gostei + 1

Mais Posts

05/11/2012

Claudia Nogueira

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]
Responder

Gostei + 0

06/11/2012

Luiz Eduardo

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!
Responder

Gostei + 0

07/11/2012

Powerlog Tecnologia

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

Gostei + 0

08/11/2012

Luiz Eduardo

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!
Responder

Gostei + 0

08/11/2012

Luiz Eduardo

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!
Responder

Gostei + 0

26/11/2012

Edilcimar

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



Responder

Gostei + 0

29/11/2012

Edilcimar

ninguém se arrisca a responder?
Responder

Gostei + 0

29/11/2012

Edilcimar

é gmail aqui, você sabe o que significa aquele erro?
Responder

Gostei + 0

29/11/2012

Claudia Nogueira

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.
Responder

Gostei + 1

29/11/2012

Edilcimar

Este componente não tem em nenhuma paleta indy
Responder

Gostei + 0

29/11/2012

Claudia Nogueira

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
Responder

Gostei + 1

29/11/2012

Edilcimar

---------------------------
Project LabClin.exe raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process stopped. Use Step or Run to continue.
Responder

Gostei + 1

29/11/2012

Claudia Nogueira

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.
Responder

Gostei + 0

29/11/2012

Edilcimar

edilcimar@gmail.com
Responder

Gostei + 0

29/11/2012

Claudia Nogueira

Foi.

edilcimar@gmail.com
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar