8311 sujets

Développement web côté serveur, CMS

Bonjour à tous,
comment envoyer automatiquement un mail avec pièce jointe en php.
Je vous explique,
j'ai un formulaire qui récupère le mail et le nom de la personne et lorsqu'il clic sur "Envoyer"
cela l'inscrit et cela lui envoi un mail automatique dans lequel je voudrais attacher une piéce jointe style doc.pdf.
Comment faire en php.
code du mail auto

		$corps="";
		$corps.="Objet du message : DEMANDE DE DOC \r\n\r\n";
		$corps.="Nom : ".$_POST["nom"]."\r\n\r\n";
		$corps.="Message : ".$_POST["message"]."";

		$email_webmaster = $themailweb;
		$sujet = $_POST["titre"].";
        $header = "From: ".$_POST["email_client"]." <".$_POST["email_client"].">\r\n";


		if(mail($email_webmaster,$sujet,$corps,$header)){

Merci d'avance de votre aide
Cdt
Modifié par _laurent (21 Jan 2021 - 12:42)
cela ne fonctionne pas
j'ai un mail sans pièce jointe mais avec plain de code incompréhensible...
le voici

// On va dabors définir le fichier à envoyer et à qui
$fichier = 'bulletin.pdf';
$destinataire = $_POST["email_client"];
$sujet = 'Votre facture';
// On créer un boundary unique
$boundary = md5(uniqid(rand(), true));
// On met les entêtes
$entetes = 'Content-Type: multipart/mixed;'."n".' boundary="'.$boundary.'"';
$header = "From: ".$email_webmaster." <".$email_webmaster.">\r\n";

$body = 'This is a multi-part message in MIME format.'."n";
$body .= '--'.$boundary."n";
// ici, c'est la première partie, notre texte HTML (ou pas !)
// Là, on met l'entête
$body .= 'Content-Type: text/html; charset="UTF-8"'."n";
// On peut aussi mettres les autres (voir à la fin)
$body .= "n";
// On remet un deuxième retour à la ligne pour dire que les entêtes sont finie, on peut afficher notre texte !
$body .= 'Bonjour,
Voici ci-joint la facture de Juillet 2008 a payer sous 2 heures';
// Le texte est finie, on va faire un saut à la ligne
$body .= "n";
// Et on commence notre deuxième partie qui va contenir le PDF
$body .= '--'.$boundary."n";
// On lui dit (dans le Content-type) que c'est un fichier PDF
$body .= 'Content-Type: application/pdf; name="'.$fichier.'"'."n";
$body .= 'Content-Transfer-Encoding: base64'."n";
$body .= 'Content-Disposition: attachment; filename="'.$fichier.'"'."n";
// Les entêtes sont finies, on met un deuxième retour à la ligne
$body .= "n";
$source = file_get_contents($fichier);
$source = base64_encode ($source);
$source = chunk_split($source);
$body .= $source;
// On ferme la dernière partie :
$body .= "n".'--'.$boundary.'--';
// On envoi le mail :
if(mail($destinataire, $sujet, $body, $header, $entetes)){

je recois un mail style :
This is a multi-part message in MIME format.n--4a76ecd7d804cff7ec86d5578f6c6d46nContent-Type: text/html; charset="UTF-8"nnBonjour,
Voici ci-joint la facture de Juillet 2008 a payer sous 2 heuresn--4a76ecd7d804cff7ec86d5578f6c6d46nContent-Type: application/pdf; name="bulletin.pdf"nContent-Transfer-Encoding: base64nContent-Disposition: attachment; filename="bulletin.pdf"nnJVBERi0xLjYNJeLjz9MNCjEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvT0NQcm9wZXJ0aWVzPDwv
RDw8L09OWzExIDAgUiAxMiAwIFJdL09yZGVyIDEzIDAgUi9SQkdyb3Vwc1tdPj4vT0NHc1sxMSAw
IFIgMTIgMCBSXT4+L1BhZ2VzIDMgMCBSL1R5cGUvQ2F0YWxvZz4+DWVuZG9iag0yIDAgb2JqDTw8......
Modifié par _laurent (21 Jan 2021 - 12:43)
Ben regardes ce que cela a généré:
Type: application/pdf; name="bulletin.pdf"nContent-Transfer-Encoding: base64nContent-Disposition: attachment;
Modifié par comar91 (21 Jan 2021 - 13:05)
resultat,

This is a multi-part message in MIME format.
--2e5876095013f3265a7a4774dc78bd18
Content-Type: text/html; charset="UTF-8"

Bonjour,
Voici ci-joint la facture de Juillet 2008 a payer sous 2 heures
--2e5876095013f3265a7a4774dc78bd18
Content-Type: application/pdf; name="bulletin.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bulletin.pdf"

JVBERi0xLjYNJeLjz9MNCjEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvT0NQcm9wZXJ0aWVzPDwv
RDw8L09OWzExIDAgUiAxMiAwIFJdL09yZGVyIDEzIDAgUi9SQkdyb3Vwc1tdPj4vT0NHc1sxMSAw
IFIgMTIgMCBSXT4+L1BhZ2VzIDMgMCBSL1R5cGUvQ2F0YWxvZz4+DWVuZG9iag0yIDAgb2JqDTw8
L0xlbmd0aCA1ODIwMi9TdWJ0eXBlL1hNTC9UeXBlL01ldGFkYXRhPj5zdHJlYW0NCjw/eHBhY2tl..............

Modifié par spawns (21 Jan 2021 - 13:15)

// On va dabors définir le fichier à envoyer et à qui
$fichier = 'info.pdf';
$destinataire = $_POST["email_client"];
$sujet = 'Votre facture';
// On créer un boundary unique
$boundary = md5(uniqid(rand(), true));
// On met les entêtes
$entetes = 'Content-Type: multipart/mixed;'."\r\n".' boundary="'.$boundary.'"';
$header = "From: ".$email_webmaster." <".$email_webmaster.">\r\n";

$body = 'This is a multi-part message in MIME format.'."\r\n";
$body .= '--'.$boundary."\r\n";
// ici, c'est la première partie, notre texte HTML (ou pas !)
// Là, on met l'entête
$body .= 'Content-Type: text/html; charset="UTF-8"'."\r\n";
// On peut aussi mettres les autres (voir à la fin)
$body .= "\r\n";
// On remet un deuxième retour à la ligne pour dire que les entêtes sont finie, on peut afficher notre texte !
$body .= 'Bonjour,
Voici ci-joint la facture de Juillet 2008 a payer sous 2 heures';
// Le texte est finie, on va faire un saut à la ligne
$body .= "\r\n";
// Et on commence notre deuxième partie qui va contenir le PDF
$body .= '--'.$boundary."\r\n";
// On lui dit (dans le Content-type) que c'est un fichier PDF
$body .= 'Content-Type: application/pdf; name="'.$fichier.'"'."\r\n";
$body .= 'Content-Transfer-Encoding: base64'."\r\n";
$body .= 'Content-Disposition: attachment; filename="'.$fichier.'"'."\r\n";
// Les entêtes sont finies, on met un deuxième retour à la ligne
$body .= "\r\n";
$source = file_get_contents($fichier);
$source = base64_encode ($source);
$source = chunk_split($source);
$body .= $source;
// On ferme la dernière partie :
$body .= "\r\n".'--'.$boundary.'--';
// On envoi le mail :
if(mail($destinataire, $sujet, $body, $header, $entetes)){....

Modifié par spawns (21 Jan 2021 - 13:45)
pareil pas de pièce jointe,
résultat
This is a multi-part message in MIME format.
--014a0569198bb3c4fc32e3cc633ae8ab
Content-Type: text/html; charset="UTF-8"

Bonjour,
Voici ci-joint la facture de Juillet 2008 a payer sous 2 heures
--014a0569198bb3c4fc32e3cc633ae8ab
Content-Type: application/octet-stream; name="info.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="info.pdf"

JVBERi0xLjUNJeLjz9MNCjIyMCAwIG9iag08PC9MaW5lYXJpemVkIDEvTCA4MTUzNS9PIDIyMi9F
IDY3NDAzL04gMi9UIDgxMTkwL0ggWyA1MTkgMjM0XT4+DWVuZG9iag0gICAgICAgICAgICAgICAg
DQoyNDUgMCBvYmoNPDwvRGVjb2RlUGFybXM8PC9Db2x1bW5zIDQvUHJlZGljdG9yIDEyPj4vRmls
dGVyL0ZsYXRlRGVjb2RlL0lEWzwzOURCNzAzREJCODc2RTQ2QUQwQjg2MjhFRUE0NjNDOD48REQ3
MzEyOEUzQTMxNEE0NUJCQUNDRDVDQjFDNEFEM0E+XS9JbmRleFs.........
Voir mail
Après un certain nombre d'essais voici un code qui fonctionne
<?php
$fichier = 'info.pdf';
// mettre à jour $destinataire 
$destinataire = 'adrmail';
$sujet = 'Votre facture';

// mettre à jour $emmet
$emmet = 'adrmail';

// mettre à jour $path
$path = 'https://url du fichier';
$content = chunk_split(base64_encode(file_get_contents($path.$fichier)));
$uid = md5(uniqid(time()));


$eol = "\r\n";
$hed = 'From: Test  <'.$emmet.'>'.$eol;
$hed .= 'Return-Path: <'.$emmet.'>'.$eol;
$hed .= "MIME-Version: 1.0\r\n";
$hed .= 'Reply-To: '.$emmet.$eol;
// mettre à jour nomdusite
$hed .= 'X-Sender: <nomdusite>'.$eol;
$hed .= 'X-Mailer: PHP'.$eol;
$hed .= 'X-abuse-contact: '.$emmet.$eol;
$hed .= "Date: ".date("D, j M Y G:i:s O").$eol;
$hed .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"";


$message = "--".$uid.$eol;
$message .= "Content-Type: text/html; charset=ISO-8859-1".$eol;
$message .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$message .= 'Voici ci-joint la facture de Juillet 2008 a payer sous 2 heures'.$eol;
$message .= "--".$uid.$eol;
$message .= "Content-Type: application/octet-stream; name=\"".$fichier."\"".$eol;
$message .= "Content-Transfer-Encoding: base64".$eol;
$message .= "Content-Disposition: attachment; filename=\"".$fichier."\"".$eol.$eol;
$message .= $content.$eol;
$message .= "--".$uid."--";


if (mail($destinataire, $sujet, $message, $hed)) {
  die ('OK ');
} else {
  die ('KO ');
}

Modifié par comar91 (22 Jan 2021 - 12:05)
Meilleure solution