|
|
|
| Добрый день, помогите разобраться почему не открываются вложения...
Есть один скрипт, который отправляет на почту письмо и к нему прикладывает картинку которую пользователь загрузил, он работает нормально.
Я скопировал из него во второй скрипт, ту часть, которая вкладывает файлы в письмо, но в этот раз их 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
(06.03.2014 в 08: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>";}
|
| |
|
|
|
|
|
|
|
для: darkozoid
(24.03.2014 в 10:46)
| | А что в языках программирования существуют циклы и тип данных массив, это как бы нечто потустороннее?
И subject: Анкета - не прокатит, кодировать нужно.
filesize(filesize(...)) - это для 100% гарантии? | |
|
|
|
|
|
|
|
для: confirm
(24.03.2014 в 10:51)
| | >А что в языках программирования существуют циклы и тип данных массив, это как бы нечто потустороннее?
Это все от сатаны )))
>И subject: Анкета - не прокатит, кодировать нужно.
как?
>filesize(filesize(...)) - это для 100% гарантии?
вот зараза... пропустил! я то думаю в чем же дело. спасибо | |
|
|
|
|
|
|
|
для: 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) . "?="
|
| |
|
|
|
|