Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2009, 15:44   #1
Genesis
 
Регистрация: 05.12.2008
Сообщений: 7
По умолчанию Проблема с отправкой почты

Есть скрипт для отправки писем на мыло с прикреплёнными файлами:

PHP код:
function sendMail($message$file_1) {

  
$bound "__bound__";

  
$header "From: \"Test Mail\" <user@site.com>\n";

  
$header .= "To: user@site.com\n";

  
$header .= "Subject: Test Mail\n";

  
$header .= "Mime-Version: 1.0\n";

  
$header .= "Content-Type: multipart/mixed; boundary=\"$bound\"";


  
$body "\n\n--$bound\n";

  
$body .= "Content-type: text/html; charset=\"utf-8\"\n";

  
$body .= "Content-Transfer-Encoding: quoted-printable\n\n";

  
$body .= "$message";


  
$file fopen($file_1['tmp_name'],"rb");

  
$body .= "\n\n--$bound\n";

  
$body .=" Content-Type: application/octet-stream;";

  
$body .= "name=\"".$file_1['name']."\"\n";

  
$body .= "Content-Transfer-Encoding:base64\n";

  
$body .= "Content-Disposition:attachment\n\n";

  
$body .= base64_encode(fread($file,filesize($file_1['tmp_name'])))."\n";


  
$body .= "$bound--\n\n";

  return (
mail("user@site.com""Test Mail"$body$header)) ? true false;


Проблема в том, что работает он корректно только на гмейле. На мейл и яндекс, вместо вложения приходят кракозябры. Но, появляются они не в куче с сообщением, а там где вложение по сути и должно быть =/ Тоесть границы пашут нормально, но видимо с заголовками вложения что-то не то. На некоторые почтовые клиенты письма не доходят вообще. Видимо, намудрил я что-то с заголовками... В чём тут может быть проблема?
Genesis вне форума Ответить с цитированием
Старый 16.05.2009, 12:18   #2
iankov
Форумчанин
 
Регистрация: 04.01.2009
Сообщений: 188
По умолчанию

PHP код:
    $file $_FILES['file']['tmp_name']; // это я через форму отправлял файл
    
$filename basename($_FILES['file']['name']);
    
$from_name $_SERVER['HTTP_HOST'];
    
$from_mail 'noreply@mail.com';
    
$replyto 'noreply@mail.com';
    
$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/html; charset=windows-1251\r\n";
    
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    
$header .= $html."\r\n\r\n"//тут в $html содержится сам текст сообщения.
    
$header .= "--".$uid."\r\n";
    
$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"// use diff. tyoes 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."--";
mail('ваше мыло @ чего-то.там'"Тема сообщения",$html$header)) 
Вот я примерно так делал отправку файла

Последний раз редактировалось iankov; 16.05.2009 в 12:20.
iankov вне форума Ответить с цитированием
Старый 18.05.2009, 15:35   #3
cronfy
Пользователь
 
Регистрация: 09.10.2008
Сообщений: 92
По умолчанию

Вообще говоря, с составлением почтового сообщения связано довольно много нюансов, которые могут проявиться лишь со временем. Gmail и Яндекс — не показатель правильности составленного сообщения. Поэтому рекомендую воспользоваться какой-нибудь существующей библиотекой для отправки писем, разработчики которой уже успели наткнуться и обойти многие существующие грабли.

Например, Swift Mailer для php5. Очень удобная и могучая штука.
SPRINTHOST.RU — вот, что я люблю ;-)
cronfy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
on-line форма с отправкой на почту lisa3281 JavaScript, Ajax 1 06.04.2009 07:07
Проблемы с отправкой СМС сообщений через Билайн tuschkan Компоненты Delphi 0 09.02.2009 10:50
Проблема с отправкой MemoryStream от сервера к клиенту Ragnarek Работа с сетью в Delphi 4 07.02.2009 10:29
Подскажите с отправкой почты Proof Работа с сетью в Delphi 2 19.08.2008 19:46
Помогите с отправкой данных!! boostman Работа с сетью в Delphi 3 13.06.2008 19:34