php отправить электронное письмо с приложением

Кажется, я не могу найти проблему с этой php-функцией, которую я написал, чтобы отправить электронное письмо с приложением. Я долгое время боролся с этим.

function myMail($to, $subject, $mail_msg, $filename, $contentType){ $random_hash = md5(date('r', time())); $headers = "From: webmaster@example.com\r\nReply-To: ".$to; $headers .= "\r\nContent-Type: ".$contentType. "; boundary=\"PHP-mixed-".$random_hash."\""; $attachment = chunk_split(base64_encode(file_get_contents($filename))); ob_start(); echo " --PHP-mixed-$random_hash Content-Type: multipart/alternative; boundary=\"PHP-alt-$random_hash\" --PHP-alt-$random_hash Content-Type: text/plain; charset=\"utf-8\" Content-Transfer-Encoding: 7bit $mail_msg --PHP-alt-$random_hash --PHP-mixed-$random_hash-- Content-Type: text/plain; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --PHP-mixed-$random_hash-- "; $message = ob_get_clean(); $mail_sent = @mail( $to, $subject, $message, $headers ); return $mail_sent ? "Mail sent" : "Mail failed"; } 

Изменить Проблема заключается в том, что сообщение почты смешивается с файлом и отправляется как вложение.

Related of "php отправить электронное письмо с приложением"

Я просто посмотрел на пару своих писем, и я заметил, что окончательная граница прикрепления заканчивается на «-», а маркер открытия границы – нет. В вашем коде у вас есть:

 --PHP-mixed-$random_hash-- Content-Type: text/plain; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --PHP-mixed-$random_hash-- 

Возможно, это должно быть:

 --PHP-mixed-$random_hash Content-Type: text/plain; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --PHP-mixed-$random_hash-- 

Взгляните на пример здесь:

http://en.wikipedia.org/wiki/MIME#Multipart_messages

Artefacto заставил меня взглянуть на результат с большим вниманием, и я нашел исправление:

 функция myMail ($ to, $ subject, $ mail_msg, $ filename, $ contentType, $ pathToFilename) {
     $ random_hash = md5 (дата ('r', time ()));
     $ headers = "From: webmaster@mysite.com \ r \ nReply-To:". $ to;
     $ headers. = "\ r \ nContent-Type: multipart / mixed; border = \" PHP-mixed - ". $ random_hash." \ "";
     $ attachment = chunk_split (base64_encode (file_get_contents ($ pathToFilename)));
     ob_start ();
  эхо "
 --PHP-смешанно $ random_hash
 Content-Type: multipart / alternative;  граница = \ "PHP-alt- $ random_hash \"

 --PHP-alt- $ random_hash
 Content-Type: text / plain;  кодировка = \ "UTF-8 \"
 Content-Transfer-Encoding: 7 бит

 $ mail_msg

 --PHP-alt- $ random_hash--

 --PHP-смешанно $ random_hash
 Content-Type: $ contentType;  имя = \ "$ имя_файла \" 
 Content-Transfer-Encoding: base64 
 Content-Disposition: вложение 

 $ прикрепление
 --PHP-смешанно $ random_hash--
 «;
 $ message = ob_get_clean ();
 $ ФХ = Еореп ( 'log.txt', 'W');
 FWRITE ($ ФХ, $ сообщение);
 $ mail_sent = @mail ($ to, $ subject, $ message, $ headers);
 return $ mail_sent?  «Почта отправлена»: «Не удалось отправить почту»;
 }

Если вы этого не сделаете, чтобы узнать о внутренней работе MIME-писем, стандартным ответом является использование библиотеки почтовых сообщений, такой как PHPMailer или Swiftmailer, которая может обрабатывать вложения из коробки.

Примеры SwiftMailer о том, как прикреплять файлы, приведены здесь .

Это заголовки, которые я использую, и они всегда работали как шарм.

 $base = basename($_FILES['upload']['name']); $file = fopen($randname_path,'rb'); $size = filesize($randname_path); $data = fread($file,$size); fclose($file); $data = chunk_split(base64_encode($data)); //boundary $div = "==Multipart_Boundary_x".md5(time())."x"; //headers $head = "From: $from\n". "MIME-Version: 1.0\n". "Content-Type: multipart/mixed;\n". " boundary=\"$div\""; //message $mess = "--$div\n". "Content-Type: text/plain; charset=\"iso-8859-1\"\n". "Content-Transfer-Encoding: 7bit\n\n". "$message\n\n". "--$div\n". "Content-Type: application/octet-stream; name=\"$base\"\n". "Content-Description: $base\n". "Content-Disposition: attachment;\n". " filename=\"$base\"; size=$size;\n". "Content-Transfer-Encoding: base64\n\n". "$data\n\n". "--$div\n"; $return = "-f$from"; 

http://asdlog.com/Create_form_to_send_email_with_attachment