Envio Email com SSL

Delphi

23/03/2009

Alguém aqui já implementou envio de email com segurança SSL? Estou tentando enviar email para o GMail usando Indy 10 e Delphi 2007 e estou tendo alguns contratempos. Quando tento conectar em uma das portas do GMail ele retorna o Status de conectado mas depois a aplicação trava consumindo todo o processamento da máquina.

Existe algum outro componente de envio de email melhor que o Indy?


Rodc

Rodc

Curtidas 0

Respostas

Emberada

Emberada

23/03/2009

Olá rodc...
Acredito que estou tendo o mesmo problema seu com o envio de emails pelo indy com conta do gmail...
O programa conecta e autentica ok mas fica travado na linha de envio da mensagem:
IdSMTP.Send(IdMessage);
Fica travado muito tempo e nada..
Uso Windows Vista, estou sem firewall, sem antivirus, DLL´s atualizadas, Delphi 2007 e nada...
Conseguiu resolver a questão?
Alguem tem alguma ideia do que seja ou de uma outra alternativa aceitável para Delphi?


GOSTEI 0
Rodc

Rodc

23/03/2009

Pois sé, descobri que em uma das portas do GMail conecta-se apenas por modo Implicit e na outra porta apenas por modo Explicit. Mas o problema é que se o usuário escolher o tipo de opção errado ele terá de derrubar o programa e tentar novamente.
Continuo tentando... Qualquer posto aqui...


GOSTEI 0
Emberada

Emberada

23/03/2009

Olá rodc!
Consegui resolver durante a madrugada...
A seguir está o codigo funcionando OK...

São necessárias as DLLs do pacote a seguir:
http://indy.fulgan.com/SSL/Archive/indy_OpenSSL096m.zip

Consegui enviar sem problemas, mesmo com o antivirus ativado.
Coloque os componentes a seguir no form, e o restante da pra sacar pelo fonte..
IdSMTP = TidSMTP
IdMessage = TIdMessage
IdAntiFreeze = TIdAntiFreeze
IdSSLIOHandlerSocketOpenSSL1 = TIdSSLIOHandlerSocketOpenSSL


Qualquer dúvida pode mandar ai que verificamos..
O meu problema era que a propriedade IdSMTP.AuthType estava ficando como atNone quando o correto é atDefault.
Estranho era que conectava e autenticava aparentemente ok, mas ficava travado no envio da mensagem...
Agora funcionou ok e está bem rápido o envio... pra mim 100¬!
Rodando no Indy 10 com Delphi 2007 em Windows Vista.
Fiz tantos testes que acabei reinstalando o indy 10 e talvez isso também tenha interferido, mas creio que não...

    try

        with IdSMTP do
        begin
            AuthType  := atDefault; //Login
            Host      := ´smtp.gmail.com´;
            Password  := ´MINHASENHA´;
            Port      := 465;
            Username  := ´MEUEMAIL@gmail.com´;
            IOHandler := IdSSLIOHandlerSocketOpenSSL1;
            UseTLS    := utUseRequireTLS;
            ConnectTimeout := 10000;
            ReadTimeout    := 10000;
            AuthType := atDefault; //Login
        end;//with

        IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv2;
        IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode   := sslmUnassigned;


        IdMessage.Clear;
        IdMessage.MessageParts.Clear;
        if lstAnexos.Items.Count > 0 then
        begin
        for i:= 0 to lstAnexos.Items.Count - 1 do
            TIdAttachmentFile.Create(IdMessage.MessageParts, lstAnexos.Items[i]);
        end;

        IdMessage.From.Address := ´MEUEMAIL@gmail.com´;
        IdMessage.From.Text    := ´MEUNOME´;
        IdMessage.Subject      := edtAssunto.Text;
        IdMessage.Body.Text    := CORPODOEMAIL_STRING;
        IdMessage.Recipients.EMailAddresses := EdtPara.Text; //email destino
        IdMessage.CCList.EMailAddresses     := EdtCC.Text;
        IdMessage.BccList.EMailAddresses    := EdtCCO.Text;

        if not IdSMTP.Connected then
        begin
            IdSMTP.Connect();
            IdSMTP.Authenticate();
        end;//if

        if IdSMTP.Connected then
           IdSMTP.Send(IdMessage);
        Application.ProcessMessages;

    except
      on E: Exception do
        Mensagem(E.Message, mtError, Self.Name);
    end;
    IdSMTP.Disconnect;



GOSTEI 0
Rodc

Rodc

23/03/2009

Valew emberada... era apenas algumas configurações que estavam diferentes. Corrigi e funcionou.
Agora estou com outro tipo de problema, menor mas inconveniente. Se o usuário tentar conectar no Google e não habilitar o SSL, a conexão fica travada. Já esperei um tempão e não retornou nenhum erro, apenas fica travado. No Yahoo também tem outro problema, se tentar conectar sem habilitar o Login, o Yahoo retorna um erro de que precisa do login mas o componente do Indy não trata este retorno e tenta continuar o envio, retornando assim o erro ´Conection Closed Gracefully´, que quer dizer que o servidor forçou o encerramento da conexão.
Tens alguma idéia de como resolver isto?


GOSTEI 0
Cafosys

Cafosys

23/03/2009

alguem conseguiu faer funcionar para o smtp.live.com que é o do hotmail


GOSTEI 0
Rodc

Rodc

23/03/2009

Usando o Indy eu não consegui... ele até conecta no servidor, negocia TLS e quando começa enviar os dados criptografados ele trava e não retorna mais... estou usando um [url=http://www.overbyte.be/frame_index.html?redirTo=/products/ics.html]componente da Overbyte[/url]... é meio complicado de usá-lo, mas funciona muito bem... inclusive com o hotmail.


GOSTEI 0
Cafosys

Cafosys

23/03/2009

com o exemplo de envio do site do componente da o seguinte erro
Must issue a STARTTLS command first
no smtp.live.com saberia me dizer qual é o problema.

se possivel daria pra me passar um exemplo do codigo do componente enviando para o hotmail


GOSTEI 0
Rodc

Rodc

23/03/2009

Você tem de implementar a conexão segura (SSL). É o mesmo caso do acesso ao GMail.
Procura no fórum e no Google por ´GMail smtp ssl´. O Indy tem um componente para SSL, mas tem que baixar umas DLLs para funcionar...


GOSTEI 0
Cafosys

Cafosys

23/03/2009

no indy eu ja fiz esse implementação mas gostaria de saber como que é feito isso no componente da Overbyte


GOSTEI 0
Rodc

Rodc

23/03/2009

Você está usando o exemplo de SSL? O exemplo está na pasta SslInternet. Ele faz uso do componente TSslSmtpCli.


GOSTEI 0
Cafosys

Cafosys

23/03/2009

o componente TSslSmtpCli não tem na instalação só o TSslSmtpCli como intalo esse componente a versao que baixei no site é v6 TSslBaseComponent


GOSTEI 0
Rodc

Rodc

23/03/2009

o componente TSslSmtpCli não tem na instalação só o TSslSmtpCli
Como assim ´não tem o TSslSmtpCli, só o TSslSmtpCli´. Não é a mesma coisa?
Não sei se é este o seu caso, mas você precisa incluir o define ´USESSL´ no projeto do componente para habilitar os componentes SSLs.


GOSTEI 0
Cafosys

Cafosys

23/03/2009

desculpa errei ao escrever o certo é
o componente TSslSmtpCli não tem na instalação só o TSmtpCli como instalo esse componente a versao que baixei no site é v6 quando rodo o pachage dos componentes com ssl da erro dizendo que não encontra a classe TSslBaseComponent


GOSTEI 0
POSTAR