Отправить вложения с помощью PHP Mail ()?

Мне нужно отправить PDF с почтой, возможно ли это?

$to = "xxx"; $subject = "Subject" ; $message = 'Example message with <b>html</b>'; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $headers .= 'From: xxx <xxx>' . "\r\n"; mail($to,$subject,$message,$headers); 

Что мне не хватает?

Я согласен с @MihaiIorga в комментариях – используйте скрипт PHPMailer. Похоже, вы отклоняете его, потому что вам нужен более простой вариант. Поверьте мне, PHPMailer это более простой вариант с очень большой разницей по сравнению с попыткой сделать это самостоятельно с помощью встроенной функции PHP mail() . Функция PHP mail() действительно не очень хороша.

Чтобы использовать PHPMailer:

  • Загрузите скрипт PHPMailer отсюда: http://github.com/PHPMailer/PHPMailer
  • Извлеките архив и скопируйте папку сценария в удобное место в вашем проекте.
  • Включите основной файл сценария – require_once('path/to/file/class.phpmailer.php');

Теперь отправка электронных писем с вложениями идет от безумно сложного до невероятно легкого:

 $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(); 

Просто одна строка $email->AddAttachment(); – Вы не могли бы попросить о нем легче.

Если вы сделаете это с помощью функции mail() PHP, вы будете писать стопки кода, и, вероятно, вам будет очень сложно найти ошибки.

Вы можете попробовать использовать следующий код:

  $filename = 'myfile'; $path = 'your path goes here'; $file = $path . "/" . $filename; $mailto = 'mail@mail.com'; $subject = 'Subject'; $message = 'My message'; $content = file_get_contents($file); $content = chunk_split(base64_encode($content)); // a random hash will be necessary to send mixed content $separator = md5(time()); // carriage return type (RFC) $eol = "\r\n"; // main header (multipart mandatory) $headers = "From: name <test@test.com>" . $eol; $headers .= "MIME-Version: 1.0" . $eol; $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol; $headers .= "Content-Transfer-Encoding: 7bit" . $eol; $headers .= "This is a MIME encoded message." . $eol; // message $body = "--" . $separator . $eol; $body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol; $body .= "Content-Transfer-Encoding: 8bit" . $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; $body .= $content . $eol; $body .= "--" . $separator . "--"; //SEND Mail if (mail($mailto, $subject, $body, $headers)) { echo "mail send ... OK"; // or use booleans here } else { echo "mail send ... ERROR!"; print_r( error_get_last() ); } 

Для обновления безопасности PHP 5.5.27

 $file = $path.$filename; $content = file_get_contents( $file); $content = chunk_split(base64_encode($content)); $uid = md5(uniqid(time())); $name = basename($file); // header $header = "From: ".$from_name." <".$from_mail.">\r\n"; $header .= "Reply-To: ".$replyto."\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; // message & attachment $nmessage = "--".$uid."\r\n"; $nmessage .= "Content-type:text/plain; charset=iso-8859-1\r\n"; $nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; $nmessage .= $message."\r\n\r\n"; $nmessage .= "--".$uid."\r\n"; $nmessage .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; $nmessage .= "Content-Transfer-Encoding: base64\r\n"; $nmessage .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; $nmessage .= $content."\r\n\r\n"; $nmessage .= "--".$uid."--"; if (mail($mailto, $subject, $nmessage, $header)) { return true; // Or do something here } else { return false; } 

Swiftmailer – еще один простой в использовании скрипт, который автоматически защищает от электронной почты и делает вложения легким. Я также категорически отвергаю использование встроенной функции PHP mail() .

Использовать:

  • Загрузите Swiftmailer и поместите папку lib в свой проект.
  • Включите основной файл, используя require_once 'lib/swift_required.php';

Теперь добавьте код, когда вам нужно отправить сообщение:

 // 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); 

Более подробную информацию и параметры можно найти в Документах Swiftmailer .

Чтобы отправить электронное письмо с вложением, нам нужно использовать тип MIME с множественным / смешанным, который указывает, что смешанные типы будут включены в электронную почту. Более того, мы хотим использовать многопользовательский / альтернативный тип MIME для отправки как текстовой, так и HTML-версии письма. Посмотрите пример:

 <?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"; ?> 

Как вы можете видеть, отправить электронное письмо с вложением легко. В предыдущем примере у нас есть множественный / смешанный тип MIME, и внутри него мы имеем множественный / альтернативный тип MIME, который указывает две версии электронной почты. Чтобы включить приложение в наше сообщение, мы считываем данные из указанного файла в строку, кодируем его с помощью base64, разбиваем на меньшие куски, чтобы убедиться, что он соответствует спецификациям MIME, а затем включите его в качестве вложения.

Взято отсюда .

Рабочая концепция:

 if (isset($_POST['submit'])) { $mailto = $_POST["mailTo"]; $from_mail = $_POST["fromEmail"]; $replyto = $_POST["fromEmail"]; $from_name = $_POST["fromName"]; $message = $_POST["message"]; $subject = $_POST["subject"]; $filename = $_FILES["fileAttach"]["name"]; $content = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); $uid = md5(uniqid(time())); $name = basename($file); $header = "From: " . $from_name . " <" . $from_mail . ">\r\n"; $header .= "Reply-To: " . $replyto . "\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n"; $header .= "This is a multi-part message in MIME format.\r\n"; $header .= "--" . $uid . "\r\n"; // You add html "Content-type: text/html; charset=utf-8\n" or for Text "Content-type:text/plain; charset=iso-8859-1\r\n" by I.khan $header .= "Content-type:text/html; charset=utf-8\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; // User Message you can add HTML if You Selected HTML content $header .= "<div style='color: red'>" . $message . "</div>\r\n\r\n"; $header .= "--" . $uid . "\r\n"; $header .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n"; // use different content types here $header .= "Content-Transfer-Encoding: base64\r\n"; $header .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n"; // For Attachment $header .= $content . "\r\n\r\n"; $header .= "--" . $uid . "--"; if (mail($mailto, $subject, "", $header)) { echo "<script>alert('Success');</script>"; // or use booleans here } else { echo "<script>alert('Failed');</script>"; } } 

После некоторого непродолжительного конфликта с плохо отформатированными вложениями, это код, в котором я закончил:

 $email = new PHPMailer(); $email->From = 'from@somedomain.com'; $email->FromName = 'FromName'; $email->Subject = 'Subject'; $email->Body = 'Body'; $email->AddAddress( 'to@somedomain.com' ); $email->AddAttachment( "/path/to/file" , "filename.ext", 'base64', 'application/octet-stream' ); $email->Send(); 

Это работает для меня. Он также прикрепляет несколько приложений. без труда

 <?php if($_POST && isset($_FILES['file'])) { $recipient_email = "recipient@yourmail.com"; //recepient $from_email = "info@your_domain.com"; //from email using site domain. $subject = "Attachment email from your website!"; //email subject line $sender_name = filter_var($_POST["s_name"], FILTER_SANITIZE_STRING); //capture sender name $sender_email = filter_var($_POST["s_email"], FILTER_SANITIZE_STRING); //capture sender email $sender_message = filter_var($_POST["s_message"], FILTER_SANITIZE_STRING); //capture message $attachments = $_FILES['file']; //php validation if(strlen($sender_name)<4){ die('Name is too short or empty'); } if (!filter_var($sender_email, FILTER_VALIDATE_EMAIL)) { die('Invalid email'); } if(strlen($sender_message)<4){ die('Too short message! Please enter something'); } $file_count = count($attachments['name']); //count total files attached $boundary = md5("sanwebe.com"); if($file_count > 0){ //if attachment exists //header $headers = "MIME-Version: 1.0\r\n"; $headers .= "From:".$from_email."\r\n"; $headers .= "Reply-To: ".$sender_email."" . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; //message text $body = "--$boundary\r\n"; $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; $body .= chunk_split(base64_encode($sender_message)); //attachments for ($x = 0; $x < $file_count; $x++){ if(!empty($attachments['name'][$x])){ if($attachments['error'][$x]>0) //exit script and output error if we encounter any { $mymsg = array( 1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini", 2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", 3=>"The uploaded file was only partially uploaded", 4=>"No file was uploaded", 6=>"Missing a temporary folder" ); die($mymsg[$attachments['error'][$x]]); } //get file info $file_name = $attachments['name'][$x]; $file_size = $attachments['size'][$x]; $file_type = $attachments['type'][$x]; //read file $handle = fopen($attachments['tmp_name'][$x], "r"); $content = fread($handle, $file_size); fclose($handle); $encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045) $body .= "--$boundary\r\n"; $body .="Content-Type: $file_type; name="$file_name"\r\n"; $body .="Content-Disposition: attachment; filename="$file_name"\r\n"; $body .="Content-Transfer-Encoding: base64\r\n"; $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; $body .= $encoded_content; } } }else{ //send plain email otherwise $headers = "From:".$from_email."\r\n". "Reply-To: ".$sender_email. "\n" . "X-Mailer: PHP/" . phpversion(); $body = $sender_message; } $sentMail = @mail($recipient_email, $subject, $body, $headers); if($sentMail) //output success or failure messages { die('Thank you for your email'); }else{ die('Could not send mail! Please check your PHP mail configuration.'); } } ?> При этом <?php if($_POST && isset($_FILES['file'])) { $recipient_email = "recipient@yourmail.com"; //recepient $from_email = "info@your_domain.com"; //from email using site domain. $subject = "Attachment email from your website!"; //email subject line $sender_name = filter_var($_POST["s_name"], FILTER_SANITIZE_STRING); //capture sender name $sender_email = filter_var($_POST["s_email"], FILTER_SANITIZE_STRING); //capture sender email $sender_message = filter_var($_POST["s_message"], FILTER_SANITIZE_STRING); //capture message $attachments = $_FILES['file']; //php validation if(strlen($sender_name)<4){ die('Name is too short or empty'); } if (!filter_var($sender_email, FILTER_VALIDATE_EMAIL)) { die('Invalid email'); } if(strlen($sender_message)<4){ die('Too short message! Please enter something'); } $file_count = count($attachments['name']); //count total files attached $boundary = md5("sanwebe.com"); if($file_count > 0){ //if attachment exists //header $headers = "MIME-Version: 1.0\r\n"; $headers .= "From:".$from_email."\r\n"; $headers .= "Reply-To: ".$sender_email."" . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; //message text $body = "--$boundary\r\n"; $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; $body .= chunk_split(base64_encode($sender_message)); //attachments for ($x = 0; $x < $file_count; $x++){ if(!empty($attachments['name'][$x])){ if($attachments['error'][$x]>0) //exit script and output error if we encounter any { $mymsg = array( 1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini", 2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", 3=>"The uploaded file was only partially uploaded", 4=>"No file was uploaded", 6=>"Missing a temporary folder" ); die($mymsg[$attachments['error'][$x]]); } //get file info $file_name = $attachments['name'][$x]; $file_size = $attachments['size'][$x]; $file_type = $attachments['type'][$x]; //read file $handle = fopen($attachments['tmp_name'][$x], "r"); $content = fread($handle, $file_size); fclose($handle); $encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045) $body .= "--$boundary\r\n"; $body .="Content-Type: $file_type; name="$file_name"\r\n"; $body .="Content-Disposition: attachment; filename="$file_name"\r\n"; $body .="Content-Transfer-Encoding: base64\r\n"; $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; $body .= $encoded_content; } } }else{ //send plain email otherwise $headers = "From:".$from_email."\r\n". "Reply-To: ".$sender_email. "\n" . "X-Mailer: PHP/" . phpversion(); $body = $sender_message; } $sentMail = @mail($recipient_email, $subject, $body, $headers); if($sentMail) //output success or failure messages { die('Thank you for your email'); }else{ die('Could not send mail! Please check your PHP mail configuration.'); } } ?> 

В итоге я написал собственную функцию отправки / кодирования электронной почты. Это хорошо сработало для отправки PDF-вложений. Я не использовал другие функции в производстве.

Примечание. Несмотря на то, что спецификация достаточно решительная, что вы должны использовать \ r \ n для разделения заголовков, я нашел, что это работает только тогда, когда я использовал PHP_EOL. Я тестировал это только на Linux. YMMV

 <?php # $args must be an associative array # required keys: from, to, body # body can be a string or a [tree of] associative arrays. See examples below # optional keys: subject, reply_to, cc, bcc # EXAMPLES: # # text-only email: # email2(array( # 'from' => 'noreply@foo.com', # 'to' => 'jason@jasonwoof.com', # 'subject' => 'test', # # body will be text/plain because we're passing a string that doesn't start with '<' # 'body' => 'Hi, testing 1 2 3', # )); # # # html-only email # email2(array( # 'from' => 'noreply@foo.com', # 'to' => 'jason@jasonwoof.com', # 'subject' => 'test', # # body will be text/html because we're passing a string that starts with '<' # 'body' => '<h1>Hi!</h1>I like <a href="http://cheese.com">cheese</a>', # )); # # # text-only email (explicitly, in case first character is dynamic or something) # email2(array( # 'from' => 'noreply@foo.com', # 'to' => 'jason@jasonwoof.com', # 'subject' => 'test', # # body will be text/plain because we're passing a string that doesn't start with '<' # 'body' => array( # 'type' => 'text', # 'body' => $message_text, # ) # )); # # # email with text and html alternatives (auto-detected mime types) # email2(array( # 'from' => 'noreply@foo.com', # 'to' => 'jason@jasonwoof.com', # 'subject' => 'test', # 'body' => array( # 'type' => 'alternatives', # 'body' => array( # "Hi!\n\nI like cheese", # '<h1>Hi!</h1><p>I like <a href="http://cheese.com">cheese</a></p>', # ) # ) # )); # # # email with text and html alternatives (explicit types) # email2(array( # 'from' => 'noreply@foo.com', # 'to' => 'jason@jasonwoof.com', # 'subject' => 'test', # 'body' => array( # 'type' => 'alternatives', # 'body' => array( # array( # 'type' => 'text', # 'body' => "Hi!\n\nI like cheese", # ), # array( # 'type' => 'html', # 'body' => '<h1>Hi!</h1><p>I like cheese</p>', # ), # ) # ) # )); # # # email with an attachment # email2(array( # 'from' => 'noreply@foo.com', # 'to' => 'jason@jasonwoof.com', # 'subject' => 'test', # 'body' => array( # 'type' => 'mixed', # 'body' => array( # "Hi!\n\nCheck out this (inline) image", # array( # 'type' => 'image/png', # 'disposition' => 'inline', # 'body' => $image_data, # raw file contents # ), # "Hi!\n\nAnd here's an attachment", # array( # 'type' => 'application/pdf; name="attachment.pdf"', # 'disposition' => 'attachment; filename="attachment.pdf"', # 'body' => $pdf_data, # raw file contents # ), # "Or you can use shorthand:", # array( # 'type' => 'application/pdf', # 'attachment' => 'attachment.pdf', # name for client (not data source) # 'body' => $pdf_data, # raw file contents # ), # ) # ) # )) function email2($args) { if (!isset($args['from'])) { return 1; } $from = $args['from']; if (!isset($args['to'])) { return 2; } $to = $args['to']; $subject = isset($args['subject']) ? $args['subject'] : ''; $reply_to = isset($args['reply_to']) ? $args['reply_to'] : ''; $cc = isset($args['cc']) ? $args['cc'] : ''; $bcc = isset($args['bcc']) ? $args['bcc'] : ''; #FIXME should allow many more characters here (and do Q encoding) $subject = isset($args['subject']) ? $args['subject'] : ''; $subject = preg_replace("|[^a-z0-9 _/#'.:&,-]|i", '_', $subject); $headers = "From: $from"; if($reply_to) { $headers .= PHP_EOL . "Reply-To: $reply_to"; } if($cc) { $headers .= PHP_EOL . "CC: $cc"; } if($bcc) { $headers .= PHP_EOL . "BCC: $bcc"; } $r = email2_helper($args['body']); $headers .= PHP_EOL . $r[0]; $body = $r[1]; if (mail($to, $subject, $body, $headers)) { return 0; } else { return 5; } } function email2_helper($body, $top = true) { if (is_string($body)) { if (substr($body, 0, 1) == '<') { return email2_helper(array('type' => 'html', 'body' => $body), $top); } else { return email2_helper(array('type' => 'text', 'body' => $body), $top); } } # now we can assume $body is an associative array # defaults: $type = 'application/octet-stream'; $mime = false; $boundary = null; $disposition = null; $charset = false; # process 'type' first, because it sets defaults for others if (isset($body['type'])) { $type = $body['type']; if ($type === 'text') { $type = 'text/plain'; $charset = true; } elseif ($type === 'html') { $type = 'text/html'; $charset = true; } elseif ($type === 'alternative' || $type === 'alternatives') { $mime = true; $type = 'multipart/alternative'; } elseif ($type === 'mixed') { $mime = true; $type = 'multipart/mixed'; } } if (isset($body['disposition'])) { $disposition = $body['disposition']; } if (isset($body['attachment'])) { if ($disposition == null) { $disposition = 'attachment'; } $disposition .= "; filename=\"{$body['attachment']}\""; $type .= "; name=\"{$body['attachment']}\""; } # make headers $headers = array(); if ($top && $mime) { $headers[] = 'MIME-Version: 1.0'; } if ($mime) { $boundary = md5('5sd^%Ca)~aAfF0=4mIN' . rand() . rand()); $type .= "; boundary=$boundary"; } if ($charset) { $type .= '; charset=' . (isset($body['charset']) ? $body['charset'] : 'UTF-8'); } $headers[] = "Content-Type: $type"; if ($disposition !== null) { $headers[] = "Content-Disposition: {$disposition}"; } $data = ''; # return array, first el is headers, 2nd is body (php's mail() needs them separate) if ($mime) { foreach ($body['body'] as $sub_body) { $data .= "--$boundary" . PHP_EOL; $r = email2_helper($sub_body, false); $data .= $r[0] . PHP_EOL . PHP_EOL; # headers $data .= $r[1] . PHP_EOL . PHP_EOL; # body } $data .= "--$boundary--"; } else { if(preg_match('/[^\x09\x0A\x0D\x20-\x7E]/', $body['body'])) { $headers[] = "Content-Transfer-Encoding: base64"; $data .= chunk_split(base64_encode($body['body'])); } else { $data .= $body['body']; } } return array(join(PHP_EOL, $headers), $data); } 
  $to = "to@gmail.com"; $subject = "Subject Of The Mail"; $message = "Hi there,<br/><br/>This is my message.<br><br>"; $headers = "From: From-Name<from@gmail.com>"; // boundary $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; // headers for attachment $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; // multipart boundary $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/html; charset=ISO-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; $message .= "--{$mime_boundary}\n"; $filepath = 'uploads/'.$_FILES['image']['name']; move_uploaded_file($_FILES['image']['tmp_name'], $filepath); //upload the file $filename = $_FILES['image']['name']; $file = fopen($filepath, "rb"); $data = fread($file, filesize($filepath)); fclose($file); $data = chunk_split(base64_encode($data)); $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$filename\"\n" . "Content-Disposition: attachment;\n" . " filename=\"$filename\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; $message .= "--{$mime_boundary}\n"; mail($to, $subject, $message, $headers); 

Копирование кода с этой страницы – работает в почте ()

Он начинает с моей функции mail_attachment, которую можно назвать позже. Который он делает позже со своим кодом вложения.

 <?php function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) { $file = $path.$filename; $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); $content = chunk_split(base64_encode($content)); $uid = md5(uniqid(time())); $header = "From: ".$from_name." <".$from_mail.">\r\n"; $header .= "Reply-To: ".$replyto."\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; $header .= "This is a multi-part message in MIME format.\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-type:text/plain; charset=iso-8859-1\r\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; $header .= $message."\r\n\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here $header .= "Content-Transfer-Encoding: base64\r\n"; $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; $header .= $content."\r\n\r\n"; $header .= "--".$uid."--"; if (mail($mailto, $subject, "", $header)) { echo "mail send ... OK"; // or use booleans here } else { echo "mail send ... ERROR!"; } } //start editing and inputting attachment details here $my_file = "somefile.zip"; $my_path = "/your_path/to_the_attachment/"; $my_name = "Olaf Lederer"; $my_mail = "my@mail.com"; $my_replyto = "my_reply_to@mail.net"; $my_subject = "This is a mail with attachment."; $my_message = "Hallo,\r\ndo you like this script? I hope it will help.\r\n\r\ngr. Olaf"; mail_attachment($my_file, $my_path, "recipient@mail.org", $my_mail, $my_name, $my_replyto, $my_subject, $my_message); ?> 

У него более подробная информация на его странице и ответы на некоторые проблемы в разделе комментариев.

100% рабочая концепция для отправки электронной почты с приложением в php:

 if (isset($_POST['submit'])) { extract($_POST); require_once('mail/class.phpmailer.php'); $subject = "$name Applied For - $position"; $email_message = "<div>Thanks for Applying ....</div> "; $mail = new PHPMailer; $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = "mail.companyname.com"; // SMTP server $mail->SMTPDebug = 0; $mail->SMTPAuth = true; $mail->SMTPSecure = "ssl"; $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->IsHTML(true); $mail->Username = "info@companyname.com"; // GMAIL username $mail->Password = "mailPassword"; // GMAIL password $mail->SetFrom('info@companyname.com', 'new application submitted'); $mail->AddReplyTo("name@yourdomain.com","First Last"); $mail->Subject = "your subject"; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test $mail->MsgHTML($email_message); $address = 'info@companyname.com'; $mail->AddAddress($address, "companyname"); $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']); // attachment if (!$mail->Send()) { /* Error */ echo 'Message not Sent! Email at info@companyname.com'; } else { /* Success */ echo 'Sent Successfully! <b> Check your Mail</b>'; } } 

Я использовал этот код для отправки почты smtp google с Attachment ….

Примечание. Загрузите библиотеку PHPMailer здесь -> https://github.com/PHPMailer/PHPMailer