Créer classe d'envoi mail avec pièces jointes
moimp
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
moimp Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
moimp Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je crée une classe d'envoi de mails au format texte et html avec une ou plusieurs pièces jointes.
Cette classe est basée sur le tuto https://www.commentcamarche.net/faq/2761-langages-envoyer-un-mail-avec-piece-jointe
Sans pièces jointes, aucun problème.
Avec une pièce jointe, le client reçoit non pas une mais deux pièces jointes.
La première contient le texte du message au format html, la deuxième contient un fichier vide nommé comme le fichier initial.
Une petite aide serait bienvenue.
Cordialement
Voici le code de la méthode d'envoi:
Je crée une classe d'envoi de mails au format texte et html avec une ou plusieurs pièces jointes.
Cette classe est basée sur le tuto https://www.commentcamarche.net/faq/2761-langages-envoyer-un-mail-avec-piece-jointe
Sans pièces jointes, aucun problème.
Avec une pièce jointe, le client reçoit non pas une mais deux pièces jointes.
La première contient le texte du message au format html, la deuxième contient un fichier vide nommé comme le fichier initial.
Une petite aide serait bienvenue.
Cordialement
Voici le code de la méthode d'envoi:
<?php public function sending() { if (empty($this->to) and empty($this->cc) and empty($this->bcc)) throw new DomainException("No valid recipient"); $attached = false; if (!empty($this->files)) { $attached = true; $attachements = []; } // 'Boundary' fixing $boundary = md5(uniqid(time())); // Assembly of addresses if (!empty($this->to)) $toLine = implode(', ', $this->to); // headers definition $headers = []; $headers[] = 'From: ' . $this->fromLine; if ($this->replyAddress) $headers[] = 'Reply-to: ' . $this->addressConcat($this->replyAddress, $this->replyName); if (!empty($this->cc)) $headers[] = 'Cc: ' . implode(', ', $this->cc ); if (!empty($this->bcc)) $headers[] = 'Bcc: ' . implode(', ', $this->bcc ); //$headers[] = "X-Priority: 1 "; $headers[] = 'MIME-Version: 1.0'; $contentType = $attached ? 'mixed' : 'alternative'; $headers[] = "Content-Type: multipart/$contentType; boundary=\"$boundary\""; // Définition du type et de la boundary $header = implode(self::CRLF, $headers) . self::CRLF . self::CRLF; // Message body if (! $attached) { // sans pièces jointes // opening $message = []; $message[] = "--$boundary"; // adding plain text $message[] = "Content-Type: text/plain; charset=\"ISO-8859-1\""; $message[] = "Content-Transfer-Encoding: 8bit" . self::CRLF; $message[] = $this->plainText . self::CRLF; // boundary $message[] = "--$boundary"; // adding html text $message[] = "Content-Type: text/html; charset=\"ISO-8859-1\""; $message[] = "Content-Transfer-Encoding: 8bit" . self::CRLF; $message[] = $this->htmlText . self::CRLF; // Boundaries double closing (one for each message format) $message[] = "--$boundary"; $message[] = "--$boundary"; $message = implode(self::CRLF, $message) . "--$boundary--"; //var_dump(__line__, $message); } else { // avec pièces jointes // opening $message = []; $message[] = "--$boundary"; // adding plain text $message[] = "Content-Type: text/plain; charset=\"ISO-8859-1\""; $message[] = "Content-Transfer-Encoding: 8bit" . self::CRLF; $message[] = $this->plainText . self::CRLF; // boundary $message[] = "--$boundary"; // adding html text $message[] = "Content-Type: text/html; charset=\"ISO-8859-1\""; $message[] = "Content-Transfer-Encoding: 8bit" . self::CRLF; $message[] = $this->htmlText . self::CRLF; $message[] = self::CRLF; // adding attachements foreach ($this->files as $name=>$file) { $message[] = "--$boundary"; // declaring each attachement $message[] = "Content-type: " . $file['type'] . "; name=\"$name\""; $message[] = "Content-Transfer-Encoding: base64"; $message[] = "Content-Disposition: attachement; filename=\"$name\""; $message[] = chunk_split(base64_encode(file_get_contents($file['tmp_name']))); $message[] = self::CRLF; // ????????? //$message[] = "--$boundary"; } $message = implode(self::CRLF, $message) . "--$boundary--"; } // Sending $check = false; if ($this->fromAddress) { //var_dump(__line__, $toLine, $this->strSubject, $message, $header); $check = mail($toLine, $this->strSubject, $message, $header); } return $check; } ?>
A voir également:
- Créer classe d'envoi mail avec pièces jointes
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer une adresse mail hotmail - Guide
- Telecharger toutes les pieces jointes gmail - Guide
- Créer un lien pour partager des photos - Guide
2 réponses
Bonjour,
Pourquoi tu veux réinventer la roue, je te conseil d'utiliser une librairie simple du genre PHPMailer.
https://github.com/PHPMailer/PHPMailer
Pourquoi tu veux réinventer la roue, je te conseil d'utiliser une librairie simple du genre PHPMailer.
https://github.com/PHPMailer/PHPMailer
Pourquoi réinventer la roue?
Tout d'abord parce que je ne suis pas encore un expert en php et il me paraît plus pédagogique d'apprendre à faire que de consommer.
Ensuite, dans la pléthore des outils je ne savais pas lequel choisir.
Dans les features de PHPMailer, l'envoi de pièces jointe n'est pas mentionné (par contre, on le voit dans les exemples)
Enfin, je n'ai jamais utilisé de librairies externes et je ne sais pas comment les intégrer.
Tout d'abord parce que je ne suis pas encore un expert en php et il me paraît plus pédagogique d'apprendre à faire que de consommer.
Ensuite, dans la pléthore des outils je ne savais pas lequel choisir.
Dans les features de PHPMailer, l'envoi de pièces jointe n'est pas mentionné (par contre, on le voit dans les exemples)
Enfin, je n'ai jamais utilisé de librairies externes et je ne sais pas comment les intégrer.
J'ai installé et testé une configuration minimale avec:
- phpmailer
- smtp
- pop3
- phpmailer.lang-fr
- test
J'ai configuré le test avec les données de ma messagerie et tout fonctionne en local (wampserver).
J'ai aussi essayé de ne rien configurer pour la partie smtp et tout fonctionne aussi sauf un message de retour mail delivery system avec le message "said: 501 Syntax error - line too long".
Le but de cette non-configuration est de voir comment adapter la configuration pour un hébergement mutualisé dont je ne connais pas les paramètres SMTP.
Si l'absence de configuration SMTP fonctionne en local, elle devrait aussi fonctionner sur l'hébergement mutualisé, avec l'inconvénient de cette non-distribution (mail delivery system).
- phpmailer
- smtp
- pop3
- phpmailer.lang-fr
- test
J'ai configuré le test avec les données de ma messagerie et tout fonctionne en local (wampserver).
J'ai aussi essayé de ne rien configurer pour la partie smtp et tout fonctionne aussi sauf un message de retour mail delivery system avec le message "said: 501 Syntax error - line too long".
Le but de cette non-configuration est de voir comment adapter la configuration pour un hébergement mutualisé dont je ne connais pas les paramètres SMTP.
Si l'absence de configuration SMTP fonctionne en local, elle devrait aussi fonctionner sur l'hébergement mutualisé, avec l'inconvénient de cette non-distribution (mail delivery system).