Bonjour,
Je souhaite faire quelque chose mais je ne sais pas si c'est possible ou non.
Je conçois un quiz en utilisant l'outil storyline360. A la fin de celui-ci il peut cliquer sur un bouton qui ouvrira un nouvel onglet avec le récapitulatif de ses réponses. Il s'agit d'un fichier html qui s'execute pour cela.
Avec l'aide de chatGPT, j'ai pu faire en sorte qu'en plus de l'onglet qui s'ouvre avec le récapitulatif, un fichier pdf avec ce récapitulatif (dans un tableau plus beau) se télécharge automatiquement. Pour cela, j'ai ajouté des lignes de codes que m'a fourni chat GPT au fichier html en utilisant Sublime Text.
Maintenant, ce que je souhaite faire, c'est qu'en plus de tout cela, une commande "mailto" s'enclenche (en quelque sorte une nouvel fenêtre l'invitant à envoyer un mail s'ouvre) avec le fichier pdf récapitulatif en pièce jointe. Pour qu'il l'envoie à son responsable.
Est-ce que cela est possible ? chatGPT n'a pas réussi à le faire.
Je vous rmercie énormément pour votre aide précieuse !
Bonjour,
Pour cela il te suffit de prim'abord d'avoir le chemin vers ton fichier, d'avoir un identifiant unique car ton email sera découpé en paquets (c'est ce qu'on appelle un boundary), et l'adresse mail du destinataire et de l'expéditeur. Nous construirons ainsi le corps avec ces paramètres.
$fichier = "/var/www/site/public/tmp/monfichier.pdf";
$nomFichier = pathinfo($fichier, PATHINFO_FILENAME) . pathinfo($fichier, PATHINFO_EXTENSION); //cette fonction retourne le nom du fichier et son extension sans le chemin
$contenuFichierBase64 = chunk_split(base64_encode(file_gets_contents($fichier))); //On a le contenu du fichier en Base64
$destinataire= "adolf.hitler@gmail.com";
$expediteur = "benito.mussolini@gmail.com";
$sujet = "Réunion ASAP pour une alliance militaire contractuelle.";
$boundary = md5(uniqid(rand(), true)); //Notre identifiant aléatoire
$entete = 'Content-Type: multipart/mixed;'."\\n".' boundary="$boundary"'; //Le antislash -n est un passage à la ligne, il doit obligatoirement être dans une double quote afin qu'il prenne effet
//On va formater notre mail en HTML, comme ça il pourra être enrichi par la suite.
$body = <<<HTML
Content-Type: text/html; charset="UTF-8"
Ici commence la partie textuelle du message.
Vous pouvez mettre tout et n'importe quoi encodé en texte HTML.
--$boundary
Content-Type: application/pdf; name="$nomFichier";
Content-Transfer-Encoding: base64;
Content-Disposition: attachment; filename="$nomFichier";
$contenuFichierBase64
--$boundary--
HTML;
/*
Tu remarquera que les entêtes décrivent le message que l'on va faire passer par dessous, pdf pour le pdf et HTML pour le corps du mail, à modifier en fonction du fichier que tu fait passer. UTF-8 permet d'avoir les caractères spéciaux tels les accents (nécessite d'avoir installé php-mbstring ce qui est généralement déjà le cas), il ne nous reste plus qu'a envoyer le mail avec l'entete multipart.
*/
mail($destinataire, $sujet, $body, $entete);
Et voilà ça devrait être bon pour envoyer des pièces jointes, ce que je te conseilles c'est de te créer une fonction comme celle là :
envoyerMailPJ(string $destinataire, string $sujet, string $corps, ...cheminFichiers) {
foreach($cheminFichier as $fichier) {
//et ici ça ajoute les pièces jointes à ton mail
}
}
Comme ça tu écris une seule fois le code et après avec une simple fonctions tu peux envoyer d'autres mails avec PJ facilement.
Si tu as un problème n'hésite pas.
Cordialement, Brieg Luz.