|
|
|
|
|
для: elenaki
(08.08.2006 в 16:44)
| | Outlook - далеко не единственная почтовая программа. Да и web-почт есть великое множество.
На мой взгляд, если ставить скрипт в боевое (считайте коммерческое) применение, то нужно озаботиться, чтобы стандарты представления письма удовлетворялись максимально полно.
Это и кодирование строк в заголовках, и кодирование имен прикрепляемых файлов, и возможно даже формирование обеих алтернативных секций (и html и голый текст) в одном письме.
Правда абсолютно всем клиентам не угодишь, и где-то на пути вылизывания процесса формирования письма всё-равно придется поставить точку. Компромисс выбирать Вам. )) | |
|
|
|
|
|
|
|
для: Trianon
(08.08.2006 в 16:20)
| | это МОЙ сервер чудит? у меня работало и в той версии, которую я привела выше.
переделка потребовалась, когда некоторые клиенты начали жаловаться, что к ним
приходит нечитаемая абракадабра. я проверяла все отсылки писем и через Outlook
и через веб-почту, все было видно. но раз народ жалуется - переделала так, чтоб в
тело письмо включался HTML. и после этого и у меня перестало читаться. вот сейчас
с вашей помощью справились. надо будет теперь послать тем, которые не видели
раньше. интересно, что к ним придет... а с этого хостинга мы уйдем скоро. зануды они. | |
|
|
|
|
|
|
|
для: elenaki
(08.08.2006 в 16:12)
| | почтовая система у Вашего хостера, похоже, убогая... в том смысле, что в php-мануале (в описании функции mail) это про нее:
additional_headers (optional)
String to be inserted at the end of the email header.
This is typically used to add extra headers (From, Cc, and Bcc). Multiple extra headers should be separated with a CRLF (\r\n).
Замечание: When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini.
Failing to do this will result in an error message similar to Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing.
Замечание: If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with RFC 2822. | |
|
|
|
|
|
|
|
для: Trianon
(08.08.2006 в 16:05)
| | получилось!!!!!! ура!!!!!!! заработало!!!!!!!
спасибо. Trianon - ты супер! :):):) | |
|
|
|
|
|
|
|
для: elenaki
(08.08.2006 в 15:42)
| | А если сделать $EOL= "\n";
? | |
|
|
|
|
|
|
|
для: Trianon
(08.08.2006 в 15:20)
| | это мне влепило в тему:
dGVzdCBzZW5kIHdpdGggYXR0YWNobWVudA==
вот, смотрите, что пришло. теперь и тема не читается. опять заголовки в теле письма. а
само письмо - в виде последних трех строк на две страницы.
PS.
попробовала послать письмо в виде HTML, чтоб проверить, не сломалось ли. и ... письмо
нормально, а в теме - тот же набор случайных букв и цифр. может, не надо тему кодировать? | |
|
|
|
|
|
|
|
для: elenaki
(08.08.2006 в 14:51)
| | Разделение заголовков и тела основного сообщения выполняется самой функцией mail.
С учетом этого я бы переписал код так:
<?
function send_mail($mail_to, $thema, $html, $path)
{ if ($path) {
$fp = fopen($path,"rb");
if (!$fp)
{ print "Cannot open file";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
}
$name = "file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)
$EOL = "\r\n"; // ограничитель строк
$boundary = "--".md5(uniqid(time())); // любая строка, которой не будет ниже в потоке данных.
$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";
$headers .= "From: address@server.com";
$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset=windows-1253$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL; // раздел между заголовками и телом html-части
$multipart .= chunk_split(base64_encode($html));
$multipart .= "$EOL--$boundary$EOL";
$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";
$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
$multipart .= chunk_split(base64_encode($file));
$multipart .= "$EOL--$boundary--$EOL";
if(!mail($mail_to, $thema, $multipart, $headers))
{return False; //esli NE poslano
}
else { //// esli poslano
return True;
}
exit;
} //// end of function
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(08.08.2006 в 14:31)
| |
function send_mail($mail_to, $thema, $html, $path)
{ if ($path) {
$fp = fopen($path,"r");
if (!$fp)
{ print "Cannot open file";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
}
$boundary = "--".md5(uniqid(time())); // ?????????? ???????????
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$headers .= "From: address@server.comr\r\n\r\n";
$multipart = "--$boundary\n";
$multipart .= "Content-Type: text/html; charset=windows-1253\n";
$multipart .= "Content-Transfer-Encoding: base64\n";
$multipart .= "$html\n";
$message_part = "--$boundary\r\n";
$message_part .= "Content-Type: application/octet-stream\r\n";
$message_part .= "Content-Transfer-Encoding: base64\r\n";
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n";
$message_part .= chunk_split(base64_encode($file))."\n";
$multipart .= $message_part."--$boundary--\r\n";
if(!mail($mail_to, $thema, $multipart, $headers))
{return False; //esli NE poslano
}
else { //// esli poslano
return True;
}
exit;
} //// end of function
|
функция взята из раздела download. переменные $thema и $path определяются выше,
перед функцией. $mail_to выбирается в цикле из списков рассылки. $path - путь к
прикрепляемому файлу, тоже определяется выше.
сначала идет сбор адресов, по которым надо послать. в цикле поочереди открываются
нужные списки рассылки и данные из них заносятся в один массив. потом в цикле, пока
есть адреса в этом массиве, в зависимости от того, нужно ли слать простое письмо или
в виде HTML или с аттачментом, вызывается или эта функция (выше) или просто mail(). | |
|
|
|
|
|
|
|
для: elenaki
(08.08.2006 в 14:29)
| | показывайте скрипт. | |
|
|
|
|
|
|
|
для: Trianon
(08.08.2006 в 14:10)
| | не получается :( все равно пишет кучу кода в теле письма, начиная с заголовков
Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename = "attachments/VolumeC.txt" ( в одну строку, безо всяких переводов строк).
не понимает он \r\n. а просто с \n (но без аттачмента) приходит нормально.
а вот с темой проблем не было, даже если письмо не читалось - тема читалась.
письмо в виде HTML доходит нормально. письмо просто текст без аттачмента - тоже.
а просто текст с аттачментом (текстом, doc или картинкой) - вываливает кучу кода
в тело письма. и ничего, кроме темы, не читается. | |
|
|
|
|