Fórum Envio de Newsletter - Mala Direta via Email - Sugestões #354598
29/02/2008
0
Hoje eu tenho uma rotina que envia mala direta por email, usando um componente que encontrei aqui no fórum, chamado mkemail.
Só que a base de dados do cliente tem [b:73d247fcb6]mais de 5.000 emails[/b:73d247fcb6] cadastrados e, quando entra na rotina, o sistema simplmesmente pára. O cliente costuma ´apertar o botão de envio´ à tarde e só mexe no programa o dia seguinte.
Minha dúvida: preciso de sugestões de vocês sobre o melhor componente, ou melhor forma de mandar essa quantidade de emails. Pensei até em mandar para o site do cliente e mandar via PHP...
É isso aí galera, aceito sugestões...
Valew!
Powerlog Tecnologia
Curtir tópico
+ 0Posts
29/02/2008
Onjahyr
É preciso saber do por quê que [b:98305c60c2]´para´[/b:98305c60c2]. Se ele enviar dois e-mails dá certo? Se der certo, a quantidade não tem nada a ver com isso! Pode ser que seja o servidor que não aguente ou não permita o envio de muitos e-mails....
Gostei + 0
29/02/2008
Powerlog Tecnologia
Provedor também enche o saco, mas arrumamos um que é mais sossegado quando à ´politica de spam´ (um dia desses até recebi um comunicado do nosso amigo Cantu, da Firebase que eles estavam mudando de provedor por conta disso).
Preciso de sugestões diversas de como mandar essa paulada de emails!!
Vlw
Gostei + 0
03/03/2008
Powerlog Tecnologia
Gostei + 0
04/03/2008
Brunolspp
procedure TFrmEnviaEmail.BitBtn1Click(Sender: TObject);
var
IdMessage : TIdMessage;
//Attach : TIdAttachment;
ArquivoHtml : TStringList;
qtdExec : integer;
qtdEnviada : integer;
qtComErro : integer;
begin
inherited;
if not (rgTipoEnvio.ItemIndex in [0,1,2,3]) then
begin
ShowMessage(´Selecione o tipo de envio´);
rgTipoEnvio.SetFocus;
end;
BitBtn1.Enabled := False;
Screen.Cursor := crHourGlass;
qtdExec := 0;
qtdEnviada := 0;
qtComErro := 0;
IdMessage :=TIdMessage.Create(Self);
IdMessage.From.Text :=EditRemetente.Text;
{ if not chkSemAutenticacao.Checked then
IdSMTP.AuthType := atDefault
else
IdSMTP.AuthType := atNone;}
IdSMTP1.Host := EdtSMTPHost.Text;//´ip do servidor´;
IdSMTP1.UserName := EdtUsuario.Text;//´usuario´;
IdSMTP1.Password := EdtSenha.Text;//´senha´;
ArquivoHtml := TStringList.Create;
try
IdSMTP1.Connect;
except
on E : Exception do
begin
BitBtn1.Enabled := True;
Screen.Cursor := crDefault;
ShowMessage(E.Message);
Exit;
end;
end;
PanelTotal.Caption := ´´;
pbEnvia.Max := FrmCadUsuarios.CDS.RecordCount;
pbEnvia.Min := 0;
pbEnvia.Position := 0;
FrmCadUsuarios.CDS.First;
if FrmCadUsuarios.nRecPosition > 0 then
FrmCadUsuarios.CDS.RecNo := FrmCadUsuarios.nRecPosition;
if EditHtml.Text <> ´´ then
begin
ArquivoHtml.LoadFromFile(EditHTML.Text);
end;
while not FrmCadUsuarios.CDS.Eof do
Begin
if Trim(FrmCadUsuarios.CDSEMAIL.Value) <> ´´ then
begin
if rgTipoEnvio.ItemIndex = 0 then
begin
EnviarEmail(ArquivoHtml, qtdExec, IdMessage, qtdEnviada, qtComErro);
end
else if rgTipoEnvio.ItemIndex = 1 then
begin
if FrmCadUsuarios.CDSAUTORIZAEMAIL.AsString = ´S´ then
EnviarEmail(ArquivoHtml, qtdExec, IdMessage, qtdEnviada, qtComErro);
end
else if rgTipoEnvio.ItemIndex = 2 then
begin
if FrmCadUsuarios.CDSAUTORIZAMALA.AsString = ´S´ then
EnviarEmail(ArquivoHtml, qtdExec, IdMessage, qtdEnviada, qtComErro);
end
else if rgTipoEnvio.ItemIndex = 3 then
begin
if (FrmCadUsuarios.CDSAUTORIZAEMAIL.AsString = ´S´)
and (FrmCadUsuarios.CDSAUTORIZAMALA.AsString = ´S´) then
EnviarEmail(ArquivoHtml, qtdExec, IdMessage, qtdEnviada, qtComErro);
end;
end;
FrmCadUsuarios.CDS.Next;
end;
ArquivoHtml.Free;
IdSMTP1.Disconnect;
IdMessage.Free;
PanelTotal.Caption := ´Qtd. Enviada: ´ + IntToStr(qtdExec) +
´ - Qtd. Enviada com Sucesso: ´ + IntToStr(qtdEnviada) +
´ - Qtd. de Erros: ´ + IntToStr(qtComErro);
BitBtn1.Enabled := False;
Screen.Cursor := crDefault;
end;
procedure TFrmEnviaEmail.EnviarEmail(ArquivoHtml: TStringList; var qtdExec: Integer; var IdMessage: TIdMessage; var qtdEnviada: Integer; var qtComErro: Integer);
begin
try
lbNome.Caption := FrmCadUsuarios.CDSNOME.AsString + ´ ´ + FrmCadUsuarios.CDSSOBRENOME.AsString;
lbEmail.Caption := FrmCadUsuarios.CDSEMAIL.AsString;
lbCodigo.Caption := FrmCadUsuarios.CDSID_USUARIO.AsString;
lbPosicao.Caption := IntToStr(FrmCadUsuarios.CDS.RecNo);
IdMessage.Recipients.EMailAddresses := FrmCadUsuarios.CDSEMAIL.Value;
IdMessage.Date := Date;
IdMessage.Subject := EditAssunto.Text;
IdMessage.Priority := mpNormal;
if EditHtml.Text = ´´ then
begin
IdMessage.ContentType := ´text/plain´;
IdMessage.Body.Text := ´Prezado(a) ´ + FrmCadUsuarios.CDSNOME.AsString +
´´#13´´ + ´´13´´ + MemoTexto.Lines.Text;
end
else
begin
IdMessage.ContentType := ´text/html´;
IdMessage.Body.Text := ´Prezado(a) ´ +
FrmCadUsuarios.CDSNOME.AsString + ´ ´ +
FrmCadUsuarios.CDSSOBRENOME.AsString + ´´
+ ´´13´´ + ´´13´´ + ArquivoHtml.Text;
end;
IdMessage.IsEncoded := True;
IdSMTP1.Send(IdMessage);
qtdExec := qtdExec + 1;
Application.ProcessMessages;
Update;
qtdEnviada := qtdEnviada + 1;
except
qtComErro := qtComErro + 1;
IdSMTP1.Disconnect(True);
IdSMTP1.Connect;
end;
pbEnvia.Position := pbEnvia.Position + 1;
Application.ProcessMessages;
Update;
end;
Espero poder ajudar.
Gostei + 0
04/03/2008
Brunolspp
Gostei + 0
04/03/2008
Powerlog Tecnologia
Gostei + 0
04/03/2008
Powerlog Tecnologia
Qual versão do INDY você usa? Aqui deu erro nessa linha:
IdSMTP1.Disconnect(True);
[ ]´s
Gostei + 0
04/03/2008
Brunolspp
Gostei + 0
04/03/2008
Powerlog Tecnologia
Mas a versão do INDY (por exemplo indy9.0.18_d7.exe ) é que estou com dúvida, porque aqui o desconecta não tem aquele parâmetro.
De qualquer forma funcionou apenas com o desconecta
Valeu
Gostei + 0
04/03/2008
Onjahyr
Blz.
Gostei + 0
04/03/2008
Brunolspp
A versão do indy é sempre a que vem como padrão na distribuição do Delphi.
Minha versao correte padrão do Delphi 2007 onde atualmene funciona é:
10.0.0.17
Gostei + 0
16/04/2008
Fpjaraujo
o envio é:
Um mesmo email para multiplos enderecos
1 por 1 de cada vez
ou
n enderecos no CCo de cada vez ?
Valeu !
Gostei + 0
16/04/2008
Brunolspp
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)