Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #14  
Antiguo 21-11-2013
jcosta jcosta is offline
Registrado
 
Registrado: feb 2008
Posts: 9
Poder: 0
jcosta Va por buen camino
Al final he conseguido que funcione, he utilizado la versión 0.96m de OpenSSL (también me funciona con la 0.96). Por lo visto el puerto 587 necesita STARTTLS . El código sería algo así:

Código Delphi [-]
 
        // configuramos el envío de correo electrónico
        idSMTP->Host = fmVisual->host_smtp;
        idSMTP->Username = fmVisual->username_smtp;
        idSMTP->Password = fmVisual->password_smtp;
        idSMTP->Port = fmVisual->smtp_puerto;
        idSMTP->IOHandler = NULL;

        if (fmVisual->smtp_SSL != "Ninguno") {
                idSMTP->IOHandler = IdSSL;
        }

        if (fmVisual->smtp_modo_SSL == "sslmUnassigned") {
                IdSSL->SSLOptions->Mode = sslmUnassigned;
        } else {
                if (fmVisual->smtp_modo_SSL == "sslmServer") {
                        IdSSL->SSLOptions->Mode = sslmServer;
                } else {
                        if (fmVisual->smtp_modo_SSL == "sslmClient") {
                                IdSSL->SSLOptions->Mode = sslmClient;
                        } else {
                                if (fmVisual->smtp_modo_SSL == "sslmBoth") {
                                        IdSSL->SSLOptions->Mode = sslmBoth;
                                } else {
                                        IdSSL->SSLOptions->Mode = sslmUnassigned;
                                }
                        }
                }
        }


        // si el puerto requiere STARTTLS como Indy 9 no lo soporta nativamente hay que simularlo
        if (fmVisual->smtp_SSL == "STARTTLS") {
                // primero establecemos el método
                IdSSL->SSLOptions->Method = sslvTLSv1;

                // se coloca PassThrough a true
                IdSSL->PassThrough = true;

                // se llama a Connect
                idSMTP->Connect(IdTimeoutDefault);

                // se envía manualmente un comando STARTTLS
                if (idSMTP->SendCmd("STARTTLS", 220) == 220) {
                        // se coloca PassThrough a false
                        IdSSL->PassThrough = false;

                        // se envía un comando HELO
                        if (idSMTP->SendCmd("HELO " + idSMTP->LocalName, 250) != 250) {
                                idSMTP->Disconnect();
                                MessageDlg("Fallo en envío de comando HELO.", mtError, TMsgDlgButtons() << mbOK, 0);
                        }

                        if (!idSMTP->Authenticate()) {
                                idSMTP->Disconnect();
                                MessageDlg("Autenticación incorrecta.", mtError, TMsgDlgButtons() << mbOK, 0);
                        }
                } else {
                        MessageDlg("Fallo en envío de comando STARTTLS.", mtError, TMsgDlgButtons() << mbOK, 0);
                }
        } else {
                // SSL
                if (fmVisual->smtp_SSL == "sslvTLSv1") {
                        IdSSL->SSLOptions->Method = sslvTLSv1;
                } else {
                        if (fmVisual->smtp_SSL == "sslvSSLv3") {
                                IdSSL->SSLOptions->Method = sslvSSLv3;
                        } else {
                                if (fmVisual->smtp_SSL == "sslvSSLv23") {
                                        IdSSL->SSLOptions->Method = sslvSSLv23;
                                } else {
                                        IdSSL->SSLOptions->Method = sslvSSLv2;
                                }
                        }
                }
        }



        try {
                if (!idSMTP->Connected()) {
                        idSMTP->Connect(IdTimeoutDefault);
                }

                idSMTP->Send(mensaje);
                idSMTP->Disconnect();
                MessageDlg("Envío realizado.", mtInformation, TMsgDlgButtons() << mbOK, 0);

        } catch (Exception &error) {
                MessageDlg("No se pudo realizar el envío:\n\n" + error.Message, mtError, TMsgDlgButtons() << mbOK, 0);
        }
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
enviar mail desde delphi martinchooozzz Internet 7 20-05-2008 12:20:42
como puedo enviar un mail con delphi 7 kurono Varios 4 29-03-2008 17:38:53
Enviar e-mail D-MO PHP 5 10-01-2006 19:21:08
enviar mail amadis API de Windows 2 06-05-2005 04:02:02
enviar mail desde delphi 7 Diego Internet 2 07-06-2004 13:07:50


La franja horaria es GMT +2. Ahora son las 16:16:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi