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

Форум PHP

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

 

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

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

тема: mail
 
 автор: gwest   (28.04.2005 в 12:07)   письмо автору
17.4 Кб
 
 

Хм...В форуме появились темы про отправку почты!
А я вот с этим не разу не сталкивался и сразу у меня возникло куча вопросов :
1. Что надо чтобы можно было отправлять почту с сервера(нужно ли устанавливать sendmail или что-то подобное)?
2. Зачем нужны mail классы?(выкладываю пример)
3. И достаточно ли одной функции mail() чтобы отправить почту ?

Заранее спасибо!

   
 
 автор: cheops   (28.04.2005 в 13:09)   письмо автору
 
   для: gwest   (28.04.2005 в 12:07)
 

1) На сервере должен быть установлен транспортный почтовый агент (например, sendmail, если это UNIX-сервер, обычно он устанавливается сразу).
2) Часто требуется отправлять достаточно сложные почтовые заголовки, а так же вложения, для этого удобно использовать mail-классы, хотя лично я считаю, что без них код получается гораздо нагляденее.
3) Вполне достаточно, с помощью этой функции вы можете отправлять письма любой сложности (с одним или более вложений, в текстовом и HTML-формате).

   
 
 автор: gwest   (28.04.2005 в 14:17)   письмо автору
 
   для: cheops   (28.04.2005 в 13:09)
 

Тоесть такого кода хватит чтобы отправить письмо с прикрепленным к нему файлом?

<?
include"mail.php";
$path="price.csv";
$mail_msg="Прайс бла-бла-бла"
 
if(mail($to$thm$mail_msg$path))
{
echo(
"Прайс выслан!");
}
?>

   
 
 автор: cheops   (28.04.2005 в 22:12)   письмо автору
 
   для: gwest   (28.04.2005 в 14:17)
 

Нет, для отправки вложения необходимо соответствующим образом оформить тело письма и отослать необходимые почтовые заголовки. В теме по ссылке приводится готовая функция send_mail(), написанная на PHP, выполняющая всю рутинную работу, я думаю она вам подойдёт.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=990

   
 
 автор: gwest   (29.04.2005 в 09:59)   письмо автору
 
   для: cheops   (28.04.2005 в 22:12)
 

Я уже смотрел эту тему, но не чего не понял именно поэтому и создал новую тему:
Код подставил а он почемуто не работает, возможно работает толька я этого не вижу!
Работаю с денвером и в текстовом файле где должен записываться пример письма, ни чего не пишется, причем когда писал просто mail() то все писалось.

   
 
 автор: cheops   (29.04.2005 в 12:06)   письмо автору
 
   для: gwest   (29.04.2005 в 09:59)
 

В денвере стоит не полноценный транспортный агент, а эмулятор - когда вы перенесёте код на хостинг - письма будут отправляться.

   
 
 автор: Gwest   (02.05.2005 в 11:27)   письмо автору
 
   для: cheops   (29.04.2005 в 12:06)
 

Не как не могу разобраться с отправкой:
вот код обработчика:

<? 
session_id
();
session_start();
include
"config.php";
$sid=session_id();
$open mysql_query("select * from table1, table2 where value>0 and sid='$sid';");
if(
$open)
{
while(
$data mysql_fetch_array($open))
{
$str="$data[id];$data[name_subject];$data[value]\n";
$test=file_exists("$sid.csv");
 if(
$test)
   {
   
$file=fopen("$sid.csv","a");
      if(
$file)
      {
       
fputs($file$str);
      }
    
fclose($file); 
   }
   else
   {
   
$file=fopen("$sid.csv","w");
      if(
$file)
      {
      
$n="id;товар;кол-во\n";
       
$str_t="$n$str";
      
fputs($file$str_t);
      }
    
fclose($file); 
   }
  }
}
$read=mysql_query("select*from table3 where sid_client='$sid';");
if(
$read)
{
 
$row=mysql_fetch_array($read);
$html="Имя заказчика: $row[name]\nТелефон: $row[tel]\nEmail: $row[email]\nICQ: $row[icq]\n";
}
$path=/$sid.csv;
include
"mail.php"//здесь записан адрес отправки и тема письма
function send_mail($to$thm$html$path
  { 
    
$fp fopen($path,"r"); 
    if (!
$fp
    { 
      print 
"Файл $path не найден"
      exit(); 
    } 
    
$file fread($fpfilesize($path)); 
    
fclose($fp); 
    
$path substr($path,12); 
   
    
$boundary "--".md5(uniqid(time())); // генерируем разделитель 
    
$headers .= "MIME-Version: 1.0\n"
    
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"
    
$multipart .= "--$boundary\n"
    
$kod 'koi8-r'// или $kod = 'windows-1251'; 
    
$multipart .= "Content-Type: text/html; charset=$kod\n"
    
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"
    
$multipart .= "$html\n\n"

    
$message_part ""
    
$message_part .= "Content-Type: application/octet-stream"
    
$message_part .= "; file_name = \"$path\"\n"
    
$message_part .= "Content-Transfer-Encoding: base64\n"
    
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"
    
$message_part .= chunk_split(base64_encode($file))."\n"
    
$multipart .= "--$boundary\n".$message_part."--$boundary--\n"

    if(
mail($to$thm$multipart$headers)) 
    {
    
$del=unlink("$sid.csv");
    echo 
"Сообщение отправлено";
    }
    else
    {
    
$del=unlink("$sid.csv");
    echo 
"Сообщение не было отправлено";
    }
  } 
?>

Я так понимаю что бы сообщение отправилось нужно вызвать функцию send_mail()
Как это сделать?

   
 
 автор: cheops   (02.05.2005 в 12:49)   письмо автору
 
   для: Gwest   (02.05.2005 в 11:27)
 

Да необходим вызов, перед строкой
<?php
  
function send_mail($to$thm$html$path)
?>

Напишите следующую строку
<?php
  send_mail
($to$thm$html$path);
?>

   
 
 автор: Gwest   (02.05.2005 в 13:30)   письмо автору
 
   для: cheops   (02.05.2005 в 12:49)
 

пишет ошибки:
Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in ... on line 73

Warning: Missing argument 1 for send_mail() in ... on line 44

Warning: Missing argument 2 for send_mail() in ... on line 44

Warning: Missing argument 3 for send_mail() in ... on line 44

Warning: Missing argument 4 for send_mail() in ... on line 44


line 44<? function send_mail($to$thm$html$path?>
line 73<? if(mail($to$thm$multipart$headers)) ?>

Возможно, что это из-за не правильных настроек sendmail'a ?

   
 
 автор: cheops   (02.05.2005 в 13:35)   письмо автору
 
   для: Gwest   (02.05.2005 в 13:30)
 

А в какой строке находится вызов
<?php
  send_mail
($to$thm$html$path);
?>

   
 
 автор: Gwest   (02.05.2005 в 13:48)   письмо автору
 
   для: cheops   (02.05.2005 в 13:35)
 

В 43 прямо перед:

<?
function send_mail($to$thm$html$path)
?>

   
 
 автор: cheops   (03.05.2005 в 02:49)   письмо автору
 
   для: Gwest   (02.05.2005 в 13:48)
 

Попробуйте перед вызовом функции проверить переменные $to, $thm, $html, $path - они точно существуют?
<?php
  
if(!isset($to)) exit("Ошибка");
  if(!isset(
$thm)) exit("Ошибка");
  if(!isset(
$html)) exit("Ошибка");
  if(!isset(
$path)) exit("Ошибка");
?>

   
 
 автор: Gwest   (03.05.2005 в 16:18)   письмо автору
 
   для: cheops   (28.04.2005 в 13:09)
 

Спасибо с этим я разобрался!
Остался один вопрос: если стоит Unix то можно отправлять через sendmail, а если стоит windows?
Помнится как то я настраивал рассылку при помощи sendmail'а в Windows'e, но слишком это хлопотно!

   
 
 автор: Gwest   (03.05.2005 в 17:49)   письмо автору
 
   для: Gwest   (03.05.2005 в 16:18)
 

Хм...Сделал отправку письма через провайдера (все работает)!
Вот только прикрепленный фаил (csv) приходит не полный, всего 2 строки, хотя исходный фаил номальный!
Это может быть из-за этой строки?!

<?
$path
=substr($path,12);
?>

   
 
 автор: glsv (Дизайнер)   (05.05.2005 в 12:42)   письмо автору
 
   для: Gwest   (03.05.2005 в 17:49)
 

Продолжение темы

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3872&id_post=22359

   
Rambler's Top100
вверх

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