Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Отправление письма с возможностью прикрепление фалов
Форумы портала PHP.SU » » Если скрипт не работает » Отправление письма с возможностью прикрепление фалов

Страниц (1): [1]
 

1. vanicon - 21 Ноября, 2011 - 20:29:22 - перейти к сообщению
Есть форма отправки писем, где можно прикрепить файл а можно и не прикреплять...
Искал в интернете и на форуму смотрел пользовательские функции, пробовал их но ни что то не работают...
Написал свою, и она почему то не отправляет письма с вложением фалов, а простые отправляет. Вот сама функция:
PHP:
скопировать код в буфер обмена
  1.  
  2. function XMail($komu_email,$komu_name,$theme,$text,$filename) {
  3. $komu = ''.$komu_name.' <'.$komu_email.'>';
  4. $headers = "MIME-Version: 1.0\r\n";
  5. if($filename <> null){
  6. $filename_path = dirname(__FILE__).'/files/'.$filename;
  7. $format = strrchr($filename, '.');
  8. $bound = md5(uniqid(time()));
  9. $headers .= "Content-type: multipart/mixed; boundary='$bound'\r\n";
  10. $body = "--$bound";
  11. $body .= "Content-type: text/html; charset=windows-1251\r\n";
  12. $body .= "$text\r\n";
  13. $body .= "--$bound";
  14. $body .= "Content-Type: application/octet-stream;name='file$format'";
  15. $str_file = base64_encode($filename_path);
  16. $body .= "$str_file\r\n";
  17. $body .= "$bound--";
  18. }
  19. else{
  20. $headers .= "Content-type: text/html; charset=windows-1251\r\n";
  21. $body = $text;
  22. }
  23. return mail($komu, $theme, $body, $headers);
  24. }
  25.  

Подскажите пожалуйста, что не так...
2. Мелкий - 22 Ноября, 2011 - 07:34:52 - перейти к сообщению
А сам-то файл вставлять будете? Сейчас вставляете только путь к файлу.
3. vanicon - 22 Ноября, 2011 - 10:03:55 - перейти к сообщению
Переделал код но все ровно приходит тока пустое сообщение
PHP:
скопировать код в буфер обмена
  1.  
  2. function XMail($komu_email,$komu_name,$theme,$text,$filename) {
  3. $komu = ''.$komu_name.' <'.$komu_email.'>';
  4. $headers = "MIME-Version: 1.0\r\n";
  5. if($filename <> null){
  6. $filename_path = dirname(__FILE__).'/files/'.$filename;
  7. $format = strrchr($filename, '.');
  8. $bound = md5(uniqid(time()));
  9. $headers .= "Content-type: multipart/mixed; boundary='$bound'\r\n";
  10. $body = "--$bound";
  11. $body .= "Content-type: text/html; charset=windows-1251\r\n";
  12. $body .= "$text\r\n";
  13. $body .= "--$bound";
  14. $body .= "Content-Type: application/octet-stream;name='file$format'";
  15. $file = fopen($filename_path,'r');
  16. $filename_str = fread($file,filesize($filename_path));
  17. $str_file = base64_encode($filename_str);
  18. $body .= "$str_file\r\n";
  19. $body .= "$bound--";
  20. }
  21. else{
  22. $headers .= "Content-type: text/html; charset=windows-1251\r\n";
  23. $body = $text;
  24. }
  25. return mail($komu, $theme, $body, $headers);
  26. }
  27.  
4. EuGen - 22 Ноября, 2011 - 10:21:47 - перейти к сообщению
http://php.net/manual/en/function.mail.php

PHP:
скопировать код в буфер обмена
  1. function multi_attach_mail($to, $files, $sendermail){
  2.     // email fields: to, from, subject, and so on
  3.     $from = "Files attach <".$sendermail.">";
  4.     $subject = date("d.M H:i")." F=".count($files);
  5.     $message = date("Y.m.d H:i:s")."\n".count($files)." attachments";
  6.     $headers = "From: $from";
  7.  
  8.     // boundary
  9.     $semi_rand = md5(time());
  10.     $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  11.  
  12.     // headers for attachment
  13.     $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
  14.  
  15.     // multipart boundary
  16.     $message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
  17.     "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
  18.  
  19.     // preparing attachments
  20.     for($i=0;$i<count($files);$i++){
  21.         if(is_file($files[$i])){
  22.             $message .= "--{$mime_boundary}\n";
  23.             $fp =    @fopen($files[$i],"rb");
  24.         $data =    @fread($fp,filesize($files[$i]));
  25.                     @fclose($fp);
  26.             $data = chunk_split(base64_encode($data));
  27.             $message .= "Content-Type: application/octet-stream; name=\"".basename($files[$i])."\"\n" .
  28.             "Content-Description: ".basename($files[$i])."\n" .
  29.             "Content-Disposition: attachment;\n" . " filename=\"".basename($files[$i])."\"; size=".filesize($files[$i]).";\n" .
  30.             "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
  31.             }
  32.         }
  33.     $message .= "--{$mime_boundary}--";
  34.     $returnpath = "-f" . $sendermail;
  35.     $ok = @mail($to, $subject, $message, $headers, $returnpath);
  36.     if($ok){ return $i; } else { return 0; }
  37.     }
5. vanicon - 22 Ноября, 2011 - 12:16:22 - перейти к сообщению
Функция выполняет почти такие же действия как и мои, но может быть я чего - то не вижу? Покажите что не так в моей функции отправки?
6. EuGen - 22 Ноября, 2011 - 12:20:53 - перейти к сообщению
Верно, за исключением главного - содержимое файла эта функция все-таки добавляет к письму, читая файл:
EuGen пишет:
$fp = @fopen($files[$i],"rb");
$data = @fread($fp,filesize($files[$i]));
@fclose($fp);
$data = chunk_split(base64_encode($data));

и добавляя:
EuGen пишет:
$message .= "--{$mime_boundary}\n";
$message .= "Content-Type: application/octet-stream; name=\"".basename($files[$i])."\"\n" .
"Content-Description: ".basename($files[$i])."\n" .
"Content-Disposition: attachment;\n" . " filename=\"".basename($files[$i])."\"; size=".filesize($files[$i]).";\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";

(в теле цикла).
7. vanicon - 22 Ноября, 2011 - 12:56:27 - перейти к сообщению
Исправил, но все ровно не получается отправить:
PHP:
скопировать код в буфер обмена
  1.  
  2. function XMail($komu_email,$komu_name,$theme,$text,$filename) {
  3. $komu = ''.$komu_name.' <'.$komu_email.'>';
  4. $headers = "MIME-Version: 1.0\r\n";
  5. if($filename <> null){
  6. $filename_path = dirname(__FILE__).'/files/'.$filename;
  7. $format = strrchr($filename, '.');
  8. $bound = md5(uniqid(time()));
  9. $headers .= "Content-type: multipart/mixed; boundary='$bound'\r\n";
  10. $body = "--$bound";
  11. $body .= "Content-type: text/html; charset=windows-1251\r\n";
  12. $body .= "$text\r\n";
  13. $body .= "--$bound";
  14. $body .= "Content-Type: application/octet-stream;name='file$format'";
  15. $file = fopen($filename_path,'rb');
  16. $filename_str = fread($file,filesize($filename_path));
  17. @fclose($file);
  18. $str_file = chunk_split(base64_encode($filename_str));
  19. $body .= "Content-Description: ".basename('file'.$format);
  20. $body .= "Content-Disposition: attachment; filename='".basename('file'.$format)."'; size=".filesize($filename_path);
  21. $body .= "Content-Transfer-Encoding: base64\n\n".$str_file."\n\n";
  22. $body .= "$bound--";
  23. }
  24. else{
  25. $headers .= "Content-type: text/html; charset=windows-1251\r\n";
  26. $body = $text;
  27. }
  28. return mail($komu, $theme, $body, $headers);
  29. }
  30.  

 

Powered by ExBB FM 1.0 RC1