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 

Código para enviar e-mail com anexos, ajuda !!

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


Registrado: Sábado, 24 de Mai de 2014
Mensagens: 95

MensagemEnviada: Sex Jan 23, 2015 4:08 pm    Assunto: Código para enviar e-mail com anexos, ajuda !! Responder com Citação

Olá amigos, sou inciante em Delphi e preciso finalizar meu programinha, tenho que começar do "0" mesmo. To tentando montar um código com as informações do meu form e não consigo, sempre dar algum erro, já montei uns 15 programas e nada. Alguém poderia montar esse código para mim, por favor??

No meu Form só tenho:
1- MaskEdit1 >> (para colocar CNPJ)
1- Edit2 >> ( para colocar o Nome da Filial)
1- Edit6 >> ( para colocar o e-mail do DESTINATÁRIO )
1- Edit1 >> ( para colocar 1 anexo )
1- Edit4 >> ( para colocar 2 anexo )
1- Edit5 >> ( para colocar 3 anexo )
1- Button1 >> ( para enviar o e-mail com os anexos e os dados do CNPJ e nome da filial para o Destinatário )

Criei um e-mail no Gmail ( como REMETENTE ), pois soube que é o melhor para trabalhar, só para ser um remetente FIXO, para qualquer destinatário.

O último que tentei pensando ser o mais simples, foi esse erro e abaixo o código: (sem ligar aos dados acima, primeiro quero enviar depois ligar aos Edits e Maskedit)

Debugger Exception Notification
Project email.exe raised excepction class EIdOSSLConnectError with message ‘Error connecting with SSL.’. Process stopped. Use Step or Run to continue.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL,
IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP;

type
TForm1 = class(TForm)
SMTP: TIdSMTP;
MSG: TIdMessage;
SSLSocket: TIdSSLIOHandlerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
with SMTP do
begin
AuthenticationType := atLogin;
Host := 'smtp.gmail.com';
IOHandler := SSLSocket;
Password := '******';
Port := 465;
Username := '***********@gmail.com'; //não esqueça o @gmail.com!!
end;

SSLSocket.SSLOptions.Method := sslvSSLv2;
SSLSocket.SSLOptions.Mode := sslmClient;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with MSG do
begin
Body.Add('TESTE ENVIO');
From.Address := '***********@gmail.com'; //opcional
From.Name := 'VLADEMIR'; //opcional
Recipients.Add;
Recipients.Items[0].Address := '*********@hotmail.com';
Recipients.Items[0].Name := 'vlade'; //opcional
Subject := 'teste envio de e-mail';
end;

try
SMTP.Connect();
SMTP.Send(MSG);
SMTP.Disconnect;
except
ShowMessage('Falha no envio!');
exit;
end;
ShowMessage('Mensagem enviada com sucesso!');

end;

end.

Tambem coloquei as 2 dll > libeay32.dll e ssleay32.dll na pasta do progara e na pasta C:\Windows\System32

Alguém pode ajudar?

Att
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Sáb Jan 24, 2015 2:25 pm    Assunto: Responder com Citação

Código:

uses
  IdSMTP, IdMessage, IdSSLOpenSSL;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  // objetos necessários para o funcionamento
  IdSSLIOHandlerSocket: TIdSSLIOHandlerSocket;
  IdSMTP: TIdSMTP;
  IdMessage: TIdMessage;
  CaminhoAnexo: string;
begin
  // instanciação dos objetos
  IdSSLIOHandlerSocket := TIdSSLIOHandlerSocket.Create(Self);
  IdSMTP := TIdSMTP.Create(Self);
  IdMessage := TIdMessage.Create(Self);
 
  try
    // Configuração do SSL
    IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
 
    // Configuração do SMTP
    IdSMTP.IOHandler := IdSSLIOHandlerSocket;
    IdSMTP.AuthenticationType := atLogin;
    IdSMTP.Port := 465;
    IdSMTP.Host := 'smtp.gmail.com';
    IdSMTP.Username := 'usuario';
    IdSMTP.Password := 'senha';
 
    // Tentativa de conexão e autenticação
    try
      IdSMTP.Connect;
      IdSMTP.Authenticate;
    except
      on E:Exception do
      begin
        MessageDlg('Erro na conexão e/ou autenticação: ' +
                    E.Message, mtWarning, [mbOK], 0);
        Exit;
      end;
    end;
 
    // Configuração da mensagem
    IdMessage.From.Address := 'meu.email@gmail.com';
    IdMessage.From.Name := 'Meu Nome';
    IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
    IdMessage.Recipients.EMailAddresses := 'destinatario@email.com';
    IdMessage.Subject := 'Assunto do e-mail';
    IdMessage.Body.Text := 'Corpo do e-mail';
 
    // Anexo da mensagem (opcional)
    CaminhoAnexo := 'C:\Anexo.txt';
    if FileExists(CaminhoAnexo) then
      TIdAttachment.Create(IdMessage.MessageParts, CaminhoAnexo);
 
    // Envio da mensagem
    try
      IdSMTP.Send(IdMessage);
      MessageDlg('Mensagem enviada com sucesso.', mtInformation, [mbOK], 0);
    except
      On E:Exception do
        MessageDlg('Erro ao enviar a mensagem: ' +
                    E.Message, mtWarning, [mbOK], 0);
    end;
  finally
    // liberação dos objetos da memória
    FreeAndNil(IdMessage);
    FreeAndNil(IdSSLIOHandlerSocket);
    FreeAndNil(IdSMTP);
  end;
end;


créditos/fonte:
http://www.subrotina.com.br/delphi-envio-de-e-mail-com-componentes-indy/
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
RegisSantos
Novato
Novato


Registrado: Domingo, 13 de Mai de 2012
Mensagens: 78

MensagemEnviada: Sáb Jan 24, 2015 5:08 pm    Assunto: Responder com Citação

A um tempo atrás fiz um projeto parecido, porém o programa extraia as dll's utilizando resource, assim conseguia fazer o envio.

você vai precisar utilizar os seguintes componentes:

IdSSLIOHandlerSocket
IdSMTP
IdMessage

Segue a source de um enviador feito por um gringo.
(A SOURCE JÁ CONTÉM AS DLL's)

http://puu.sh/eYfLR/68f5c9bbd3.rar
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
VlademirLemos
Novato
Novato


Registrado: Sábado, 24 de Mai de 2014
Mensagens: 95

MensagemEnviada: Seg Jan 26, 2015 12:26 pm    Assunto: Responder com Citação

Olá amigos strak2012 e RegisSantos, eu já tentei fazer nesse mesmo tópico, fiz tudo certinho e deu erros.
Agora eu baixei um programa pronto com fontes, só fiz acrescentar meu dados e eu erros, porém acho que serão mais fáceis de resolver.
Segue o código e os erros para analisarmos:

O ERRO:

Socket Error #11001
Host not found.

O CÓDIGO

unit UEmail;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdMessage, Buttons, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, IdPOP3;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
EdtPara: TEdit;
EdtAssunto: TEdit;
MemMensagem: TMemo;
LbxAnexos: TListBox;
Label4: TLabel;
ButAnexar: TBitBtn;
ButEnviar: TBitBtn;
ButFechar: TBitBtn;
ODAnexos: TOpenDialog;
IdMessage: TIdMessage;
IdSMTP: TIdSMTP;
IdPOP3: TIdPOP3;
procedure ButAnexarClick(Sender: TObject);
procedure ButFecharClick(Sender: TObject);
procedure ButEnviarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButAnexarClick(Sender: TObject);
begin
if odAnexos.Execute then
lbxAnexos.Items.Add(odAnexos.FileName);
end;

procedure TForm1.ButFecharClick(Sender: TObject);
begin
close;
end;

procedure TForm1.ButEnviarClick(Sender: TObject);
var Anexo : Integer;
begin
// Dados da Mensagem
IdMessage.Recipients.EMailAddresses := EdtPara.Text; // email do Destinatário
IdMessage.Subject := EdtAssunto.Text; // assunto
IdMessage.Body := MemMensagem.Lines; // texto da mensagem
IdMessage.From.Address := '*********@gmail.com'; // Email do Remetente
IdMessage.From.Name := '**************'; // Nome do Remetente, que aparecerá qdo chegar.

//Manipulando os Anexos
for Anexo := 0 to lbxAnexos.Items.Count-1 do
TIdAttachment.Create(IdMessage.MessageParts, TFileName(lbxAnexos.Items.Strings[Anexo]));

// Configurações POP3
// !! -- É aqui onde a maioria dos códigos falham. Em alguns provedores é necessário receber mensagens
// !! -- para depois enviar. Não basta, portanto, só o SMTP. É necessário colocar o componente IdPOP3
// !! -- da paleta Indy Clients e configurá-lo.

IdPOP3.Host := 'pop3.gmail.com.br'; // servidor POP3 do seu provedor
IdPOP3.Username := '***********'; // seu login de e-mail
IdPOP3.Password := '***********'; // sua senha -- Recomenda-se usar uma Edit com máscara!!
IdPOP3.Connect;

IdSMTP.Host := 'smtp.gmail.com'; // servidor SMTP do seu provedor
IdSMTP.AuthenticationType := atLogin {atLogin}; // sem autenticação (já foi feita no POP3)
// !! -- caso seu provedor não use POP3, apague as configurações POP3, mude a autenticação para atLogin
// !! -- e habilite as 2 linhas abaixo:
//IdSMTP.Username := 'fulano'; // seu login de e-mail
//IdSMTP.Password := 'senha_do_fulano'; // sua senha -- Recomenda-se usar uma Edit com máscara!!

IdSMTP.Connect;
try
IdSMTP.Send(IdMessage);
finally
IdSMTP.Disconnect;
end;
Application.MessageBox('Email enviado com sucesso!', 'Confirmação',MB_ICONINFORMATION + MB_OK);

end;

end.

OBS: nesse código fonte, só fiz alterar meu e-mail, usuário e minha senha no campos " ***********"

tentei enviar email para hotmail e gmail e nada !!!

dados do form:
object Label1: TLabel Caption = 'Para:'

object Label2: TLabel Caption = 'Assunto:'

object Label3: TLabel Caption = 'Mensagem:'

object Label4: TLabel Caption = 'Anexos:'

object EdtPara: TEdit

object EdtAssunto: TEdit

object MemMensagem: TMemo

object LbxAnexos: TListBox

object ButAnexar: TBitBtn Caption = 'Anexar...'

object ButEnviar: TBitBtn Caption = 'Enviar'

object ButFechar: TBitBtn Caption = 'Fechar'

object ODAnexos: TOpenDialog

Att
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