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

Форум PHP

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

 

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

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

тема: Отправка письма с картинками
 
 автор: gOFREe   (16.10.2013 в 10:52)   письмо автору
 
 

Помогите понять данный скрипт. Почему в приходящем письме нет текста?
переменная $body как будто пропадает
Только вложение.
<?php 

function sendhtml($from=""$to=""$bcc=""$reply_to=""$charset=""$subject=""$message=""$picture_patch_logo=""){
$mail_default="test@domain.ru"/// почтовый адрес по умолчанию служит для отладки, если остальные поля не заполнены
$body_pic=""// не удалять - пустое значение так как прикрепляется в код




if(isset($from) && !empty($from)){$from_mail=$from;} else {$from_mail=$mail_default;} // поле FROM
if(isset($to) && !empty($to)){$to_mail=$to;} else {$to_mail=$mail_default;} // поле TO
if(isset($bcc) && !empty($bcc)){$bcc_mail=$bcc;} else {$bcc_mail=$mail_default;} // поле ИСС - СКРЫТАЯ КОПИЯ
if(isset($reply_to) && !empty($reply_to)){$reply_to_mail=$reply_to;} else {$reply_to_mail=$mail_default;} // поле Reply-To - куда слать ответ

if(isset($charset) && !empty($charset)){$charset_mail=$charset;
//------------------------------------------- короткие имена кодировок
$array_dopusk['w']="windows-1251";
$array_dopusk['k']="koi8-r";
//$array_dopusk['u']="utf-8"; // до правильной конвертации пока не дошел
if (array_key_exists("$charset"$array_dopusk)){$charset_mail=$array_dopusk["$charset"]; 

} else {
$charset_mail="windows-1251";}
//------------------------------------------- короткие имена кодировок
} else {$charset_mail="windows-1251";} // поле FROM

if(!isset($message) or empty($message)){
$message="тестовое сообщение";


if(!isset(
$subject) or empty($subject)){
$subj="тестовое сообщение";
} else {

$subj=iconv("windows-1251""$charset_mail"$subject);
}


$bound=md5(uniqid(time())); // идентификатор уникальный






//----------------------------------------------------------------------------------------------------------------------- вставка картинки
if(isset($picture_patch_logo) && !empty($picture_patch_logo) && $picture_patch_logo!="none" ){$file_name=$picture_patch_logo// полный путь к файлу
if (file_exists($picture_patch_logo)) {
//-------------------------------------------
$body_pic.="Content-Type: image/jpeg; name=\"".basename($file_name)."\"\n"
$body_pic.="Content-Transfer-Encoding:base64\n"
$body_pic.="Content-ID: <logo>\n\n"
$f=fopen($file_name,"rb"); 
$body_pic.=chunk_split(base64_encode(fread($f,filesize($file_name))))."\r\n"
//$body.="\n\n--$bound_pic\n"; 
$body_pic.="--$bound--\n\n"

$html_pic="<img src='cid:logo' alt='a_title' width='362' height='53' border='0'>";
//-------------------------------------------
} else {echo "файл $picture_patch_logo не найден <br>"; exit;}

if(!isset(
$html_pic) or empty($html_pic)){$html_pic="Здесь должна быть картинка - шаблон страницы в функции";}
//----------------------------------------------------------------------------------------------------------------------- вставка картинки


//------------------------------------------------------------------- основной скрипт


$patch_file="http://url_site";
$headers ="From: $from\n"
$headers .= "Reply-To: $from\r\n"
$headers .= "Bcc: $bcc\r\n"// можно закоментировать
$headers .= "X-Mailer: PHP FUNC SENDER ATTACH V1\r\n";  // желательно, для уменьшения коэффициента спама

$headers.="Mime-Version: 1.0\n"
$headers.="Content-Type: multipart/alternative; boundary=\"$bound\"\n"
$body="--$bound\n"// начальный идентификатор вложений
$body.="Content-type: text/html; charset=\"$charset_mail\"\n"

$body.="Content-Transfer-Encoding: 8bit\n\n"
$body_message.="<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=
$charset_mail'>
<title>
$subject</title>
</head>
<style type='text/css'>
<!--
A:visited {text-decoration: none; color: #5678A2; } /* цвет ссылки в дефолте*/
A:hover {text-decoration: none; color: Navy; } /* при наведении мыши*/
A:active {text-decoration: none; color: black;}  /*после нажатия*/
A:link {text-decoration: none; color: #5678A2;} /**/
-->
</style>
<body style='padding:5px'>
Картинка вставляется через единую переменную, которая прикрепляется в шаблон, если указан верный путь к файлу. 
$html_pic <br>
<strong>URL: <a href='
$patch_file' title='Посмотреть новость в обычном формате' >$patch_file</a></strong>".date("d.m.Y H-i-s")."<br>
текст сообщения 
$message <br>
</body>
</html>"

$body.=iconv("windows-1251""$charset_mail"$body_message); // по умолчанию перекодировка в любую кодировку
$body.="\n\n--$bound\n";  // заершение общей части

$body.=$body_pic// прикрепление части с графикой
$result mail("$to_mail"$subj$body$headers);  // отправка

if($result){return "$to_mail -> <font color='#009933'>ok</font> <br>"; } else {echo "Возникла ошибка отправки сообщения"; return;}
//------------------------------------------------------------------- основной скрипт

// конец функции



//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ рабочий скрипт
// допустимые кодировки k =koi8-r, w = win1251

echo sendhtml(/*from:*/"mail_from@domain.ru"/*to:*/"mail_to@domain.ru"/*скрытая копия bcc:*/"mail_bcc@domain.ru"/*на какой адрес отвечать reaply-to*/"mail_reaply-to@domain.ru"/*Кодировка:*/"w"/*Тема:*/"Проверка отправки из функции в кодировке win-1251"/*Текст сообщения,встраиваемый в шаблон:*/"Здесь можно спокойно вставлять сгенерированный html"/*Полный путь(или относительно каталога скрипта запуска функции) к рисунку:*/"/var/bbb/logo.jpg");

?> 

  Ответить  
 
 автор: Slo_Nik   (16.10.2013 в 11:32)   письмо автору
 
   для: gOFREe   (16.10.2013 в 10:52)
 

а что error_reporting() Вам говорит?

  Ответить  
 
 автор: gOFREe   (16.10.2013 в 12:20)   письмо автору
 
   для: Slo_Nik   (16.10.2013 в 11:32)
 

Ругается на переменную $body_message
Notice: Undefined variable: body_message

Ошибку понял. $body_message = ""

Только это ничего не поменяло

  Ответить  
 
 автор: Slo_Nik   (16.10.2013 в 15:40)   письмо автору
 
   для: gOFREe   (16.10.2013 в 12:20)
 

та даже если не объявлять данную переменную - работает.
на почту приходит письмо с картинкой и текстом
как Вы используете данную функцию?

  Ответить  
 
 автор: Jura   (16.10.2013 в 14:21)   письмо автору
 
   для: gOFREe   (16.10.2013 в 10:52)
 

Принцип работы скрипта крайне прост: отправлять почту стандартным средством..

Проблема появляется лишь только от неправильных настроек сервера. Также не стоит забывать, что некоторые функции в php 5.4 deprecated.

Но настоятельно рекомендую воспользоваться любым классом отправки письма через SMTP, примеров множество на http://phpclasses.org

Теория по данному вопросу очень хорошо расжевана http://www.php.su/articles/?cat=email&page=007


ну а если совсем лень.... посмотри http://webi.ru/webi_files/php_libmail.html

  Ответить  
 
 автор: gOFREe   (18.10.2013 в 18:15)   письмо автору
 
   для: Jura   (16.10.2013 в 14:21)
 

Спасибо, с этим разобрался!

Возник другой вопрос, указывая несколько адресов для рассылки одного письма, можно ли как то скрыть остальных получателей?
т.е. получая письмо, человек видит в получателях только свой email

  Ответить  
 
 автор: Sfinks   (19.10.2013 в 10:23)   письмо автору
 
   для: gOFREe   (18.10.2013 в 18:15)
 

> можно ли как то скрыть остальных получателей?
Нельзя

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

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