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 :: Версия для печати :: Проблема с отправкой e-mail с аттачем
Форумы портала PHP.SU » » Работа с сетью » Проблема с отправкой e-mail с аттачем

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

1. NeoN121 - 18 Апреля, 2011 - 16:09:15 - перейти к сообщению
Здравствуйте
Использую phpmailer для отправки e-mail. Письма должны содержать некоторый текст в формате html и приаттаченный файл data.csv
Проблема в следующем. Если отправлять с аттачем, то письмо приходит с пустым текстом. Хотя текст отправляется
При этом, если аттач отключить, то текст виден. Но нужно с аттачем ))

Заголовки при отправке:

From: root <root@localhost>
To: <neon12121@gmail.com>
Subject: Заказ
Return-Path: root@localhost
X-Priority: 3
X-Mailer: phpmailer [version .9]
Content-Transfer-Encoding: 8bit
Content-Type: Multipart/Mixed; charset = "UTF-8";
boundary="Boundary-=_b8b1041028ba2ae1c090742ac2e7063be"
MIME-Version: 1.0

Само тело письма при отправке:

--Boundary-=_b8b1041028ba2ae1c09 0742ac2e7063be
Content-Type: text/html
Content-Transfer-Encoding: 8bit
<html><head></head><body>04/18/2011 17:08:25 Данные заказа:<br>Заказчик <br> Телефон <br> Место доставки <br> Дата отгрузки <br> e-mail: <br><table></table></body></html>

--Boundary-=_b8b1041028ba2ae1c09 0742ac2e7063be
Content-Type: application/octet-stream;
name="data.csv"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="data.csv"

IrkiOyLC6OQg7/Du5PPq9ujoIjsiwPDy6Orz6yI7Isru6+j35fHy4u4gKPjyKSI7Itjo8Ojt4CAo
7OwpIjsiwvvx7vLgICjs7CkiOyJTICjv6+754OT8IOriLuwpIjsiVFMgKO7h+eD/IO/r7vng5Pwg
6uIu7CkiOyLR8u7o7O7x8vwgKPDz4Ski Ow0KIjEiOyI0LS00IjsiIjsiIjsiIjsi IjsiMC4wMCI7
IjAuMDAiOyIwLjAwIjsNCiIyIjsiNC0tNCI7IiI7IiI7IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4w
MCI7DQoiMyI7IjQtLTQiOyIiOyIiOyIi OyIiOyIwLjAwIjsiMC4wMCI7IjAuMDAi Ow0KIjQiOyI0
LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAiOyIwLjAwIjsNCiI1IjsiNC0tNCI7IiI7IiI7
IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4w MCI7DQoiNiI7IjQtLTQiOyIiOyIiOyIi OyIiOyIwLjAw
IjsiMC4wMCI7IjAuMDAiOw0KIjciOyI0LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAiOyIw
LjAwIjsNCiI4IjsiNC0tNCI7IiI7IiI7 IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4w MCI7DQoiOSI7
IjQtLTQiOyIiOyIiOyIiOyIiOyIwLjAwIjsiMC4wMCI7IjAuMDAiOw0KIjEwIjsiNC0tNCI7IiI7
IiI7IiI7IiI7IjAuMDAiOyIwLjAwIjsi MC4wMCI7DQoiMTEiOyI0LS00IjsiIjsi IjsiIjsiIjsi
MC4wMCI7IjAuMDAiOyIwLjAwIjsNCiIxMiI7IjQtLTQiOyIiOyIiOyIiOyIiOyIwLjAwIjsiMC4w
MCI7IjAuMDAiOw0KIjEzIjsiNC0tNCI7 IiI7IiI7IiI7IiI7IjAuMDAiOyIwLjAw IjsiMC4wMCI7
DQoiMTQiOyI0LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAiOyIwLjAwIjsNCiIxNSI7IjQt
LTQiOyIiOyIiOyIiOyIiOyIwLjAwIjsi MC4wMCI7IjAuMDAiOw0KIjE2IjsiNC0t NCI7IiI7IiI7
IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4wMCI7DQoiMTciOyI0LS00IjsiIjsiIjsiIjsiIjsiMC4w
MCI7IjAuMDAiOyIwLjAwIjsNCiIxOCI7 IjQtLTQiOyIiOyIiOyIiOyIiOyIwLjAw IjsiMC4wMCI7
IjAuMDAiOw0KIjE5IjsiNC0tNCI7IiI7IiI7IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4wMCI7DQoi
MjAiOyI0LS00IjsiIjsiIjsiIjsiIjsi MC4wMCI7IjAuMDAiOyIwLjAwIjsNCiIy MSI7IjQtLTQi
OyIiOyIiOyIiOyIiOyIwLjAwIjsiMC4wMCI7IjAuMDAiOw0KIjIyIjsiNC0tNCI7IiI7IiI7IiI7
IiI7IjAuMDAiOyIwLjAwIjsiMC4wMCI7 DQoiMjMiOyI0LS00IjsiIjsiIjsiIjsi IjsiMC4wMCI7
IjAuMDAiOyIwLjAwIjsNCiIyNCI7IjQtLTQiOyIiOyIiOyIiOyIiOyIwLjAwIjsiMC4wMCI7IjAu
MDAiOw0KIjI1IjsiNC0tNCI7IiI7IiI7 IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4w MCI7DQoiMjYi
OyI0LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAiOyIwLjAwIjsNCiIyNyI7IjQtLTQiOyIi
OyIiOyIiOyIiOyIwLjAwIjsiMC4wMCI7 IjAuMDAiOw0KIjI4IjsiNC0tNCI7IiI7 IiI7IiI7IiI7
IjAuMDAiOyIwLjAwIjsiMC4wMCI7DQoiMjkiOyI0LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAu
MDAiOyIwLjAwIjsNCiIzMCI7IjQtLTQi OyIiOyIiOyIiOyIiOyIwLjAwIjsiMC4w MCI7IjAuMDAi
Ow0KIjMxIjsiNC0tNCI7IiI7IiI7IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4wMCI7DQoiMzIiOyI0
LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7 IjAuMDAiOyIwLjAwIjsNCiIzMyI7IjQt LTQiOyIiOyIi
OyIiOyIiOyIwLjAwIjsiMC4wMCI7IjAuMDAiOw0KIjM0IjsiNC0tNCI7IiI7IiI7IiI7IiI7IjAu
MDAiOyIwLjAwIjsiMC4wMCI7DQoiMzUi OyI0LS00IjsiIjsiIjsiIjsiIjsiMC4w MCI7IjAuMDAi
OyIwLjAwIjsNCiIzNiI7IjQtLTQiOyIiOyIiOyIiOyIiOyIwLjAwIjsiMC4wMCI7IjAuMDAiOw0K
IjM3IjsiNC0tNCI7IiI7IiI7IiI7IiI7 IjAuMDAiOyIwLjAwIjsiMC4wMCI7DQoi MzgiOyI0LS00
IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAiOyIwLjAwIjsNCiIzOSI7IjQtLTQiOyIiOyIiOyIi
OyIiOyIwLjAwIjsiMC4wMCI7IjAuMDAi Ow0KIjQwIjsiNC0tNCI7IiI7IiI7IiI7 IiI7IjAuMDAi
OyIwLjAwIjsiMC4wMCI7DQoiNDEiOyI0LS00IjsiIjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAiOyIw
LjAwIjsNCiI0MiI7IjQtLTQiOyIiOyIi OyIiOyIiOyIwLjAwIjsiMC4wMCI7IjAu MDAiOw0KIjQz
IjsiNC0tNCI7IiI7IiI7IiI7IiI7IjAuMDAiOyIwLjAwIjsiMC4wMCI7DQoiNDQiOyI0LS00Ijsi
IjsiIjsiIjsiIjsiMC4wMCI7IjAuMDAi OyIwLjAwIjsNCiLI0s7DziI7IiI7IiI7 IjAiOyIiOyIi
OyIiOyIwLjAwIjsiMC4wMCI7DQo=



--Boundary-=_b8b1041028ba2ae1c09 0742ac2e7063be--
2. Garda1 - 19 Апреля, 2011 - 12:07:17 - перейти к сообщению
показал бы исходники хоть чтоли, а так кнешна в своё время тоже промаялся с аттачем, но вот етот кусок кода работает, исправить только на свои данные осталось Подмигивание
Спойлер (Отобразить)
3. NeoN121 - 19 Апреля, 2011 - 17:31:08 - перейти к сообщению
Таак-с, за код спасибо, но он тоже не работает ровно так же - тоесть, аттач есть, текста нету. Уж не с кодировкой ли чего?
4. Garda1 - 19 Апреля, 2011 - 17:50:31 - перейти к сообщению
кодировку я пользовал исключительно utf-8.
Скрипт в студию... а то так не отгадать.
(Добавление)
Подправил вышеприведённый кодец, лично проверил, засылает только в путь.
mail.attach.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(count($_POST)>0)
  3. {
  4.         require_once 'clean_data.php';
  5.         $post = clean_data($_POST);
  6.        
  7.         if (empty($post['email'])) {
  8.                 $error .= '<li>Не заполнено поле <b>"E-mail"</b></li>';
  9.         }
  10.         if(isset($error))
  11.         {
  12.                 $HTML .= '<ol class="messaga bad_messaga">';
  13.                 $HTML .= $error;// Вывод системных сообщений
  14.                 $HTML .= '</ol>';
  15.                 $HTML .= '<br><br>';
  16.                 //echo $HTML;
  17.         }
  18.         else
  19.         {
  20.                 $bound = 'spravka-1234';
  21.                 $emailTo = $post['email'];
  22.                 $subject = "=?utf-8?b?".base64_encode('Заказ услуги')."?=";
  23.                 $headers = 'From: MySite <'.$emailTo.'>'."\r\n";
  24.                 $headers .= "Mime-Version: 1.0\r\n";
  25.                 $headers .= "Content-type: multipart/mixed; boundary=\"$bound\"\r\n";
  26.                
  27.                
  28.                 $text .= "\n\n--$bound\r\n";
  29.                 $text .= "Content-type: text/html; charset=\"utf-8\"\r\n";
  30.                 $text .= "Content-Transfer-Encoding: quoted-printable\r\n";
  31.                
  32.                 $text .= '<b>Сообщение:</b> Вот и должон тут быть аттачЪ<br>';
  33.                
  34.                 $file_name = $_FILES['rekvizity']['tmp_name'];
  35.                 $file = fopen($file_name,"rb");
  36.                 if(!$file){echo 'файл не прочитан!';exit;}
  37.                 $fread = fread($file,filesize($file_name));
  38.                 $text .= "\r\n--$bound\n";
  39.                 $text .= "Content-type: application/octet-stream; name=\"=?utf-8?b?".base64_encode($_FILES['rekvizity']['name'])."?=\"\n";
  40.                 $text .= "Content-Transfer-Encoding:base64\n";
  41.                 $text .= "Content-Disposition:attachment filename=\"$file_name\"\n\n";
  42.                 $text .= chunk_split(base64_encode($fread))."\n";
  43.                 $text .= "$bound--\r\n";
  44.                
  45.                 mail($emailTo,$subject,$text,$headers);
  46.                 $cool = true;
  47.                 $HTML .= '<ol class="messaga ok_messaga">';
  48.                 $HTML .= '<li>Заявка отправлена, наш агент свяжется с Вами в ближайшее время.</li>';// Вывод системных сообщений
  49.                 $HTML .= '</ol>';
  50.         }
  51. }
  52.  
  53. if(!isset($cool)){
  54. $HTML .= '
  55. <div class="uss_form_tml">
  56.         <form  enctype="multipart/form-data" method="POST" action="">
  57.                 <div class="uss_form_item uss_form_text">
  58.                         <label>Ваш E-mail (*)</label>
  59.                         <input type="text" class="text" id="emailid" name="email" value="'.$_REQUEST['email'].'">
  60.                 </div>
  61.                 <div class="uss_form_item uss_form_text">
  62.                         <label>Файл</label>
  63.                         <input type="file" name="rekvizity" value="">
  64.                 </div>
  65.                 <div class="uss_form_item uss_form_submit">
  66.                         <input type="submit" name="sendorderuslugform" value="Отправить">
  67.                 </div>
  68.         </form>
  69. </div>
  70. ';}
  71. echo $HTML;
  72.  

clean_data.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /*
  3. * Функция очистки данных
  4. *@param array $data - входной массив данных
  5. *@param array $aux - выходной очищенный массив
  6. */
  7. function clean_data($data)
  8. {
  9.         foreach($data as $key => $value)
  10.         {
  11.                 $aux[$key] = pre_data($value) ;
  12.         }
  13.         return $aux;
  14. }
  15.  
  16. function pre_data($str) // ф-ция для очистки введенного контента
  17. {
  18.         if(get_magic_quotes_gpc() == 1) // если на сервере включен magic quotes, срабатывает "ручная" очистка
  19.         {
  20.                 $str = str_replace('\"', """, $str) ;
  21.                 $str = str_replace("\'", "'", $str) ;
  22.                 $str = str_replace("<", "<", $str) ;
  23.                 $str = str_replace(">", ">", $str) ;
  24.         }
  25.         else // если на сервере выключен magic quotes, срабатывает "ручная" очистка
  26.         {
  27.                 $str = htmlspecialchars($str,ENT_QUOTES,"UTF-8",false) ;
  28.         }
  29.         return $str ;
  30. }
  31. function post_data($str) // ф-ция для очистки вЫведенного контента
  32. {
  33.        
  34.                 $str = str_replace(""", '"', $str) ;
  35.                 $str = str_replace("'", "'", $str) ;
  36.                 $str = str_replace("<", "<", $str) ;
  37.                 $str = str_replace(">", ">", $str) ;
  38.        
  39.         return $str ;
  40. }
  41.  
5. NeoN121 - 19 Апреля, 2011 - 18:18:13 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. $bound = 'spravka-1234';
  2. $emailTo = 'neon12121@gmail.com';
  3. $subject = "=?utf-8?b?".base64_encode('Заказ услуги')."?=";
  4. $headers = 'From: us <'.$emailTo.'>'."\r\n";
  5. $headers .= "Mime-Version: 1.0\r\n";
  6. $headers .= "Content-type: multipart/mixed; boundary=\"$bound\"\r\n";
  7.                
  8.                
  9. $text .= "--$bound-\r\n";
  10. $text .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  11. $text .= "Content-Transfer-Encoding: quoted-printable\r\n";
  12.  
  13. $text .= "Some text\r\n";
  14.                
  15. $file_name = 'data.csv';
  16. $file = fopen($file_name,"rb");
  17. if(!$file){echo 'файл не прочитан!';exit;}
  18. $fread = fread($file,filesize($file_name));
  19. $text .= "\r\n--$bound\r\n";
  20. $text .= "Content-type: application/octet-stream; name=\"=?utf-8?b?".base64_encode($file_name)."?=\"\n";
  21. $text .= "Content-Transfer-Encoding:base64\n";
  22. $text .= "Content-Disposition:attachment filename=\"$file_name\"\n\n";
  23. $text .= chunk_split(base64_encode($fread))."\n";
  24. $text .= "\r\n--$bound--\r\n";
  25.                
  26. mail($emailTo,$subject,$text,$headers);


Вот до этого вот я урезал код. Кодировка файла скрипта - UTF-8
6. Garda1 - 19 Апреля, 2011 - 18:23:27 - перейти к сообщению

это путь до файла. Скрипт проверку чтения файла проходит?
7. NeoN121 - 19 Апреля, 2011 - 18:25:32 - перейти к сообщению
Garda1 пишет:
это путь до файла. Скрипт проверку чтения файла проходит?


Проходит. Файл-то аттачится как надо, и содержимое правильное. Текста самого письма при этом нет. А должно быть "Some text"
8. Garda1 - 19 Апреля, 2011 - 18:41:15 - перейти к сообщению
NeoN121 пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $bound = 'spravka-1234';
  2. $emailTo = 'neon12121@gmail.com';
  3. $subject = "=?utf-8?b?".base64_encode('Заказ услуги')."?=";
  4. $headers = 'From: us <'.$emailTo.'>'."\r\n";
  5. $headers .= "Mime-Version: 1.0\r\n";
  6. $headers .= "Content-type: multipart/mixed; boundary=\"$bound\"\r\n";
  7.                
  8.                
  9. $text .= "--$bound-\r\n";
  10. $text .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  11. $text .= "Content-Transfer-Encoding: quoted-printable\r\n";
  12.  
  13. $text .= "Some text\r\n";
  14.                
  15. $file_name = 'data.csv';
  16. $file = fopen($file_name,"rb");
  17. if(!$file){echo 'файл не прочитан!';exit;}
  18. $fread = fread($file,filesize($file_name));
  19. $text .= "\r\n--$bound\r\n";
  20. $text .= "Content-type: application/octet-stream; name=\"=?utf-8?b?".base64_encode($file_name)."?=\"\n";
  21. $text .= "Content-Transfer-Encoding:base64\n";
  22. $text .= "Content-Disposition:attachment filename=\"$file_name\"\n\n";
  23. $text .= chunk_split(base64_encode($fread))."\n";
  24. $text .= "\r\n--$bound--\r\n";
  25.                
  26. mail($emailTo,$subject,$text,$headers);


Вот до этого вот я урезал код. Кодировка файла скрипта - UTF-8


Подставил этот код, проверил, у меня работает... Не понял
Только файл должен весить больше 0байт

УПС, а вот на Gmail действительно не приходит
9. NeoN121 - 19 Апреля, 2011 - 18:47:24 - перейти к сообщению
Garda1 пишет:
Подставил этот код, проверил, у меня работает... Не понял

Ну, уже хорошо. Значит, проблема не в прокладке между монитором и стулом...

И на bk.ru вроде как тоже
10. Garda1 - 19 Апреля, 2011 - 18:55:38 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $bound = 'spravka-1234';
  2.                 $emailTo = 'gardian90905@gmail.com';
  3.                 $subject = "=?utf-8?b?".base64_encode('Заказ услуги')."?=";
  4.                 $headers = 'From: MySite <'.$emailTo.'>'."\r\n";
  5.                 $headers .= "Mime-Version: 1.0\r\n";
  6.                 $headers .= "Content-type: multipart/mixed; boundary=\"$bound\"\r\n";
  7.                
  8.                
  9.                 $text .= "\n\n--$bound\r\n";
  10.                 $text .= "Content-type: text/html; charset=\"utf-8\"\r\n";
  11.                 $text .= "Content-Transfer-Encoding: quoted-printable\r\n";
  12.                
  13.                 $text .= "Вот и должон тут быть аттачЪ<br>\r\n";
  14.                
  15.                 $file_name = 'jquery-1.3.2.min.js';
  16.                 $file = fopen($file_name,"rb");
  17.                 if(!$file){echo 'файл не прочитан!';exit;}
  18.                 $fread = fread($file,filesize($file_name));
  19.                 $text .= "\r\n--$bound\n";
  20.                 $text .= "Content-type: application/octet-stream; name=\"=?utf-8?b?".base64_encode($file_name)."?=\"\n";
  21.                 $text .= "Content-Transfer-Encoding:base64\n";
  22.                 $text .= "Content-Disposition:attachment filename=\"$file_name\"\n\n";
  23.                 $text .= chunk_split(base64_encode($fread))."\n";
  24.                 $text .= "$bound--\r\n";
  25.                
  26.                 mail($emailTo,$subject,$text,$headers);

попробовать стоит заменить предыдущий отрывок "Именно Этим"!! С ним у меня на gmail приходит, в чём кардинальное различие не смог найти, только Mail и название файла свои подставь
11. NeoN121 - 19 Апреля, 2011 - 19:06:56 - перейти к сообщению
Garda1 пишет:
PHP:
скопировать код в буфер обмена
  1. $bound = 'spravka-1234';
  2.                 $emailTo = 'gardian90905@gmail.com';
  3.                 $subject = "=?utf-8?b?".base64_encode('Заказ услуги')."?=";
  4.                 $headers = 'From: MySite <'.$emailTo.'>'."\r\n";
  5.                 $headers .= "Mime-Version: 1.0\r\n";
  6.                 $headers .= "Content-type: multipart/mixed; boundary=\"$bound\"\r\n";
  7.                
  8.                
  9.                 $text .= "\n\n--$bound\r\n";
  10.                 $text .= "Content-type: text/html; charset=\"utf-8\"\r\n";
  11.                 $text .= "Content-Transfer-Encoding: quoted-printable\r\n";
  12.                
  13.                 $text .= "Вот и должон тут быть аттачЪ<br>\r\n";
  14.                
  15.                 $file_name = 'jquery-1.3.2.min.js';
  16.                 $file = fopen($file_name,"rb");
  17.                 if(!$file){echo 'файл не прочитан!';exit;}
  18.                 $fread = fread($file,filesize($file_name));
  19.                 $text .= "\r\n--$bound\n";
  20.                 $text .= "Content-type: application/octet-stream; name=\"=?utf-8?b?".base64_encode($file_name)."?=\"\n";
  21.                 $text .= "Content-Transfer-Encoding:base64\n";
  22.                 $text .= "Content-Disposition:attachment filename=\"$file_name\"\n\n";
  23.                 $text .= chunk_split(base64_encode($fread))."\n";
  24.                 $text .= "$bound--\r\n";
  25.                
  26.                 mail($emailTo,$subject,$text,$headers);

попробовать стоит заменить предыдущий отрывок "Именно Этим"!! С ним у меня на gmail приходит, в чём кардинальное различие не смог найти, только Mail и название файла свои подставь


Это удивительно. Но по-прежнему текст письма пуст...
12. Garda1 - 19 Апреля, 2011 - 19:14:39 - перейти к сообщению
может файл с другим расширением попробовать отправить?
13. NeoN121 - 19 Апреля, 2011 - 19:17:16 - перейти к сообщению
Garda1 пишет:
может файл с другим расширением попробовать отправить?


js тока что попробовал. Файл пришел, текст - нет...
Такое впечатление, что где-то творится херота на уровне моего дорогого провайдера...
14. Garda1 - 19 Апреля, 2011 - 19:19:32 - перейти к сообщению
загляни в личные сообщения тамм сцылка с моего скрипта, мля, ну у меня же работает Нахмурился
15. NeoN121 - 19 Апреля, 2011 - 19:23:54 - перейти к сообщению
Если юзать скрипт, что по ссылке, то все отлично работает, да
А мой не работает. Причем у разных провайдеров...
(Добавление)
А нененене, сработало на Джино
Сраная Агава, 2 дня ментального секса...

В общем, большущее спасибо за помощь, да))

 

Powered by ExBB FM 1.0 RC1