ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Envio de e-mail indy 10

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
haroldogb
Novato
Novato


Registrado: Quinta-Feira, 19 de Fevereiro de 2009
Mensagens: 5
Localização: Ribeirão Preto

MensagemEnviada: Ter Mar 10, 2015 7:52 am    Assunto: Envio de e-mail indy 10 Responder com Citação

Pessoal, bom dia!

Estou tentando enviar um e-mail que utiliza uma imagem como assinatura, porem está imagem não aparece. Abaixo meu código para analise.

Desde já, agradeço...

procedure Enviar_E_Mail(A_IdSMTP: TIdSMTP; sUserEmail, sPassWord, sHost, sPorta, sAssunto,
sFileCorpo: string; bTLS, bAuth: boolean; sDestinatarios, sCC, sCCo,
sTextoCorpo, sAnexo: TStringList; bCopiaParaOEmitente: boolean);
var
i : Smallint;
A_IdSSLIOHandler : TIdSSLIOHandlerSocketOpenSSL;
A_IdMessage : TIdMessage;
anexo :TIdAttachmentFile;
A_Texto : TStringList;
s : string;
begin
A_IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create();
A_IdMessage := TIdMessage.Create();

with A_IdSMTP do
begin
Disconnect;
ConnectTimeout := 10000;
ReadTimeout := 10000;
Host := sHost;
Port := StrToInt(sPorta);
Username := sUserEmail;
Password := sPassWord;

if bAuth then
begin
AuthType := satDefault
end
else
begin
AuthType := satNone;
end;

if bTLS then
begin
A_IdSSLIOHandler.SSLOptions.Method := sslvTLSv1;
A_IdSSLIOHandler.SSLOptions.Mode := sslmClient;
A_IdSSLIOHandler.PassThrough := true;
IOHandler := A_IdSSLIOHandler;
//UseTLS := utUseImplicitTLS;
UseTLS := utUseExplicitTLS;
end
else
begin
IOHandler := nil;
UseTLS := utNoTLSSupport;
end;
end;

with A_IdMessage do
begin
Clear;
Body.Clear;
Recipients.Clear;
From.Address := sUserEmail;
From.Name := VS_NomeUsuLogado;
ReceiptRecipient.Address := sUserEmail;
Subject := sAssunto;
ContentType := 'multipart/mixed';
end;

s := '';

for i := 0 to sDestinatarios.Count - 1 do
begin
s := s + sDestinatarios[i];

If i < sDestinatarios.Count-1 then
begin
s := s + ';';
end;
end;

if bCopiaParaOEmitente then
begin
s := s + ';' + sUserEmail;
end;

A_IdMessage.Recipients.EMailAddresses := s;

if sCC <> nil then
begin
s := '';
for i := 0 to sCC.Count - 1 do
begin
s := s + sCC[i];

if i < sCC.Count-1 then
begin
s := s + ';';
end;
end;

A_IdMessage.CCList.EMailAddresses := s;
end;

if sCCo <> nil then
begin
s := '';
for i := 0 to sCCo.Count - 1 do
begin
s := s + sCCo[i];

if i < sCCo.Count-1 then
begin
s := s + ';';
end;
end;

A_IdMessage.BccList.EMailAddresses := s;
end;

if ((Trim(sFileCorpo) <> '') and FileExists(sFileCorpo)) or
(Trim(sTextoCorpo.Text) <> '') then
begin
with TIdText.Create(A_IdMessage.MessageParts) do
begin
ContentType := 'text/html';
ContentTransfer := '7bit';
CharSet := 'ISO-8859-1';
Body.Append('<html><head>');
Body.Append('<meta>');
Body.Append('</head><body>');
Body.Append('<table>');
Body.Append('<tr>');
Body.Append('<td>');

for i := 0 to sTextoCorpo.Count - 1 do
begin
Body.Append(sTextoCorpo[i] + '<br>');
end;

Body.Append('</td>');
Body.Append('</tr>');

Body.Append('<tr>');
Body.Append('<td>');

if (Trim(sFileCorpo) <> '') and FileExists(sFileCorpo) then
begin
Body.Append('<img>');
end;

Body.Append('</td>');
Body.Append('</tr>');
Body.Append('</table>');
Body.Append('</body></html>');
end;

if ((Trim(sFileCorpo) <> '') and FileExists(sFileCorpo)) then
begin
anexo := TIdAttachmentFile.Create(A_IdMessage.MessageParts,sFileCorpo);
anexo.ContentType := 'image/jpeg';
anexo.ContentDisposition := 'inline';
anexo.Headers.Add('Content-ID: <assinatura>');
end;
end;

if sAnexo <> Nil then
begin
for i := 0 to sAnexo.Count - 1 do
begin
if FileExists(TFileName(sAnexo[i])) then
begin
with TIdAttachmentFile.Create(A_IdMessage.MessageParts, TFileName(sAnexo[i])) do
begin
//ContentType := 'application/octet-stream';
ContentDisposition := 'attachment';
ContentTransfer := 'base64';
end;
end;
end;
end;

try
A_IdSMTP.Connect;
A_IdSMTP.Authenticate;
A_IdSMTP.Send(A_IdMessage);
A_IdSMTP.Disconnect;
except
On E:Exception do
begin
A_IdSMTP.Disconnect;
end;
end;

FreeAndNil(A_IdMessage);
FreeAndNil(A_IdSSLIOHandler);


{Os arquivos que devem acompanhar a aplicação são:
libssl32.dll
ssleay32.dll
libeay32.dll : esse não tem a ver com a função, mas a unit tem coisas do ACBr e portanto...
openssl.exe : acho que esse ajuda um pouco na "mágica" de funcionar com o gmail

Segue link para o openssl.exe: http://terraskilll.net23.net/openssl.zip

Geralmente os deixamos na pasta do executável, não em System32.

Para o caso do Gmail, geralmente marcamos as opções TLS e Autenticar. Há também uma alteração para o hotmail, obrigando a usar o SSL. Testamos com alguns dos principais e-mails (uol, terra, gmail, yahoo, bol) e até com servidores particulares (de alguns clientes). Até o momento, tem funcionado bem.}
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1030
Localização: Cianorte-PR

MensagemEnviada: Ter Mar 10, 2015 3:10 pm    Assunto: Responder com Citação

e ai haroldogb blz?
estou desenvelvendo um projeto para receber e-mail, mas devo admitir que estou com serias dificuldades.
ja tentei com o Delphi2010 e o XE7, coloquei as dll na pasta do executavel, mas sempre me da um erro de "Could not load SSL Library"

versao Indy Delphi 2010 é a 10.5.5 e a do XE7 é 10.6.0.5169
segue o codigo que estou usando:
Código:

Var
  lMsg: TIdMessage;
  i: Integer;
  iMsgs: Integer;
begin
  with POP3 do
  begin
    IOHandler := IO_OpenSSL;
    AutoLogin := True;
    Host := host;
    Username :=UserName;
    UseTLS := utUseImplicitTLS;
    Password := Password;
    Port := 110;
  end;

  //TIdSSLIOHandlerSocketOpenSSL
  with IO_OpenSSL do
  begin
    Destination := meuhost:110;
    Host := meuhost;
    Port := 110;
    SSLOptions.Method := sslvSSLv23;
    SSLOptions.Mode := sslmClient;
  end;


  if not POP3.Connected then
    POP3.Connect;

 
  if not POP3.Connected then
  Begin
    ShowMessage('Conexão não realizada!');
    Exit;
  End;


  iMsgs := POP3.CheckMessages;
  lMsg := TIdMessage.Create;


  POP3.Retrieve(1, lMsg);

  for i := 1 to iMsgs do
  begin
    Memo1.Lines.Add(lMsg.Body.Text);
  end;
    lMsg.Free;
end;

Oque sera que esta errado?
realmente nao estou entendo onde esta meu erro.
teria como me ajudar?
Obrigado.
Anderson.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
haroldogb
Novato
Novato


Registrado: Quinta-Feira, 19 de Fevereiro de 2009
Mensagens: 5
Localização: Ribeirão Preto

MensagemEnviada: Qui Mar 12, 2015 10:16 am    Assunto: Responder com Citação

Anderson, bom dia!

Se não me falha a memória este erro ocorre porque os arquivos: libeay32.dll, openssl.exe e ssleay32.dll não estão na mesma versão.
Quando comecei a desenvolver minha função se envio, eu peguei estes arquivos de uma pasta do componente ACBr.

Aproveitando eu consegui resolver o meu problema, segue anexo a procedure atualizada:

procedure Enviar_E_Mail(A_IdSMTP: TIdSMTP; sUserEmail, sPassWord, sHost, sPorta, sAssunto,
sFileCorpo: string; bTLS, bAuth: boolean; sDestinatarios, sCC, sCCo,
sTextoCorpo, sAnexo: TStringList; bCopiaParaOEmitente: boolean);
var
i : Smallint;
A_IdSSLIOHandler : TIdSSLIOHandlerSocketOpenSSL;
A_IdMessage : TIdMessage;
bldr: TIdMessageBuilderHtml;
s : string;
begin
A_IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Nil);
A_IdMessage := TIdMessage.Create(Nil);

with A_IdSMTP do
begin
Disconnect;
ConnectTimeout := 10000;
ReadTimeout := 10000;
Host := sHost;
Port := StrToInt(sPorta);
Username := sUserEmail;
Password := sPassWord;

if bAuth then
begin
AuthType := satDefault
end
else
begin
AuthType := satNone;
end;

if bTLS then
begin
A_IdSSLIOHandler.SSLOptions.Method := sslvTLSv1;
A_IdSSLIOHandler.SSLOptions.Mode := sslmClient;
A_IdSSLIOHandler.PassThrough := true;
IOHandler := A_IdSSLIOHandler;
//UseTLS := utUseImplicitTLS;
UseTLS := utUseExplicitTLS;
end
else
begin
IOHandler := nil;
UseTLS := utNoTLSSupport;
end;
end;

with A_IdMessage do
begin
Clear;
Body.Clear;
Recipients.Clear;
From.Address := sUserEmail;
From.Name := VS_NomeUsuLogado;
ReceiptRecipient.Address := sUserEmail;
Subject := sAssunto;
ContentType := 'multipart/mixed';
end;

s := '';

for i := 0 to sDestinatarios.Count - 1 do
begin
s := s + sDestinatarios[i];

If i < sDestinatarios.Count-1 then
begin
s := s + ';';
end;
end;

if bCopiaParaOEmitente then
begin
s := s + ';' + sUserEmail;
end;

A_IdMessage.Recipients.EMailAddresses := s;

if sCC <> nil then
begin
s := '';
for i := 0 to sCC.Count - 1 do
begin
s := s + sCC[i];

if i < sCC.Count-1 then
begin
s := s + ';';
end;
end;

A_IdMessage.CCList.EMailAddresses := s;
end;

if sCCo <> nil then
begin
s := '';
for i := 0 to sCCo.Count - 1 do
begin
s := s + sCCo[i];

if i < sCCo.Count-1 then
begin
s := s + ';';
end;
end;

A_IdMessage.BccList.EMailAddresses := s;
end;

if ((Trim(sFileCorpo) <> '') and FileExists(sFileCorpo)) or
(Trim(sTextoCorpo.Text) <> '') then
begin
bldr := TIdMessageBuilderHtml.Create;
bldr.HtmlCharSet := 'ISO-8859-1';
try
bldr.Html.Add('<html>');
bldr.Html.Add('<head>');
bldr.Html.Add('<meta>');
bldr.Html.Add('</head>');
bldr.Html.Add('<body>');
bldr.Html.Add('<table>');
bldr.Html.Add('<tr>');
bldr.Html.Add('<td>');

for i := 0 to sTextoCorpo.Count - 1 do
begin
bldr.Html.Add(sTextoCorpo[i] + '<br>');
end;

bldr.Html.Add('</td>');
bldr.Html.Add('</tr>');

bldr.Html.Add('<tr>');
bldr.Html.Add('<td>');

if (Trim(sFileCorpo) <> '') and FileExists(sFileCorpo) then
begin
bldr.Html.Add('<img>');
end;

bldr.Html.Add('</td>');
bldr.Html.Add('</tr>');
bldr.Html.Add('</table>');

bldr.Html.Add('</body>');
bldr.Html.Add('</html>');

if (Trim(sFileCorpo) <> '') and FileExists(sFileCorpo) then
begin
bldr.HtmlFiles.Add(sFileCorpo, 'assinatura');
end;

bldr.FillMessage(A_IdMessage);
finally
freeandnil(bldr);
end;
end;

if sAnexo <> Nil then
begin
for i := 0 to sAnexo.Count - 1 do
begin
if FileExists(TFileName(sAnexo[i])) then
begin
with TIdAttachmentFile.Create(A_IdMessage.MessageParts, TFileName(sAnexo[i])) do
begin
ContentDisposition := 'attachment';
ContentTransfer := 'base64';
end;
end;
end;
end;

try
A_IdSMTP.Connect;
A_IdSMTP.Authenticate;
A_IdSMTP.Send(A_IdMessage);
A_IdSMTP.Disconnect;

Alerta('M', 'Envio de E-Mail', 'Mensagem enviada com sucesso.', Nil, ['&Ok']);
except
On E:Exception do
begin
Alerta('E', 'Envio de E-Mail', '', E, ['&Ok']);
A_IdSMTP.Disconnect;
end;
end;

FreeAndNil(A_IdMessage);
FreeAndNil(A_IdSSLIOHandler);


{Os arquivos que devem acompanhar a aplicação são:
libssl32.dll
ssleay32.dll
libeay32.dll : esse não tem a ver com a função, mas a unit tem coisas do ACBr e portanto...
openssl.exe : acho que esse ajuda um pouco na "mágica" de funcionar com o gmail

Segue link para o openssl.exe: http://terraskilll.net23.net/openssl.zip

Geralmente os deixamos na pasta do executável, não em System32.

Para o caso do Gmail, geralmente marcamos as opções TLS e Autenticar. Há também uma alteração para o hotmail, obrigando a usar o SSL. Testamos com alguns dos principais e-mails (uol, terra, gmail, yahoo, bol) e até com servidores particulares (de alguns clientes). Até o momento, tem funcionado bem.}
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1030
Localização: Cianorte-PR

MensagemEnviada: Qui Mar 12, 2015 5:40 pm    Assunto: Responder com Citação

haroldogb,
consegui me conectar no servidor, recebo o cabeçalho, assunto e mitente, mas o corpo do email não.
andei vasculhando em alguns sites e encontrei varias funções para conectar ao servidor, mas com nenhuma delas consegui visualizar o corpo do email.
segue o ultimo código
Código:

procedure TForm1.Button4Click(Sender: TObject);
var
  MsgCount : Integer;
  i        : Integer;
  FMailMessage :  TIdMessage;
begin
  IdPOP33.Host      := 'pop3.meuhost.com'; //Setting the HostName;
  IdPOP33.Username  := 'anderson;//Setting UserName;
  IdPOP33.Password  := '***********';//Setting Password;
  IdPOP33.Port      := 110;//Setting Port;

  try
    IdPOP33.Connect();
   //Getting the number of the messages that server has.
    MsgCount := IdPOP33.CheckMessages;
    for i:= 0 to Pred(MsgCount) do
    begin
      try
        FMailMessage := TIdMessage.Create(nil);
        IdPOP33.Retrieve(i,FMailMessage);
        Memo1.Lines.Add('=================================================');
        Memo1.Lines.Add(FMailMessage.From.Address);
        Memo1.Lines.Add(FMailMessage.Recipients.EMailAddresses);
        Memo1.Lines.Add(FMailMessage.Subject);
        Memo1.Lines.Add(FMailMessage.Sender.Address);
        Memo1.Lines.Add(FMailMessage.Body.Text);
        Memo1.Lines.Add('=================================================');
      finally
        FMailMessage.Free;
      end;
      Application.ProcessMessages;
    end;
  finally
    IdPOP33.Disconnect;
  end;
end;

Éssa linha não deveria trazer o corpo Memo1.Lines.Add(FMailMessage.Body.Text);?
OBS: já fiz tbm uma StringList e salvei um TXT, mas nem assim me retornou o corpo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
haroldogb
Novato
Novato


Registrado: Quinta-Feira, 19 de Fevereiro de 2009
Mensagens: 5
Localização: Ribeirão Preto

MensagemEnviada: Sáb Mar 14, 2015 8:59 am    Assunto: Responder com Citação

Andersom, bom dia !

Olha eub nunca fiz a função que recebe e-mail, mas tenho uma dica, na linha:

Memo1.Lines.Add(FMailMessage.Body.Text);

Será que vc não deveria adicionar linha a linha, tipo:

for _x_ := 0 to FMailMessage.Body.count do
begin
Memo1.Lines.Add(FMailMessage.Body[_x_].text;
end;

Não sei se Body.count e Body[_x_].text existe, mas alguma coisa neste sentido.

Um abraço

Haroldo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Delhmc
Novato
Novato


Registrado: Quinta-Feira, 28 de Mai de 2015
Mensagens: 1

MensagemEnviada: Qui Mai 28, 2015 2:49 am    Assunto: Nova segurança do Gmail x "Aplicativos menos seguros" Responder com Citação

Boa noite,

Galera, apenas ressaltando: O Gmail recentemente implementou uma segurança a mais na conta de email, de modo que aplicativos de terceiros não conseguem conectar com os dados da conta sem o consentimento do usuário dono da conta.

Para passar a usar uma conta do Gmail tendo aplicativos como intermediários, fazendo conexões/autenticações, é preciso dar permissão aqui: https://www.google.com/settings/security/lesssecureapps

Já fizeram esta configuração?

Também tive estes dias a mensagem de erro "Could not load SSL Library", mas tem relação com versões das DLLs libeay32.dll e ssleay32.dll. Com as versões de 12/08/2002 o erro não ocorre, já com a versão de 08/08/2014 a mensagem de erro ocorre.

De qualquer forma, mesmo com esta exceção levantada do SSL usando as versões destas DLLs de 08/08/2014 (v1.0.1.9) consegui anexar e enviar email normalmente via conta Gmail. Uso Delphi7 + Indy 10 (v10.0.52)...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB