Bonjour,
Si l'on peut lire ses mails grâce à curl, on peut aussi en expédier avec une ou plusieurs pièces jointes.
Pour cela, nous aurons besoin d'installer les paquets curl.tcz, coreutils.tcz et leurs dépendances.
La syntaxe
curl --silent smtps://[serveur_smtp]:[port] --mail-from "[expediteur@serveur.com]" --mail-rcpt "[destinataire@serveur.com]" --ssl-reqd -u "[utilisateur]:[mot_de_passe]" -T mail.txt (ou autre nom de son choix)
où
--silent rend la commande silencieuse ;
--ssl-reqd (au lieu de --ssl qui est déprécié) pour forcer SSL ;
-u pour introduire votre identifiant de connexion à votre messagerie et le mot de passe associé ;
-T pour introduire le fichier qui contiendra le texte du mail et sa ou ses pièces jointes.
Selon que l'on souhaite intégrer une version .html du message ou non, la structure du fichier mail.txt variera.
1 - Exemple de message en texte simple avec 2 pièces jointes
Dans un premier temps, nous allons rassembler la ou les documents à joindre au message.
Puis, ils seront convertis en ASCII avec la commande base64 :
$ base64 document.pdf > pj1.txt
Nous conservons ce fichier bien au chaud.
Puis, nous préparons un fichier texte que nous nommerons mail.txt (vous pouvez opter pour un autre nom. Dans ce cas, le paramètre -T sera suivi de ce dernier nom).
La structure du fichier mail.txt répondra à celle ci-dessous :
From: <expediteur@serveur.abc>
To: <destinataire@serveur.abc>
Subject: objet du mail
Date: Jjj, JJ Mmm AAAA hh:mm:ss +0[12]00]
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="__________separateur-multipart-mixed__________"
--__________separateur-multipart-mixed__________
Content-Type: text/plain;
charset=utf-8 (ou autre charset de son choix)
Content-Transfer-Encoding: quoted-printable
Le corps du message
--__________separateur-multipart-mixed__________
Content-Type: [voir en fin de sujet quelques content-type possible] ;
name="[nom_du_fichier.ext]"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="[nom_du_fichier.ext]"
(coller ici le contenu du fichier pj1.txt qui correspond au 1er document converti avec base64)
--__________separateur-multipart-mixed__________
Content-Type: [voir en fin de sujet quelques content-type possible] ;
name="[nom_du_fichier.ext]"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="[nom_du_fichier.ext]"
(coller ici le contenu du fichier pj2.txt qui correspond au 2nd document converti avec base64)
--__________separateur-multipart-mixed__________--
2 - Exemple de message au format texte et html avec 1 pièce jointe
La structure du fichier mail.txt (ou un autre nom de votre choix) ressemblera à :
From: <expediteur@serveur.abc>
To: <destinataire@serveur.abc>
Subject: objet du mail
Date: Jjj, JJ Mmm AAAA hh:mm:ss +0[12]00]
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="__________separateur-multipart-mixed__________"
--__________separateur-multipart-mixed__________
Content-Type: multipart/alternative; boundary="_____separateur_multipart_alternative_____"
--_____separateur_multipart_alternative_____
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
[MESSAGE EN TEXT/PLAIN]
--_____separateur_multipart_alternative_____
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<MESSAGE EN HTML>
--_____separateur_multipart_alternative_____--
--__________separateur-multipart-mixed__________
Content-Type: application/pdf;
name="toto.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="toto.pdf"
(coller ici le contenu du fichier pj.txt qui correspond au document converti avec base64)
--__________separateur-multipart-mixed__________--
Liste non exhaustive de quelques "content-type"
Type Description Exemple de sous-type communément associé
-----------------------------------------------------------------------------------------------------------------
Texte Représente n'importe quel document
contenant du texte et qui est text/css, text/javascript
théoriquement lisible par un utilisateur. text/plain, text/html
-----------------------------------------------------------------------------------------------------------------
Image Représente n'importe quelle image. image/jpeg,
Les vidéos ne font pas partie de ce type image/bmp,
bien que les images animées tels les GIF image/svg+xlm, image/webp
animés en fassent partie. image/gif, image/png
-----------------------------------------------------------------------------------------------------------------
Audio Représente n'importe quel fichier audio. audio/midi, audio/mpeg, audio/webm,
audio/ogg, audio/wav
-----------------------------------------------------------------------------------------------------------------
Video Représente n'importe quel fichier vidéo. video/webm, video/ogg
-----------------------------------------------------------------------------------------------------------------
Application Représente n'importe quelle donnée binaire. application/octet-stream, application/pkcs12,
application/vnd.mspowerpoint,
application/xhtml+xml,
application/xml, application/pdf
-------------------------------------------------------------------------------------------------------------
[/font]
Avec gmail
Si vous utilisez gmail, peut-être devrez-vous activer l’accès IMAP à votre compte Gmail.
Pour ce faire, accédez à l’interface Web de Gmail, cliquez sur l’icône « rouage » dans le coin supérieur droit, puis sélectionnez "Voir tous les paramètres".
Dans les "Paramètres de Gmail", cliquez sur l’onglet "POP/IMAP" et activez la case d’option à côté de "Activer IMAP". Enregistrez vos paramètres.
Recommandations
- Si vous voulez réaliser des tests, ne vous privez surtout pas et partagez votre expérience.
Attention toutefois à ne multiplier inconsidérement l'envoi de messages de test : vous pourriez être assimilé à un "spameur" et interdit d'expédition de courriers électroniques pendant une durée plus ou moins longue.
- La ligne qui précède l'objet converti avec base64 et celle qui suit DOIVENT IMPERATIVEMENT ÊTRE VIDES, même pas un espace, juste un retour à la ligne.
Sinon, seul le texte du mail arriverait à destination, SANS la pièce jointe.
Amitiés.