SMTP_QuickSend et SMTP_Send où est le loup?

J’essaye d’envoyer un mail HTML autrement qu’avec Quicksend et je n’y arrive pas…

Le premier fonctionne parfaitement bien, le second Non.
Qu’ai-je oublié ?

<code 4D>

C_ENTIER LONG($Erreur;$smtp_id;$Smtp_Option_l;$Smtp_no_port)
C_TEXTE($Objet;$emailBody_t;$EmailDestinataire;$vt_host;$vt_authLogin;$vt_authPasword)

$vt_host:=“smtp.roussel-etancheite.com”//“smtp.”+Sous chaîne(<>Email;Position(Caractère(Arobase);<>Email)+1;Longueur(<>Email))
$EmailDestinataire:="roussel.etancheite@free.fr"
$Objet:=“Essai 4D”
$Smtp_Option_l:=9
$Smtp_no_port:=465
$vt_authLogin:=<>Email
$vt_authPasword:=<>MDP_Pop_Perso

WP EXPORTER VARIABLE([Lettres]Write_pro;$emailBody_t;wk mime html)

$Erreur:=SMTP_QuickSend ($vt_host;<>Email;$EmailDestinataire;$Objet;$emailBody_t;$Smtp_Option_l;$Smtp_no_port;$vt_authLogin;$vt_authPasword)

// Le mail est parfaitement expédié et reçu correctement.

$Erreur:=SMTP_New ($smtp_id)
$Erreur:=SMTP_Host ($smtp_id;$vt_host)
$Erreur:=SMTP_From ($smtp_id;<>Email)
$Erreur:=SMTP_ReplyTo ($smtp_id;<>Email)
$Erreur:=SMTP_Subject ($smtp_id;$Objet)
$Erreur:=SMTP_To ($smtp_id;$EmailDestinataire;1)
$Erreur:=SMTP_Body ($smtp_id;$emailBody_t;4)

$Erreur:=SMTP_Auth ($smtp_id;$vt_authLogin;$vt_authPasword)
$Erreur:=IT_SetPort (2;$Smtp_no_port)
$Erreur:=SMTP_Send ($smtp_id;1)
Si ($Erreur#0)
ALERTE(“Erreur SMTP send”)
Fin de si
$Erreur:=SMTP_Clear ($smtp_id)

</code 4D>

il devrait être IT_SetPort (12;$port)

si vous utilisez port no. 465 (normalement SMTP over SSL, implicit mode) et SSL=1.

IT_SetPort (2;$port) est pour port no. 587 (normalement STARTTLS, explicit mode) et SSL=0,5,9.

Pour rappel: le SSL ou TLS ne sécurise QUE la connexion entre votre machine et le serveur (d’envoi) qui reçoit le mail. Vous ne gérez en aucune façon la sécurité sur l’ensemble du parcours de votre mail donc la sécurité est toute relative sauf à gérer toute la chaine de bout en bout: serveur d’envoi + tous les serveurs intermédiaires (antispam, etc…) + le dernier maillon du dernier serveur (de reception) vers le logiciel de lecture/reception de mail…

désolé Keisuke, mais avec
$Erreur:=IT_SetPort(2;587) ce n’est pas mieux.

Pourquoi dois-je changer le n° de port alors qu’avec quick_send cela marche très bien ?

Je vois bien les différences d’entête, mais je ne comprends pas la ligne de commande que je dois passer pour avoir le même résultat qu’avec quicksend.

Voici l’entête avec quicksend

Subject: Essai 4D avec SMTP_QuickSend
MIME-Version: 1.0
Content-Type: multipart/related; boundary=33739A906E414BBE9F86B2F42E2FCA40
X-Ovh-Tracer-Id: 15814671569041296221
X-VR-SPAMSTATE: OK
X-VR-SPAMSCORE: 0
X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeelhedrkedugdduhecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemuceftddtnecu
Message-Id: 20170327092929.CEEC1516A2F@zimbra92-e16.priv.proxad.net

–33739A906E414BBE9F86B2F42E2FCA40
Content-Type: text/html; charset=“utf-8”; name=“document.html”
Content-Transfer-Encoding: base64

et la voici avec SMTP_Send

Subject: Essai 4D avec SMTP_Send
X-Ovh-Tracer-Id: 15819456641797000029
X-VR-SPAMSTATE: OK
X-VR-SPAMSCORE: 0
X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeelhedrkedugdduhecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemuceftddtnecu
Message-Id: 20170327092946.C72B14F516A@zimbra92-e16.priv.proxad.net

Keisuke t’a conseillé IT_setPort(12;465) :roll: (si tu veux absolument utiliser le même port que le QuickSend)

Je t’encourage à relire ce http://forums.4d.fr/Post/FR/18896031/0/0/fil>
Ton problème ne vient pas du port mais du parametrage de l’encodage…

J’avais bien vu ce fil en son temps… mais impossible de remettre la main dessus.
Donc, merci beaucoup pour le lien.
Il va falloir que je suive une formation pour effectuer des recherches sur le forum :roll:
Sujet clos.

et comment avez-vous résolu votre problème :?:

I.C. v15.1 au lieu de I.C. v15.3

SMTP_Charset (0;1) au lieu de SMTP_Charset (1;1)

LOGIN au lieu de CRAM-MD5

SMTP_SetPrefs (1;16;0) au lieu de SMTP_SetPrefs (1;15;0)

Non, je suis en v.16.
IC. 16.0 build 16.207104
Dans la méthode sur Ouverture : $erreur:=SMTP_SetPrefs (1;1;-1)
Login et MDP

Mais mon problème venait surtout de Write Pro.

En effet si je n’ai pas de pièce jointe les lignes de commande suivantes sont opérationnelles :
<code 4D>

WP EXPORTER VARIABLE([Lettres]Write_pro;$emailBody_t;wk mime html)

Si (<>Smtp_authentifié)
$Erreur:=SMTP_QuickSend ($vt_host;<>Email;$EmailDestinataire;$Objet;$emailBody_t;$Smtp_Option_l;$Smtp_no_port;$vt_authLogin;$vt_authPasword)
Sinon
$Erreur:=SMTP_QuickSend ($vt_host;<>Email;$EmailDestinataire;$Objet;$emailBody_t;$Smtp_Option_l;<>Smtp_no_port;"";"")
Fin de si

</code 4D>

Par contre avec des pièces jointes, impossible d’avoir quelque chose de correct en utilisant wk mime html. Je suis obligé de passer par une variable pour copier ma zone WP et l’exporter en utilisant wk page web html en ayant figé les expressions préalablement et utilisant l’option 4 avec SMTP_Body ($smtp_id;$emailBody_t;4)

Le code est alors :

<code 4D>
C_Objet($LettreTempo)
C_TEXTE($Objet;$emailBody_t;$EmailDestinataire)
C_ENTIER LONG($Erreur;$smtp_id)
TABLEAU TEXTE($TabCheminPièceJointes;0)

COPIER TABLEAu(vTabPièces_jointes;$TabCheminPièceJointes)

$EmailDestinataire:="toto@free.fr"
$Objet:=“Essai 4D avec SMTP_Send”

$LettreTempo:=[Lettres]Write_pro
ST FIGER EXPRESSIONS($LettreTempo;ST Début texte;ST Fin texte)
WP EXPORTER VARIABLE($LettreTempo;$emailBody_t;wk page web html 4D)

Au cas ou

: (Non(Mail_VérifErreur ("SMTP_New";SMTP_New ($smtp_id))))
: (Non(Mail_fixe_SMTP ($smtp_id)))
: (Non(Mail_VérifErreur ("SMTP_From";SMTP_From ($smtp_id;<>Email;0))))
: (Non(Mail_VérifErreur (« SMTP_To";SMTP_To ($smtp_id;$EmailDestinataire;0))))
//: (Non(Mail_VérifErreur (« SMTP_Cc";SMTP_Cc ($smtp_id;vEmail_CC;0))))
	
//: (Non(Mail_VérifErreur (« SMTP_Bcc »;SMTP_Bcc ($smtp_id;$EmailCCI;0))))
: (Non(Mail_VérifErreur ("SMTP_Subject";SMTP_Subject ($smtp_id;$Objet;0))))
 //: (Non(Mail_VérifErreur ("SMTP_ReplyTo";SMTP_ReplyTo ($smtp_id;$Email_Repondre_A;0))))
: (Non(Mail_VérifErreur ("SMTP_Body";SMTP_Body ($smtp_id;$emailBody_t;4))))
: (Non(Mail_Attache_Documents($smtp_id;->$TabCheminPièceJointes)))
: (Non(Mail_VérifErreur ("SMTP_Send";SMTP_Send ($smtp_id;1))))  // V16
Sinon 
	$EnvoyeOK:=Vrai  //Message composé et envoyé avec succès
	EFFACER FENÊTRE
	MESSAGE("Message et pièce jointe envoyés avec succès.")

Fin de cas

Si ($SMTP_ID#0) //Si un message a été créé en mémoire, nous devons l’effacer maintenant
EFFACER FENÊTRE
MESSAGE(“Fermeture de la cession d’envoie d’email”)
$OK:=Mail_VérifErreur (“SMTP_Clear”;SMTP_Clear ($smtp_id))
Fin de si

</code 4D>

La méthode de fixation du SMTP est la suivante :
<code 4D>

C_BOOLÉEN($0)

C_BOOLÉEN($Resultat)
C_ENTIER LONG($1)

Si (Faux)
C_BOOLÉEN(Mail_fixe_SMTP ;$0)
Fin de si

$Resultat:=Vrai
Si (<>Smtp_authentifié) & (Longueur(<>MDP_Pop_Perso)#0)
Si (Non(<>Utiliser_SSL)) // On n’utilise pas ssl et le mot de passe est renseigné.
// On peut créer le nom du serveur smtp
// création du nom du serveur selon l’adresse courriel de l’expéditeur.
<>Serveur_smtp:=“smtp.”+Sous chaîne(<>Email;Position(Caractère(Arobase);<>Email)+1;Longueur(<>Email))
Fin de si

Au cas ou 	
		
	: (Non(Mail_VérifErreur ("SMTP_Host";SMTP_Host ($1;<>Serveur_smtp;0))))
		
	: (Non(Mail_VérifErreur ("SMTP_Auth";SMTP_Auth ($1;<>Email;<>MDP_Pop_Perso;2))))
		
	: (Non(Mail_VérifErreur ("IT_SetPort";IT_SetPort (12;465))))
	Sinon 
		$Resultat:=Vrai
Fin de cas 

Sinon
$Resultat:=(Non(Mail_VérifErreur (“SMTP_Host”;SMTP_Host ($1;<>Serveur_smtp;0))))
Fin de si

$0:=$Resultat
</code 4D>

Et la méthode : Mail_Attache_Documents
<code 4D>
C_BOOLÉEN($0)
C_ENTIER LONG($1) //$1 entier long $SMTP_ID
C_POINTEUR($2) //$2 pointe sur un tableau texte contenant les chemins d’accès des documents à joindre
C_BOOLÉEN($Resultat)
C_ENTIER LONG($i)

Si (Faux)
C_BOOLÉEN(Mail_envois_Plusieurs_Documents ;$0)
C_ENTIER LONG(Mail_envois_Plusieurs_Documents ;$1)
C_POINTEUR(Mail_envois_Plusieurs_Documents ;$2)
Fin de si

$Resultat:=Vrai // Si le tableau est vide la boucle n’est pas exécutée et la méthode retourne vrai

Boucle ($i;1;Taille tableau($2->))
Si (Longueur(Nom_long_Vers_Nom_Fichier ($2->{$i}))>=64) // le nom d’une pièce jointe ne peut pas excéder 64 caractères sur Mac
$Resultat:=Faux
ALERTE(“Impossible d’expédier un document dont le nom excède 64 caractères. Renommer la pièce jointe :”+<>CR+Nom_long_Vers_Nom_Fichier ($2->{$i}))
Sinon
$Resultat:=Mail_VérifErreur (“SMTP_Attachment”;SMTP_Attachment ($1;$2->{$i};2;0))
Fin de si
Si (Non($Resultat))
$i:=Taille tableau($2->)
Fin de si
Fin de boucle
$0:=$Resultat

</code 4D>

Voilà si cela rend service tant mieux