How to attach PDF to email using PHP mail function

2019-02-04 14:17发布

I am sending an email using PHP mail function, but I would like to add a specified PDF file as a file attachment to the email. How would I do that?

Here is my current code:

$to = "me@myemail.com";
$subject = "My message subject";
$message = "Hello,\n\nThis is sending a text only email, but I would like to add a PDF attachment if possible.";
$from = "Jane Doe <janedoe@myemail.com>";

$headers = "From:" . $from; 
mail($to,$subject,$message,$headers);

echo "Mail Sent!";

3条回答
ら.Afraid
2楼-- · 2019-02-04 14:47

You should consider using a PHP mail library such as PHPMailer which would make the procedure to send mail much simpler and better.

Here's an example of how to use PHPMailer, it's really simple!

<?php

require_once('../class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);

$mail->AddReplyTo("name@yourdomain.com","First Last");

$mail->SetFrom('name@yourdomain.com', 'First Last');

$mail->AddReplyTo("name@yourdomain.com","First Last");

$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

$mail->Subject    = "PHPMailer Test Subject via mail(), basic";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

?>

An alternative to PHPMailer is http://swiftmailer.org/

查看更多
姐就是有狂的资本
3楼-- · 2019-02-04 14:50

To eliminate deprecation errors,

Replace

$body             = eregi_replace("[\]",'',$body);

With

$body             = preg_replace('/\.([^\.]*$)/i','',$body);
查看更多
不美不萌又怎样
4楼-- · 2019-02-04 14:58

Simple answer: Don't do it. building a MIME email by hand is a painful business, and VERY easy to screw up.

Instead, use PHPMailer or Swiftmailer. It's almost trivial to do attachments with them, and you get FAR FAR FAR better feedback in case something does blow up, v.s. the simple true/false that mail() condescends to spit out.

查看更多
登录 后发表回答