2016-05-27 1 views
2

Je souhaite envoyer un courrier électronique via le serveur GMail.Impossible d'envoyer un e-mail (via GMail) avec Indy. Désaccord de version de protocole

TRY 
    SMTP.Connect;  // <---- This is TIdSMTP 
    EXCEPT 
    Log.AddError('Cannot connect to the email server.'); 
    END; 

    if SMTP.Connected then 
    TRY 
    SMTP.Send(MailMessage); 
    EXCEPT 
    on E:Exception DO 
     begin 
     Log.AddError('Connected to server but could not send email!'); 
     Log.AddError(E.Message); 
     end; 
    END; 

if SMTP.Connected 
then SMTP.Disconnect; 

Ce morceau de code a fonctionné en 2014 avec Delphi XE.

Le programme se connecte au serveur ok mais à la fin il dit: « SSL n'est pas disponible sur ce serveur »:

Resolving hostname smtp.Gmail.com. 
Connecting to 74.125.xxx.xxx 
Connected. 
Connected to SMTP server... 
SSL status: "before/connect initialization" 
SSL status: "before/connect initialization" 
SSL status: "SSLv3 write client hello A" 
SSL status: "SSLv3 read server hello A" 
SSL status: "SSLv3 read server hello A" 
Disconnected. 
Connected to server but could not send email! 
SSL is not available on this server. 

J'ai la dernière version de OpenSSL (téléchargée aujourd'hui) et Delphi XE7.
Wireshark dit:

Alert (Niveau: Fatal, Description: Protocol version)

Pourquoi je ne peux pas envoyer des courriels?
J'ai essayé tous: pas TSL, implicite, explicite, startTSL ...

enter image description here

Répondre

4

SOLUTION: sslvTLSv1 doit être inclus dans la propriété SSLIOHandler.SSLVersions.

+0

TOUTES les versions peuvent être activées (pas seulement v1 et v3) juste pour être du bon côté (assurez-vous que le code fonctionne avec tous les serveurs de messagerie) ... – Ampere

+0

Merci WireShark. – Ampere

+2

Il n'y a pas de 'sslvSSLv1'. Vous pensez à 'sslvTLSv1' à la place. –