250 votes

Envoyer des pièces jointes avec la fonction Mail() de PHP ?

J’ai besoin d’envoyer un fichier pdf avec mail, est-ce possible ? Il s’agit de mon script de mail :

Ce que je dois ajouter ?

341voto

SDC Points 7176

Je suis d'accord avec @MihaiIorga dans les commentaires -- utiliser les PHPMailer script. Vous semblez comme vous êtes la rejeter parce que vous voulez l'option plus facile. Trus moi, PHPMailer est l'option plus facile.... par une très grande marge par rapport à essayer de faire vous-même avec de PHP ( mail() fonction. PHP mail() fonction n'est vraiment pas très bon.

Pour utiliser PHPMailer:

  • Télécharger le PHPMailer script à partir d'ici: http://github.com/PHPMailer/PHPMailer
  • Décompressez l'archive et copiez le script du dossier à un endroit pratique dans votre projet.
  • Inclure le principal fichier de script -- require_once('path/to/file/class.phpmailer.php');

Maintenant, l'envoi d'e-mails avec des pièces jointes va d'être incroyablement difficile à incroyablement facile:

$email = new PHPMailer();
$email->From      = 'you@example.com';
$email->FromName  = 'Your Name';
$email->Subject   = 'Message Subject';
$email->Body      = $bodytext;
$email->AddAddress( 'destinationaddress@example.com' );

$file_to_attach = 'PATH_OF_YOUR_FILE_HERE';

$email->AddAttachment( $file_to_attach , 'NameOfFile.pdf' );

return $email->Send();

C'est juste que une ligne, $email->AddAttachment(); -- vous ne pouvez pas demander plus facile.

Si vous le faites avec PHP mail() fonction, vous devrez écrire des piles de code, et vous aurez probablement beaucoup de vraiment difficile de trouver des bugs.

225voto

Pragnesh Chauhan Points 3820

vous pouvez essayer d’utiliser code ci-dessous :

22voto

Matthew Johnson Points 1438

Swiftmailer est une autre facile-à-utiliser un script qui protège automatiquement contre le courrier électronique de l'injection et rend les pièces jointes un jeu d'enfant. J'ai aussi fortement décourager les à l'aide de PHP ( mail() fonction.

Pour l'utiliser:

  • Télécharger Swiftmailer, et de la place de l' lib dossier de votre projet
  • Inclure le fichier principal à l'aide de require_once 'lib/swift_required.php';

Maintenant, ajoutez le code lorsque vous avez besoin de mail:

// Create the message
$message = Swift_Message::newInstance()
    ->setSubject('Your subject')
    ->setFrom(array('webmaster@mysite.com' => 'Web Master'))
    ->setTo(array('receiver@example.com'))
    ->setBody('Here is the message itself')
    ->attach(Swift_Attachment::fromPath('myPDF.pdf'));

//send the message          
$mailer->send($message);

Plus d'informations et d'options peut être trouvé dans la Swiftmailer Docs.

17voto

hmb Points 849

Pour envoyer un e-mail avec pièce jointe, nous devons utiliser le MIME multipart/mixed type qui spécifie que le mélange de types seront inclus dans le courriel. En outre, nous voulons utiliser multipart/alternative de type MIME pour envoyer à la fois simple texte et la version HTML de l'email.Jetez un oeil à l'exemple:

<?php 
//define the receiver of the email 
$to = 'youraddress@example.com'; 
//define the subject of the email 
$subject = 'Test email with attachment'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents('attachment.zip'))); 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/zip; name="attachment.zip"  
Content-Transfer-Encoding: base64  
Content-Disposition: attachment  

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail( $to, $subject, $message, $headers ); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?>

Comme vous pouvez le voir, l'envoi d'un e-mail avec pièce jointe est facile à accomplir. Dans l'exemple précédent, nous avons MIME multipart/mixed type, et à l'intérieur nous avons multipart/alternative type MIME qui spécifie deux versions de l'e-mail. Pour ajouter une pièce jointe à notre message, on peut lire les données à partir du fichier spécifié dans une chaîne de caractères, le coder avec base64, le couper en petits morceaux pour s'assurer qu'il correspond aux spécifications MIME et de l'inclure comme une pièce jointe.

Prises à partir d' ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X