Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вложенные файлы
 
 автор: darkozoid   (06.03.2014 в 08:46)   письмо автору
 
 

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

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

Я скопировал из него во второй скрипт, ту часть, которая вкладывает файлы в письмо, но в этот раз их 3 а не 1.

письмо приходит и в нем есть вложенные файлы, имя верное расширение верное, но они не открываются. не могу понять почему.



....тут проверка данных и загрузка файлов... создание тела письма ($message)

    /* Для отправки HTML-почты вы можете установить шапку Content-type. */
        $headers= "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=windows-1251\r\n";

        /* дополнительные шапки */
        // $headers .= "From: Apriori <apriorico@mail.ru>\r\n";
$headers         .= "From: Apriori Club <club@apriorico.com>\r\n";
$fq1         = fopen($upf1,"rb");
$fq2         = fopen($upf2,"rb");
$fq3         = fopen($upf3,"rb");
$un            = strtoupper(uniqid(time()));
$headers     .= "Subject: Анкета с сайта Априори \r\n";
$headers     .= "X-Mailer: PHPMail Tool\n";
$headers     .= "Reply-To: apriorico@mail.ru\n";
$headers     .= "Mime-Version: 1.0\n";
$headers          .= "Content-type: text/html; charset=windows-1251\r\n";
$headers     .= "Content-Type:multipart/mixed;";
$headers     .= "boundary=\"----------".$un."\"\n\n";

$body       = "------------".$un."\nContent-Type:text/html;\n";
$body      .= "Content-Transfer-Encoding: 8bit\n\n $message\r\n";
if($upf1){
$body      .= "------------".$un."\n";
$body      .= "Content-Type: ".image_type_to_mime_type($upf1)."\r\n";
$body      .= "name=\"".basename($upf1)."\"\n";
$body      .= "Content-Transfer-Encoding:base64\n";
$body      .= "Content-Disposition:attachment;";
$body      .= "filename=\"".basename($upf1)."\"\n\n";
$body      .= chunk_split(base64_encode(fread(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf1),filesize(filesize(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf1))))))."\n";
}
if($upf2){
$body      .= "------------".$un."\n";
$body      .= "Content-Type: ".image_type_to_mime_type($upf2)."\r\n";
$body      .= "name=\"".basename($upf2)."\"\n";
$body      .= "Content-Transfer-Encoding:base64\n";
$body      .= "Content-Disposition:attachment;";
$body      .= "filename=\"".basename($upf2)."\"\n\n";
$body      .= chunk_split(base64_encode(fread(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf2),filesize(filesize(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf2))))))."\n";
}
if($upf3){
$body      .= "------------".$un."\n";
$body      .= "Content-Type: ".image_type_to_mime_type($upf3)."\r\n";
$body      .= "name=\"".basename($upf3)."\"\n";
$body      .= "Content-Transfer-Encoding:base64\n";
$body      .= "Content-Disposition:attachment;";
$body      .= "filename=\"".basename($upf3)."\"\n\n";
$body      .= chunk_split(base64_encode(fread(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf3),filesize(filesize(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf3))))))."\n";
}
        /* и теперь отправим из */
        if(!empty($to)){mail($to, $subject, $body, $headers);}
        if(mail($admin_mail, $subject, $body, $headers)){$mes="";}else{$mes=" не отправил <br>";}
    
.......дальше что то еще ....

  Ответить  
 
 автор: darkozoid   (17.03.2014 в 07:40)   письмо автору
 
   для: darkozoid   (06.03.2014 в 08:46)
 

тут оказалось почти все верно... дело было в путях к файлу...ну это если вдруг кто искать будет

  Ответить  
 
 автор: darkozoid   (24.03.2014 в 10:46)   письмо автору
 
   для: darkozoid   (17.03.2014 в 07:40)
 

всплыл один баг, на некоторых сервисах не отображаются файлы, начал искать причину, и кое что исправил.
Этот код работает нормально



        /* дополнительные шапки */ 
$headers         .= "From:test <club@test.com>\r\n"; 
$fq1         = fopen($upf1,"rb"); 
$fq2         = fopen($upf2,"rb"); 
$fq3         = fopen($upf3,"rb"); 
$un            = strtoupper(uniqid(time())); 
$headers     .= "Subject: Анкета \r\n"; 
$headers     .= "X-Mailer: PHPMail Tool\n"; 
$headers     .= "Reply-To: test@mail.ru\n"; 
$headers     .= "Mime-Version: 1.0\n"; 
$headers          .= "Content-type: text/html; charset=windows-1251\r\n"; 
$headers     .= "Content-Type:multipart/mixed;"; 
$headers     .= "boundary=\"----------".$un."\"\n\n"; 

$body       = "------------".$un."\nContent-Type:text/html;\n"; 
$body      .= "Content-Transfer-Encoding: 8bit\n\n $message\r\n"; 
if($upf1){ 
$body      .= "------------".$un."\n"; 
$body      .= "Content-Type: ".image_type_to_mime_type($upf1)."\r\n"; 
$body      .= "name=\"".basename($upf1)."\"\n"; 
$body      .= "Content-Transfer-Encoding:base64\n"; 
$body      .= "Content-Disposition:attachment;"; 
$body      .= "filename=\"".basename($upf1)."\"\n\n"; 
$body      .= chunk_split(base64_encode(fread(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf1),filesize(filesize(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf1))))))."\n"; 

if($upf2){ 
$body      .= "------------".$un."\n"; 
$body      .= "Content-Type: ".image_type_to_mime_type($upf2)."\r\n"; 
$body      .= "name=\"".basename($upf2)."\"\n"; 
$body      .= "Content-Transfer-Encoding:base64\n"; 
$body      .= "Content-Disposition:attachment;"; 
$body      .= "filename=\"".basename($upf2)."\"\n\n"; 
$body      .= chunk_split(base64_encode(fread(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf2),filesize(filesize(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf2))))))."\n"; 

if($upf3){ 
$body      .= "------------".$un."\n"; 
$body      .= "Content-Type: ".image_type_to_mime_type($upf3)."\r\n"; 
$body      .= "name=\"".basename($upf3)."\"\n"; 
$body      .= "Content-Transfer-Encoding:base64\n"; 
$body      .= "Content-Disposition:attachment;"; 
$body      .= "filename=\"".basename($upf3)."\"\n\n"; 
$body      .= chunk_split(base64_encode(fread(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf3),filesize(filesize(str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf3))))))."\n"; 

        /* и теперь отправим из */ 
        if(!empty($to)){mail($to, $subject, $body, $headers);} 
        if(mail($admin_mail, $subject, $body, $headers)){$mes="";}else{$mes=" не отправил <br>";} 

  Ответить  
 
 автор: confirm   (24.03.2014 в 10:51)   письмо автору
 
   для: darkozoid   (24.03.2014 в 10:46)
 

А что в языках программирования существуют циклы и тип данных массив, это как бы нечто потустороннее?
И subject: Анкета - не прокатит, кодировать нужно.
filesize(filesize(...)) - это для 100% гарантии?

  Ответить  
 
 автор: darkozoid   (25.03.2014 в 10:25)   письмо автору
 
   для: confirm   (24.03.2014 в 10:51)
 

>А что в языках программирования существуют циклы и тип данных массив, это как бы нечто потустороннее?

Это все от сатаны )))

>И subject: Анкета - не прокатит, кодировать нужно.

как?

>filesize(filesize(...)) - это для 100% гарантии?

вот зараза... пропустил! я то думаю в чем же дело. спасибо

  Ответить  
 
 автор: confirm   (25.03.2014 в 14:44)   письмо автору
 
   для: darkozoid   (25.03.2014 в 10:25)
 

Сомнительно, что думали, скорее точно от сатаны. К примеру, по каким соображениям переход строки то \n, то \r\n? В РНР существует константа возвращающая нужное в зависимости от платформы - PHP_EOL.

Content-Type:text/html; - это кому? Это откуда такая уверенность, что все поголовно будут принимать вашу писанину именно в html формате? А если нет, что тогда читать? Отправляя письмо, уважайте получателя и отсылайте в теле письма две его копии, одну в text/html, другую в text/plain.

str_replace('http://apriorico.com/', $_SERVER['DOCUMENT_ROOT'].'/', $upf1) - это для чего такая магия?

А это - "Content-Type: ".image_type_to_mime_type($upf1)."\r\n"; ? Что тогда должна содержать переменная $upf1, если первое выражение занимается бог весь чем, а второе пытается получить из нее валидную строку mime типа для заголовка, и это при том, что функция image_type_to_mime_type ожидает в аргументе тип изображения, возвращаемый, например getimagesize, exif_read_data, то-есть константу - IMAGETYPE_GIF, IMAGETYPE_JPEG...?

Заголовок указывающий кодировку сообщения и передается для тела сообщения, на кодировку в таких полях как тема сообщения, а также "Вася Пупкин" перед адресом в поле from и т.п., этот заголовок не действует. Для того чтобы сообщения этих полей отображались корректно, их кодируют, и для кодировки cp1251, это будет так:

"=?windows-1251?b?" . base64_encode($subject) . "?="

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования