Erro envio email fora dominio

Delphi

16/03/2005

uso o seguinte código para envio de email

function TfrmConfigura.EnviarEmail(rem,dest,assun,msg : string):boolean;
  procedure GravaErro(erro : string);
  var ts : TStringList;
  begin
    ts := TStringList.Create;
    try
      ForceDirectories(´c:\logmail´);
      try
        ts.LoadFromFile(´c:\logmail\log.txt´);
      except
      end;
      ts.Add(DateTimeToStr(now));
      ts.Add(erro);
      ts.SaveToFile(´c:\logmail\log.txt´);
    finally
      ts.Free;
    end;
  end;
const p = ´******´;
begin
  try
    //Processo de reconhecimento no POP3 do UOL
    NMPOP31.AttachFilePath := ´.´;
    NMPOP31.DeleteOnRead := FALSE;
    NMPOP31.ReportLevel := Status_Basic;
    NMPOP31.TimeOut := 20000;
    NMPOP31.Host := ´10.19.7.12´;
    NMPOP31.Port := 110;
    NMPOP31.UserID := ´xxxx´;
    NMPOP31.Password := p;
    NMPOP31.Connect;
    //
    Result := True;
    NMSMTP1.Host := ´10.19.7.12´;
    NMSMTP1.Port := 25;
    NMSMTP1.UserID := ´xxxx´;
    NMSMTP1.Connect;
    if not NMSMTP1.Connected then
      Result := False;
    if Result then
    begin
      NMSMTP1.PostMessage.FromAddress := rem;
      NMSMTP1.PostMessage.ToAddress.Clear;
      NMSMTP1.PostMessage.ToAddress.Add(dest);
      NMSMTP1.PostMessage.Subject     := assun;
      NMSMTP1.PostMessage.Body.Text   := msg;
      NMSMTP1.PostMessage.Date := FormatDateTime(´dd/mm/yyyy hh:nn´,Now);
      NMSMTP1.SendMail;
      NMSMTP1.Disconnect;
      NMPOP31.Disconnect;
    end;
  except
    on e:exception do
    begin
      GravaErro(e.message);
      NMSMTP1.Disconnect;
      NMPOP31.Disconnect;
      Result := False;
    end;
  end;
end;



para os dominios fora da empresa dá o seguinte erro

503 no recipients need rcpt

alguém tem alguma dica ?


Motta

Motta

Curtidas 0

Respostas

Faelcavalcanti

Faelcavalcanti

16/03/2005

Este componente têm suporte para autenticação de envio para o protocolo SMTP, caso não tenta com o [url=http://www.indyproject.org/]INDY[/url], um dos melhores e mais completos que acho. E têm muito exemplo lá, no caso de desespero para a migração!!!

Mas adiantando sobre o código, verifica se o host realmente existe. tipow, dá um ping. Verifica também opções para envio de e-mail, digo assim porque não sei qual o componente que estais utilizando!!!

Espero ter ajudado!!!


GOSTEI 0
Massuda

Massuda

16/03/2005

Algumas observações...[list:ff569a8a95][*:ff569a8a95]O IP do seu servidor de POP3/SMTP é da rede local... isso está correto?[*:ff569a8a95]No seu código, caso falhe na conexão com o servidor SMTP não vai desconectar do servidor POP3[*:ff569a8a95]A mensagem de erro indica que o servidor SMTP recebeu um pedido para enviar um e-mail sem destinatário... você tem certeza de que o parametro [b:ff569a8a95]dest[/b:ff569a8a95] contem um valor válido?[*:ff569a8a95]Seria prudente evitar utilizar os componentes da aba FastNet, porque eles não existem para versões mais recentes do Delphi (parece que a empresa fechou).[/list:u:ff569a8a95]


GOSTEI 0
Motta

Motta

16/03/2005

Algumas observações...[list:363817f22d][*:363817f22d]O IP do seu servidor de POP3/SMTP é da rede local... isso está correto?[*:363817f22d]No seu código, caso falhe na conexão com o servidor SMTP não vai desconectar do servidor POP3[*:363817f22d]A mensagem de erro indica que o servidor SMTP recebeu um pedido para enviar um e-mail sem destinatário... você tem certeza de que o parametro [b:363817f22d]dest[/b:363817f22d] contem um valor válido?[*:363817f22d]Seria prudente evitar utilizar os componentes da aba FastNet, porque eles não existem para versões mais recentes do Delphi (parece que a empresa fechou).[/list:u:363817f22d]


1) sim é rede local, foi uma solução para envio de email, grava o texto numa tabela e uma app lê esta tabela e envia os emails

2) o NMPOP31.Disconnect;
no except não faria isto ??!!

3) Sim com certeza passei o destinatario

4) Não sabemos aqui se vamos migrar nossos sistemas, mas posso estudar utilizar outros componentes

Este código funciona para emails no próprio domínio da empresa, mas para fora dá este erro.

de qq forma grato !


GOSTEI 0
Massuda

Massuda

16/03/2005

2) o NMPOP31.Disconnect; no except não faria isto ??!!
No seu código...
    NMPOP31.Connect; 

    Result := True; 
    ...
    NMSMTP1.Connect; 
    if not NMSMTP1.Connected then 
      Result := False; 

    if Result then begin 
      ...
      NMSMTP1.Disconnect; 
      NMPOP31.Disconnect; 
    end; 
Se NMSMTP1.Connected for False, Result será False e não executa NMPOP31.Disconnect.

Quanto ao problema no envio, aviso aqui se eu lembrar de alguma coisa.


GOSTEI 0
Motta

Motta

16/03/2005

Tem razão !!


GOSTEI 0
Massuda

Massuda

16/03/2005

[quote:3ba580665b=´Massuda´]O IP do seu servidor de POP3/SMTP é da rede local... isso está correto?


1) sim é rede local, foi uma solução para envio de email, grava o texto numa tabela e uma app lê esta tabela e envia os emails[/quote:3ba580665b]Isso é uma coisa que eu não entendi... afinal, você tem um servidor de POP3/SMTP na sua rede local ou você tem um app que faz papel dos servidores (tipo um servidor proxy)?


GOSTEI 0
Motta

Motta

16/03/2005

Nosso banco de produção não teve a package que faz o envio de email instalada, o último BDA que contratamos não recomendou esta instalaçõa com a instancia funcionando, como vamos mudar o banco de nt para linux e de 8i para 9 , revolvemos aguardar, enquanto isto fiz esta aplicação para o envio de emais via plsql, um quebra-galho.

Faz a caminho de envio de emails não seria este, acessar o servidor de smpt/pop e por ele enviar o email , mesmo na rede local ?


GOSTEI 0
Massuda

Massuda

16/03/2005

Nosso banco de produção não teve a package que faz o envio de email instalada ... enquanto isto fiz esta aplicação para o envio de emais via plsql, um quebra-galho.
Fiquei mais confuso... o código que você postou é parte do programa quebra galho para envio de e-mail?

Se sim, nesse caso NMPOP31.Host e NMSMTP1.Host deveriam ser o nome do seu servidor POP3/SMTP na internet (por exemplo, ´mail.algumprovedor.com.br´). Para facilitar a vida, seu programa deveria ser executado na máquina que está conectada diretamente à internet, assim não tem problema de converter IP local/externo.


GOSTEI 0
Motta

Motta

16/03/2005

Como seria melhor então ?


GOSTEI 0
Massuda

Massuda

16/03/2005

Como seria melhor então ?
Não! Eu acho que esse caminho é viável.

Pelo que entendi, seu programa (o que está tendo problemas) pega de uma tabela do BD os e-mails e manda. Acho que a única correção agora seria por os nomes corretos dos servidores de POP3/SMTP.

Uma alternativa seria você usar algo parecido com sendmail para enviar os e-mails, tipo o [url=http://www.blat.net/]Blat[/url].


GOSTEI 0
Motta

Motta

16/03/2005

Acho que o problema é que o TNMSMTP não tem autenticação por password é nosso SMTP é autenticado, aí o problema é do componente, talvez seja melhor partir para o uso de outro mesmo.

Agradeço pela ajuda !!


GOSTEI 0
POSTAR