Bonjour,
Si l'on peut lire ses mails grâce à curl, on peut aussi en expédier avec une ou plusieurs pièces jointes.
Ce sujet est purement théorique puisque je ne l'ai pas encore testé.
La syntaxe
curl smtps://[serveur_smtp]:[port] --mail-from "[expediteur@serveur.com]" --mail-rcpt "[destinataire@serveur.com]" --ssl -u "[utilisateur]:[mot_de_passe]" -T mail.txt (ou autre nom de son choix)
La théorie
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
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: 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]"
objet codé 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]"
objet codé 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"
objet codé 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 text/plain,
contenant du texte et qui est text/html, text/css,
théoriquement lisible par un utilisateur. text/javascript
-----------------------------------------------------------------------------------------------------------------
Image Représente n'importe quelle image. image/png,
Les vidéos ne font pas partie de ce type image/jpeg, image/bmp,
bien que les images animées tels les GIFs image/svg+xlm
animés) font partie de ce type. image/gif, image/webp
-----------------------------------------------------------------------------------------------------------------
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
-----------------------------------------------------------------------------------------------------------------
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.
Recommandation
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.
Amusez-vous bien !
EDIT 20250405
Testé ce qui précède ce jour avec SUCCÈS.
Attention, la ligne qui précède et celle qui suit l'objet expédié codé avec base64 doivent IMPÉRATIVEMENT être vide, càd pas d'espace(s) parasite(s) ou autre.
Ne riez pas, ça m'est arrivé.
EDIT 20250411
Vous souhaitez envoyer votre mail à plusieurs destinataires ?
Dans la commande curl, ajoutez un :
--mail-rcpt ["destinataire2@serveur.com"]
et dans le fichier mail.txt, placez-le à la suite du 1er destinataire. Mettez une virgule entre les deux.
Si vous voulez que le destinataire principal ne voit pas un des destinataires, omettez-le dans le fichier mail.txt.