PHP Sending Emails with File Attachments - Email N

2019-01-28 17:48发布

After trying to read various articles on sending emails with attachments in PHP (I am use to ASP with VBScript), I wrote the code below. Unfortunately, it does not work at all. Not only does it not send the email with the attachment, the email doesn't seem to send at all, even though my script says that it did send. Where have I gone wrong? I'm not using a form to upload a file. This is a static script.

<?php

$EmailTo = "Me@here.com";
$EmailFrom = "You@There.com";
$EmailSubject = "The Email Subject";

$MailBoundary = md5(uniqid(time()));

$Headers = "To: ". $EmailTo . "\r\n";
$Headers .= "From: ". $EmailFrom . "\r\n";
$Headers = "MIME-Version: 1.0\r\n";
$Headers .= "Content-type: multipart/mixed;boundary=\"$MailBoundary \"";
$Headers .= "\r\n\r\n";
$Headers .= "This is a multi-part message in MIME format.";
$Headers .= "\r\n\r\n";

$FileAttachment = "AttachedFile.pdf";
$File = fopen($FileAttachment, "r");
$FileData = fread($File, filesize($FileAttachment));
$FileData = chunk_split(base64_encode($FileData));
$FileName = basename($FileAttachment);

$EmailBody = "--$MailBoundary\r\n";
$EmailBody .= "Content-type: text/html; charset=iso-8859-1\r\n";
$EmailBody .= "Content-transfer-encoding: 8bit\r\n\r\n";

$EmailBody .= "<html>" . chr(13) .
              "<head>" . chr(13) .
              "<style>" . chr(13) .
              ".breg {font-family:arial;font-size:10pt;color:#000000;padding:5px;}" . chr(13) .
              "</style>" . chr(13) .
              "</head>" . chr(13) .
              "<body>" . chr(13) .
              "<div class=" . chr(34) . "breg" . chr(34) . ">" . chr(13) .
              "The message text body goes here" . chr(13) .
              "</div>" . chr(13) .
              "</body>" . chr(13) .
              "</html>";

$EmailBody .= "--$MailBoundary\r\n";


$EmailBody .= "Content-type: " . mime_content_type($File) . "; name=$FileName\r\n";
$EmailBody .= "Content-transfer-encoding:base64\r\n\r\n";
$EmailBody .= $FileData. "\r\n\r\n";

$EmailBody .= " --$MailBoundary--";

if (mail($EmailTo, $EmailSubject, $EmailBody, $Headers))
{
 echo "Email to " . $EmailTo . " has been sent" . chr(13) . "<br />" . chr(13);
}
else
{
 echo "<b>Email to " . $EmailTo . " was not sent</b>" . chr(13) . "<br />" . chr(13);
}

?>

2条回答
小情绪 Triste *
2楼-- · 2019-01-28 18:29
For sending mail with attachment using php mail().Try this code:

<?php

 //If there is no error, send the email
 if(isset($_POST['ur_submit_button_name'])) {
  $EmailTo = "Me@here.com";
  $EmailFrom = "You@There.com";
  $EmailSubject = "The Email Subject";


  $separator = md5(time());

  // carriage return type (we use a PHP end of line constant)
  $eol = PHP_EOL;

  // attachment name
  $filename = "ip.zip";//store that zip file in ur root directory
  $attachment = chunk_split(base64_encode(file_get_contents('ip.zip')));

  // main header
  $headers  = "From: ".$from.$eol;
  $headers .= "MIME-Version: 1.0".$eol; 
  $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";

  // no more headers after this, we start the body! //

  $body = "--".$separator.$eol;
  $body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
  $body .= "This is a MIME encoded message.".$eol;

  // message
  $body .= "--".$separator.$eol;
  $body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
  $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  $body .= $message.$eol;

  // attachment
  $body .= "--".$separator.$eol;
  $body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
  $body .= "Content-Transfer-Encoding: base64".$eol;
  $body .= "Content-Disposition: attachment".$eol.$eol;
  $body .= $attachment.$eol;
  $body .= "--".$separator."--";

  // send message
  if (mail($to, $subject, $body, $headers)) {
  $mail_sent=true;
  echo "mail sent";
  } else {
  $mail_sent=false;
  echo "Error,Mail not sent";

 }
}

?>
查看更多
Viruses.
3楼-- · 2019-01-28 18:39

i think you have an error in your email content, generate your email content with imap_mail_compose function:

mail('', 'message subject', '', imap_mail_compose(array header, array body)); 
查看更多
登录 后发表回答