Hello,
nouvelle énigme, je ne peux envoyer de mail avec Indy que sur un seul smtp, celui de notre réseau à ce que j'ai compris (smtp.orange.fr) et ceux sans besoin de préciser user et password (c'est magique).
Par contre, si je veux utiliser un autre smtp, là c'est pas pareil, c'est moins magique déjà. Or les clients chez lesquels sera installée l'appli ne passeront bien évidemment pas forcément par orange, et surement pas par notre réseau...
Alors j'ai essayé avec plusieurs autres serveurs de mail (gmail, yahoo, hotmail et iFrance) pour lesquels j'avais ou bien j'ai créé un compte, mais l'envoi n'aboutit pas... Avec ou sans user/pwd, avec ou sans StartTLs command, avec ou sans appel à la fonction authenticate... etc etc etc...
J'ai eu "must issue a startTLS command first", suite à quoi après avoir envoyé la commande demandée :
SendCmd('STARTTLS', 220);
je me retrouve désormais avec "command forbidden" lorsque j'envoie le startTLS...
Je ne vois pas le bout de cette histoire.
Voici mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| procedure TMailerForm.btnSendMailClick(Sender: TObject);
var
i : integer;
begin
StatusMemo.lines.insert(0,'');
StatusMemo.lines.insert(0,DateToStr(now));
//setup SMTP
SMTP.Host := ledHost.Text;
SMTP.Port := strToInt(port.text);
// avec smtp.orange.fr ceci n'est pas obligatoire :
if (user.Text <> '')
and (pwd.text <> '') then
begin
SMTP.Username := user.Text;
SMTP.Password := pwd.Text;
end;
//setup mail message
MailMessage.From.Address := ledFrom.Text;
MailMessage.Recipients.EMailAddresses := ledTo.Text + ',' + ledCC.Text;
MailMessage.Subject := ledSubject.Text;
MailMessage.Body.Text := Body.Text;
if FileExists(ledAttachment.Text) then
TIdAttachment.Create(MailMessage.MessageParts, ledAttachment.Text);
//send mail
try
try
SMTP.Connect(1000);
SMTP.SendCmd('STARTTLS', 220);
SMTP.Send(MailMessage);
except on E:Exception do
StatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message);
end;
finally
if SMTP.Connected then SMTP.Disconnect;
end;
end; (* btnSendMail Click *) |
J'ai lu sur le web des infos comme quoi il fallait envoyer une commande EHLO, sans succès, ensuite une autre source indiquait de faire un authenticate... pas plus d'effet...toujours command forbidden... les recherches sur le web ne m'apportent plus le moindre indice de solution...
Je sèche complet...
Ça semble si simple à la base d'envoyer un mail pourtant...
Si vous avez une idée, merci.
En attendant bon weekend.
EDIT 1 lundi 28/06/10
Si je fais :
1 2 3
|
SMTP.Connect(1000);
SMTP.Send(MailMessage); |
J'obtiens comme retour (à lire de bas en haut pour la chronologie):
5.7.0 Must issue a STARTTLS command first. p17sm85896124wbe.14
Status: Encodage du texte
Status: Connecté.
Status: Connexion à 209.85.227.109.
Status: Résolution du nom d'hôte smtp.gmail.com.
Alors je mets un startTLS (peut être est il "faux" ?) :
1 2 3 4
|
SMTP.Connect(1000);
SMTP.SendCmd('STARTTLS', 220);
SMTP.Send(MailMessage); |
Et là j'obtiens :
ERROR: Command forbidden
Status: Connecté.
Status: Connexion à 209.85.227.109.
Status: Résolution du nom d'hôte smtp.gmail.com.
Anyone knows ? Je continue à creuser pour ma part... Merci.
Partager