Проблема с отправкой сообщения

windin

Новичок
Есть следующий код отправляющий на мыло картинки аттачем:
PHP:
$filestring="$out"; /* поместить в строку перечень присоединяемых файлов */
$filearr=$_SESSION['fn']; /* разбить перечень файлов на элементы массива, ориентируясь по запятой */
$boundary="------"; /* задать разделитель файлов */
$header="From: [email protected]\nReply-To: [email protected]\n";
$header.="Content-Type: multipart/mixed; boundary=\"$boundary\"";
$body=""; /* объявить глобальную переменную body */

function attach($name) { /* функция обработает каждый файл */
  GLOBAL $boundary,$body; /* определить что, эти переменные берутся из глобальных (ранее определенных), а не создаются локально (фишка PHP) */
  $file=fopen($name,"r"); /* открыть файл */
  $text=fread($file, filesize($name)); /* считать весь в переменную */
  fclose($file); /* закрыть */
  $body.="--$boundary\n"; /* добавление двух дефисов ОБЯЗАТЕЛЬНО! */

  $body.="Content-Type: application/octet-stream; name==?windows-1251?B?". base64_encode($name). "?=\n";
  $body.="Content-Transfer-Encoding: base64\n";
  $body.="Content-Disposition: attachment; filename==?windows-1251?B?". base64_encode($name). "?=\n\n";
  $body.=chunk_split(base64_encode($text))."\n"; /* закодировать полученное из файла и добавить в тело письма */
	$body.=iconv("UTF-8", "KOI8-U", "выполненно"); 
}

for ($i=0; $i < sizeof($filearr); $i++) /* для переменной i, равной нолю, каждый раз увеличивая на единицу, пока ее значение не сравняется с числом элементов массива */
{
  attach($filearr[$i]); /* для каждого элемента массива (каждого файла) вызвать функцию обработки */
}

$body.="--".$boundary ."--\n"; /* добавление двух дефисов ДО и ПОСЛЕ для закрывающего разделителя ОБЯЗАТЕЛЬНО! */
mail("[email protected]","test",$body,$header);
Все бы хорошо, только вот есть переменная $mes которая должна отображаться как текст письма. Подскажите куда какой код нужно вставить, что бы отправлялись не только картинки но и сам текст сообщения?
 

windin

Новичок
Кстати говоря, переменная $mes имеет в себе несколько переменных и HTML код.
 

WMix

герр M:)ller
Партнер клуба
перед for или после, значения не имеет, только заголовки mime расстакить и разграничетель в конце!
 

windin

Новичок
Ну я так понимаю $mes нада затолкать в $body? Пробовал вставлять после for, не получается. с заголовками какая то проблема. Можно конкретнее? как поправить?
 

windin

Новичок
Вставил
$body.= "Текст сообщения";
после for.
Исходник письма которе мне пришло выложил.
 

Вложения

WMix

герр M:)ller
Партнер клуба
я говорил про исходник письма а не страници яндекса, и самое главное, ТЫ должен его посмотреть, и повторить заголовки, а мне показать то что ты наисправлял,...
письмо отправь нормальным почтовиком, и своей прогой, сравни, подумай!...
 

windin

Новичок
PHP:
<? 
   class mime_mail { 
     var $parts; 
     var $to; 
     var $from; 
     var $headers; 
     var $subject; 
     var $body; 
     function mime_mail() { 
         $this->parts = array(); 
         $this->to = ""; 
         $this->from = ""; 
         $this->subject = ""; 
         $this->body = ""; 
         $this->headers = ""; 
         } 
     function add_attachment($message, $name = "", $ctype = "application/octet-stream") { 
         @$this->parts[] = array ( 
             "ctype" => $ctype, 
             "message" => $message, 
             "encode" => $encode, 
             "name" => $name 
             ); 
         } 
     function build_message($part) { 
         $message = $part["message"]; 
         $message = chunk_split(base64_encode($message)); 
         $encoding = "base64"; 
         return "Content-Type: ".$part["ctype"].($part["name"]? "; name = \"".$part["name"]."\"" : "")."\nContent-Transfer-Encoding: $encoding\n\n$message\n"; 
         } 
     function build_multipart() { 
         $boundary = "b".md5(uniqid(time())); 
         $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary"; 
         for($i=sizeof($this->parts)-1; $i>=0; $i--) { 
             $multipart .= "\n".$this->build_message($this->parts[$i])."--$boundary"; 
             } 
         return $multipart .= "--\n"; 
         } 
     function get_mail($complete = true) { 
         $mime = ""; 
         if (!empty($this->from)) 
             $mime .= "From: ".$this->from."\n"; 
         if (!empty($this->headers)) 
             $mime .= $this->headers."\n"; 
         if ($complete) { 
             if (!empty($this->to)) 
                 $mime .= "To: ".$this->to."\n"; 
             if (!empty($this->subject)) 
                 $mime .= "Subject: ".$this->subject."\n"; 
             } 
         if (!empty($this->body)) 
             $this->add_attachment($this->body, "", "text/plain"); 
         $mime .= "MIME-Version: 1.0\n".$this->build_multipart(); 
         return $mime; 
         } 
     function send() { 
         $mime = $this->get_mail(false); 
         mail($this->to, $this->subject, "", $mime); 
         } 
     }; 
 $filename="123.jpg";//сам файл 
 $fd = fopen($filename, "r"); 
 $data = fread($fd, filesize($filename)); 
 fclose($fd); 
 $mail = new mime_mail; 
 $mail->from="от меня";   // от кого 
 $mail->to="[email protected]";     // кому 
 $mail->subject = "тема";//тема 
 $mail->body="hello user!";  // "Attachment";//тело 
 $mail->add_attachment($data, $filename); 
 $mail->send(); 
 ?>
обратите внимание, данный СКРИПТ отправляет письмо с аттачем и сообщением (но отправлет только 1 файл в аттаче) мне, конечно, полностью подходит тот скрипт который я прислал первый. Нужно лишь только узнать как встроить сообщение? Можеть быть можно вытянуть нужную инфу их скрипта в данном сообщение?
 

Afatsum

Новичок
Именно такая же проблема возникла у меня. Приведенный ниже пример отправляет письмо, файл доходит, но вот текст виден только в гмыле, у яндекса и мейла текста не видно. С чем это межет быть связанно?

PHP:
$name = "Заголовок"; //заголовок письма
$attachname = $img_property->name; //шаблон имени файла
$to = "[email][email protected][/email]"; //Кому
$from = $model->email; //От кого
$subject = "Резюме от ".$model->fio; //Тема

$boundary = "---"; 
$headers = "From: $name <$from>\nReply-To: $from\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
$body = "--$boundary\n";
$body .= "Content-type: text/html; charset='utf-8'\n";
$body .= $model->text."\n\n";
$body .= "--$boundary\n";
$file = fopen($filename, "r");
$text = fread($file, filesize($filename));
fclose($file);
$body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($filename)."?=\n"; 
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($attachname)."?=\n\n";
$body .= chunk_split(base64_encode($text))."\n";
$body .= "--".$boundary ."--\n";
//шлем письмо, удаляем файл
mail($to, $subject, $body, $headers);
 

samokspv

Новичок
Именно такая же проблема возникла у меня. Приведенный ниже пример отправляет письмо, файл доходит, но вот текст виден только в гмыле, у яндекса и мейла текста не видно. С чем это межет быть связанно?
Попробуй поменять хедер на:
PHP:
$header="Date: ".date("D, j M Y G:i:s")." +0700\r\n";
$header.="From: =?utf-8?Q?".str_replace("+","_",str_replace("%","=",urlencode('from')))."?= <[email][email protected][/email]>\r\n";
$header.="Reply-To: =?utf-8?Q?".str_replace("+","_",str_replace("%","=",urlencode('from')))."?= <[email][email protected][/email]>\r\n";
$header.="X-Priority: 3 (Normal)\r\n";
$header.="To: =?utf-8?Q?".str_replace("+","_",str_replace("%","=",urlencode('to')))."?= <[email][email protected][/email]>\r\n";
$header.="Subject: =?utf-8?Q?".str_replace("+","_",str_replace("%","=",urlencode('subjectText')))."?=\r\n";
$header.="MIME-Version: 1.0\r\n";
$header.="Content-Type: text/plain; charset=utf-8\r\n";
$header.="Content-Transfer-Encoding: 8bit\r\n";
 

Afatsum

Новичок
Не получилось. Теперь и в gamil проблемы. Вот что приходит

-----
Content-type: text/html; charset='utf-8'
Небольшой текст письма

-----
Content-Type: application/octet-stream; name==?utf-8?B?L3RtcC9waHBZQTVYcno=?=
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename==?utf-8?B?ODNkZDRjMTkxZjg3LmpwZw==?=

/9j/4AAQSkZJRgABAgEASABIAAD/4QtrRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
AAABAAAAYg
 

WMix

герр M:)ller
Партнер клуба
потому что копируешь не понимая!
PHP:
$header.="Content-Type: text/plain; charset=utf-8\r\n";
$header.="Content-Transfer-Encoding: 8bit\r\n";
это было правильно!
PHP:
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
и пожалуйста все заголовки копируй, меня лично только они и интересуют!
 
Сверху