PHPMail отправляет вложение, но они пусты

В основном, я пытаюсь отправить PDF через PHPMail. письмо отправляется, и я получаю его в Outlook отлично. проблема в том, что приложение сломано и оно не открывается. Я даже попробовал отправить HTML, а также пуст.

Я пытался исследовать на форуме, пробовал несколько «рабочих кодов», а другие люди его работали с этим кодом … Я понятия не имею, почему я не работаю для меня. Я использую последнюю версию PHPMail 5.2.2

$mail = new PHPMailer(); $staffEmail = "staffemail"; $mail->From = $staffEmail; $mail->FromName = "name"; $mail->AddAddress('my@email.com'); $mail->AddReplyTo($staffEmail, "name"); $mail->AddAttachment('test.pdf'); $mail->Subject = "PDF file attachment"; $mail->Body = "message!"; $mail->Send(); 

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

 <?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())); $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"; $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!"; } } ?> 

Далее мы показываем пример использования этой функции для отправки сообщения электронной почты с одним прикрепленным zip-файлом:

 <?php $my_file = "somefile.zip"; $my_path = $_SERVER['DOCUMENT_ROOT']."/your_path_here/"; $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); ?> 

Вы ищете скрипт для отправки нескольких вложений? Попробуйте наш скрипт класса вложений электронной почты.

Если вы хотите отправлять свои почтовые сообщения через SMTP и Gmail, ознакомьтесь с нашим руководством по PHPMailer.

Я предлагаю вам загрузить файл на сервер, а затем прикрепить его к письму. Например, вы можете использовать следующие шаги:

  1. Загрузите файл
  2. Прикрепите его к письму
  3. Отправить электронное письмо
  4. Удалите этот временный файл с сервера

Попробуйте это, потому что я думаю, что причина вашего поблема.

На всякий случай: http://php.net/manual/en/features.file-upload.php

Удачи

Могут быть две проблемы: либо путь неверен для вложения, либо php не имеет разрешения на эту папку

этот работает для меня, пытаясь отправить резюме, имеет attachmnet в zend

  $mail = new Zend_Mail (); $mail->setBodyHTML ( stripslashes ($message) ); // add attachment $fileContents = file_get_contents($attachemnet); $resume = $mail->createAttachment($fileContents); $resume->filename = $EmployeeDeatils['resume']; //$mail->createAttachment($attachemnet); $mail->setFrom ( $mail_template ['from_email'], $mail_template ['from_caption'] ); $mail->addTo ( $clientemail, $employee_name ); $mail->setSubject ($subject ); try { $mail->send (); } catch ( Exception $e ) { $this->_helper->errorlog ( " Send mail to member with activation link : " . $e->getMessage () ); } 

Вы можете попробовать использовать эту функцию, которая использует простую функцию почты PHP:

 function mail_attachment ($from , $to, $subject, $message, $attachment){ $fileatt = $attachment; // Path to the file $fileatt_type = 'application/octet-stream'; // File Type $start= strrpos($attachment, '/') == -1 ? strrpos($attachment, '//') : strrpos($attachment, '/')+1; $fileatt_name = substr($attachment, $start, strlen($attachment)); // Filename that will be used for the file as the attachment $email_from = $from; // Who the email is from $email_subject = $subject; // The Subject of the email $email_txt = $message; // Message that the email has in it $email_to = $to; // Who the email is to $headers = "From: ".$email_from; $file = fopen($fileatt,'rb'); $data = fread($file,filesize($fileatt)); fclose($file); $msg_txt=""; //\n\nMail created from websiteaddress systems : http://websiteaddress.com $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers .= "\nwebsiteaddress-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; $email_txt .= $msg_txt; $email_message = "This is a multi-part message in websiteaddress format.\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n".$email_txt. "\n\n"; $data = chunk_split(base64_encode($data)); $email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" . " name=\"{$fileatt_name}\"\n" . //"Content-Disposition: attachment;\n" . //" filename=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n" . "--{$mime_boundary}--\n"; $ok = @mail($email_to, $email_subject, $email_message, $headers); if($ok) { //echo "Attachment has been mailed !"; //header("Location: index.php"); } else { die("Sorry but the email could not be sent. Please go back and try again!"); } } 

Надеюсь, что это поможет вам.