Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lívio Bruno

Email - Relatório de envio

Recommended Posts

Olá amigos! Desenvolvi um sistema de envio de emails mas estou com um problema. No "Edit" em que eu digito os destinatários eu posso até colocar mais de um, contanto que eu separe eles por vírgula, até aí tudo bem... agora eu queria que na hora do envio eu pudesse saber se cada email enviado realmente existe no seu respectivo servidor e se existir envia o email e conta(em uma variavel) que foi enviado senão não envia e conta(em outra variavel) que não foi enviado ou seja:

 

for I := 0 to DBGrid_ListadeEmail.SelectedRows.Count-1 do

begin

 

if EmailExiste then

begin

variavel_enviado := variavel_enviado + 1;

EnviaEmail

end else

begin

variavel_nãoenviado := variavel_nãoenviado + 1;

NãoEnvia

Passa para o outro

end;

 

end;

 

 

Lembrando que uso Delphi 2010, IdSMTP, IdSSLIOHandlerSocketOpenSSL1, IdMessage, libeay32.dll e ssleay32.dll. Não preciso Validar o email e sim saber se ele existe. Desde já agradeço.

 

Vai abaixo meu código:

 

procedure TFRM_SEND_MAIL.Image_EnviarClick(Sender: TObject);
begin

// Configurações IdSMTP
with DM.IdSMTP1 do
begin

if DM.TBL_CONF_MAIL.FieldByName('RequerAutenticacao').AsString = 'True' then
begin
AuthType := satDefault; //Login
end else
begin
AuthType := satNone;
end;

Host := DM.TBL_CONF_MAIL.FieldByName('Servidor_SMTP').AsString;
Port := StrToInt(DM.TBL_CONF_MAIL.FieldByName('Porta').AsString);
Username := DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString;
Password := DM.TBL_CONF_MAIL.FieldByName('Senha').AsString;
IOHandler := DM.IdSSLIOHandlerSocketOpenSSL1;
UseTLS := utUseExplicitTLS;
end;

// Configurações IdSSLIOHandlerSocketOpenSSL1
DM.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
DM.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmClient;

// Configuração de Escrita(Negrito)
if (CheckBox_Negrito.Checked = True) then
begin
Memo_OutrasDescricoes.Text := '<b>' + Memo_OutrasDescricoes.Text + '</b>';
end else
begin
Memo_OutrasDescricoes.Text := Memo_OutrasDescricoes.Text;
end;

Screen.Cursor := crHourGlass;

IdMessage1.Clear;
IdMessage1.MessageParts.Clear;

// Codificar MIME para enviar páginas HTML
IdMessage1.ContentTransferEncoding := 'text/html';
IdMessage1.ContentType := 'text/html';
IdMessage1.CharSet := 'ISO-8859-1'; // Nossa linguagem. Aparece acentos.

IdMessage1.From.Address := DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString; // Remetente
IdMessage1.Subject := Edit_Assunto.Text; // Assunto

IdMessage1.Body.Text := Memo_OutrasDescricoes.Text + Memo_Corpo.Text; // Corpo HTML


// Configuração da confirmação de Leitura
if DM.TBL_CONF_MAIL.FieldByName('Conf_Leitura').AsString = 'True' then
begin
IdMessage1.From.Text := DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString; //conta que irá aparecer
IdMessage1.ReceiptRecipient.Text := IdMessage1.From.Text; // Auto Resposta
end else
begin
IdMessage1.From.Text := '';
IdMessage1.ReceiptRecipient.Text := '';
end;

IdMessage1.Recipients.EMailAddresses := Edit_Para.Text; // Destinatário
//IdMessage1.BccList.EMailAddresses := Edit_CCO.Text;
//IdMessage1.CCList.EMailAddresses := Edit_CC.Text;

if not DM.IdSMTP1.Connected = True then
begin
try
DM.IdSMTP1.Connect();
except
StatusBar1.Panels[0].Text := 'Erro na tentativa de conexão.';
Screen.Cursor := crDefault;
DM.IdSMTP1.Disconnect();
Abort;
end;

try
DM.IdSMTP1.Authenticate();
Screen.Cursor := crHourGlass;
except
if DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString = '' then
begin
StatusBar1.Panels[0].Text := 'Erro na autenticação de usuário. Campo "usuário" não pode ficar em branco.';
Screen.Cursor := crDefault;
DM.IdSMTP1.Disconnect();
Abort;
end else

if DM.TBL_CONF_MAIL.FieldByName('Senha').AsString = '' then
begin
StatusBar1.Panels[0].Text := 'Erro na autenticação de senha. Campo "senha" não pode ficar em branco.';
Screen.Cursor := crDefault;
DM.IdSMTP1.Disconnect();
Abort;
end else

begin
StatusBar1.Panels[0].Text := 'Erro na autenticação de usuário ou senha.';
Screen.Cursor := crDefault;
DM.IdSMTP1.Disconnect();
Abort;
end;

end; // except

StatusBar1.Panels[0].Text := 'Autenticação realizada com sucesso!';
Screen.Cursor := crDefault;

end; // if

if DM.IdSMTP1.Connected = True then
begin
DM.IdSMTP1.Send(IdMessage1);
StatusBar1.Panels[0].Text := 'Email enviado com sucesso!';
end;

Application.ProcessMessages;

Screen.Cursor := crDefault;
DM.IdSMTP1.Disconnect();
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

 

Sinceramente desconheço algo desse sentido. A única forma de saber se o e-mail "existe" é aguardar o próprio retorno do idSMTP na hora do envio, e de acordo com o seu retorno tratá-lo de uma maneira que fique apresentável como você deseja.

 

Se encontrar algo, por favor, compartilhe conosco.

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos! Desenvolvi um sistema de envio de emails mas estou com um problema. No "Edit" em que eu digito os destinatários eu posso até colocar mais de um, contanto que eu separe eles por vírgula, até aí tudo bem... agora eu queria que na hora do envio eu pudesse saber se cada email enviado realmente existe no seu respectivo servidor e se existir envia o email e conta(em uma variavel) que foi enviado senão não envia e conta(em outra variavel) que não foi enviado ou seja:

 

for I := 0 to DBGrid_ListadeEmail.SelectedRows.Count-1 do

begin

 

if EmailExiste then

begin

variavel_enviado := variavel_enviado + 1;

EnviaEmail

end else

begin

variavel_nãoenviado := variavel_nãoenviado + 1;

NãoEnvia

Passa para o outro

end;

 

end;

 

 

Lembrando que uso Delphi 2010, IdSMTP, IdSSLIOHandlerSocketOpenSSL1, IdMessage, libeay32.dll e ssleay32.dll. Não preciso Validar o email e sim saber se ele existe. Desde já agradeço.

 

Vai abaixo meu código:

 

procedure TFRM_SEND_MAIL.Image_EnviarClick(Sender: TObject);

begin

 

// Configurações IdSMTP

with DM.IdSMTP1 do

begin

 

if DM.TBL_CONF_MAIL.FieldByName('RequerAutenticacao').AsString = 'True' then

begin

AuthType := satDefault; //Login

end else

begin

AuthType := satNone;

end;

 

Host := DM.TBL_CONF_MAIL.FieldByName('Servidor_SMTP').AsString;

Port := StrToInt(DM.TBL_CONF_MAIL.FieldByName('Porta').AsString);

Username := DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString;

Password := DM.TBL_CONF_MAIL.FieldByName('Senha').AsString;

IOHandler := DM.IdSSLIOHandlerSocketOpenSSL1;

UseTLS := utUseExplicitTLS;

end;

 

// Configurações IdSSLIOHandlerSocketOpenSSL1

DM.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;

DM.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmClient;

 

// Configuração de Escrita(Negrito)

if (CheckBox_Negrito.Checked = True) then

begin

Memo_OutrasDescricoes.Text := '<b>' + Memo_OutrasDescricoes.Text + '</b>';

end else

begin

Memo_OutrasDescricoes.Text := Memo_OutrasDescricoes.Text;

end;

 

Screen.Cursor := crHourGlass;

 

IdMessage1.Clear;

IdMessage1.MessageParts.Clear;

 

// Codificar MIME para enviar páginas HTML

IdMessage1.ContentTransferEncoding := 'text/html';

IdMessage1.ContentType := 'text/html';

IdMessage1.CharSet := 'ISO-8859-1'; // Nossa linguagem. Aparece acentos.

 

IdMessage1.From.Address := DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString; // Remetente

IdMessage1.Subject := Edit_Assunto.Text; // Assunto

 

IdMessage1.Body.Text := Memo_OutrasDescricoes.Text + Memo_Corpo.Text; // Corpo HTML

 

 

// Configuração da confirmação de Leitura

if DM.TBL_CONF_MAIL.FieldByName('Conf_Leitura').AsString = 'True' then

begin

IdMessage1.From.Text := DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString; //conta que irá aparecer

IdMessage1.ReceiptRecipient.Text := IdMessage1.From.Text; // Auto Resposta

end else

begin

IdMessage1.From.Text := '';

IdMessage1.ReceiptRecipient.Text := '';

end;

 

IdMessage1.Recipients.EMailAddresses := Edit_Para.Text; // Destinatário

//IdMessage1.BccList.EMailAddresses := Edit_CCO.Text;

//IdMessage1.CCList.EMailAddresses := Edit_CC.Text;

 

if not DM.IdSMTP1.Connected = True then

begin

try

DM.IdSMTP1.Connect();

except

StatusBar1.Panels[0].Text := 'Erro na tentativa de conexão.';

Screen.Cursor := crDefault;

DM.IdSMTP1.Disconnect();

Abort;

end;

 

try

DM.IdSMTP1.Authenticate();

Screen.Cursor := crHourGlass;

except

if DM.TBL_CONF_MAIL.FieldByName('Usuario').AsString = '' then

begin

StatusBar1.Panels[0].Text := 'Erro na autenticação de usuário. Campo "usuário" não pode ficar em branco.';

Screen.Cursor := crDefault;

DM.IdSMTP1.Disconnect();

Abort;

end else

 

if DM.TBL_CONF_MAIL.FieldByName('Senha').AsString = '' then

begin

StatusBar1.Panels[0].Text := 'Erro na autenticação de senha. Campo "senha" não pode ficar em branco.';

Screen.Cursor := crDefault;

DM.IdSMTP1.Disconnect();

Abort;

end else

 

begin

StatusBar1.Panels[0].Text := 'Erro na autenticação de usuário ou senha.';

Screen.Cursor := crDefault;

DM.IdSMTP1.Disconnect();

Abort;

end;

 

end; // except

 

StatusBar1.Panels[0].Text := 'Autenticação realizada com sucesso!';

Screen.Cursor := crDefault;

 

end; // if

 

if DM.IdSMTP1.Connected = True then

begin

DM.IdSMTP1.Send(IdMessage1);

StatusBar1.Panels[0].Text := 'Email enviado com sucesso!';

end;

 

Application.ProcessMessages;

 

Screen.Cursor := crDefault;

DM.IdSMTP1.Disconnect();

end;

 

Na verdade eu queria algo como no site: http://verify-email.org/

Nós colocamos o email desejado e ele pesquisa se existe ou não. Realmente funciona mas com o limite de 5 verificações por hora;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Entendi, não conhecia esse site. Vou pesquisar a respeito do assunto, se encontrar algo volto a postar.

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.