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

Форум PHP

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

 

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

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

тема: Письмо с вложением
 
 автор: ADmexture   (18.04.2006 в 12:44)   письмо автору
 
 

Привет.

Зашел в поиск, много чего нашел, но на чужих примерах не понятно.

Первый вопрос (теоритеческий):
Какие средства надо подключить, чтобы отправлять письмо с вложением (слышал про почтовый клиент, но что это такое беспонятия)?

Вопрос второй (практический):

Подскажите, как правильно обработать вот это форму, три дня уже бъюсь.

Главная загвостка в присоединении фотографии в виде аттача, или хотя бы в тело письма.

Обработчик (елси его можно так назвать) :( , чуть ниже.


<FORM onsubmit="return check_form(this);" action=online.php method=post enctype="multipart/form-data">
<TABLE width="100%" border=0>
              <TR> 
                <TD><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Тема<FONT color=#ff0000>*</FONT>:</FONT></TD>
                <TD><SELECT name=select>
                    <OPTION value="" selected>Выберите тему &gt;&gt;&gt;</OPTION>
                    <OPTION value=diag>Для уточнения диагноза и предоставления 
                    рекомендаций</OPTION>
                    <OPTION value=org>По вопросам организации диагностики и лечения 
                    </OPTION>
                    <OPTION value=money>По вопросам оплаты диагностики и лечения</OPTION>
                  </SELECT> </TD>
              </TR>
              <TR> 
                <TD width="41%" height=25><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>ФИО 
                  пациента<FONT color=#ff0000>*</FONT><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>:</FONT></FONT></TD>
                <TD width="59%"><INPUT size=35 name=fiop> </TD>
              </TR>
              <TR> 
                <TD><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Пол 
                  пациента<FONT color=#ff0000>*</FONT><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>:</FONT></FONT></TD>
                <TD> <INPUT size=35 name=pol></TD>
              </TR>
              <TR> 
                <TD><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Возраст 
                  пациента<FONT color=#ff0000>*</FONT>:</FONT></TD>
                <TD> <INPUT size=35 name=year></TD>
              </TR>
              <TR> 
                <TD height="44"><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>ФИО 
                  доверенного лица (в случае, если консультация организуется через 
                  него):</FONT></TD>
                <TD> <INPUT size=35 name=fiod></TD>
              </TR>
              <TR> 
                <TD height="51"><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Полный 
                  почтовый адрес (с индексом) пациента или доверенного лица<FONT color=#ff0000>*</FONT>:</FONT></TD>
                <TD> <INPUT size=35 name=pochta></TD>
              </TR>
              <TR> 
                <TD height="47"><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Контактный 
                  телефон пациента или доверенного лица<FONT color=#ff0000>*</FONT>:</FONT></TD>
                <TD> <INPUT size=35 name=tel></TD>
              </TR>
              <TR> 
                <TD height="46"><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Адрес 
                  электронной почты пациента или доверенного лица<FONT color=#ff0000>*</FONT>:</FONT></TD>
                <TD> <INPUT size=35 name=email></TD>
              </TR>
               <TR> 
                <TD height="46"><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Прикрепить результаты<FONT color=#ff0000>*</FONT>:</FONT></TD>
                <TD><input type="hidden" name="MAX_FILE_SIZE" alue="1024000">
<input name="vlog" type="file"></TD>
              </TR>
              <TR>
                <TD height="46"><FONT face="Verdana, Arial, Helvetica, sans-serif" color=#332f2f size=-1>Дополнительная 
                  информация<FONT color=#ff0000>*</FONT>:</font></TD>
                <TD><textarea name="text" cols="45" rows="10" ></textarea></TD>
              </TR>
            </TABLE>
</form>


А вот и он, возможно там много лишнего, но я беспонятия что с этим делать, просьба разобраться.


<?php


$fiop 
trim ($fiop);
$fiod trim ($fiod);
$email trim ($email);
$pol trim ($pol);
$year trim ($year);
$pochta trim ($pochta);
$money trim ($money);
$tel trim ($tel);

switch(
$select)
{
        case 
"diag":
        echo 
'<p>Уточнения  диагноза и  предоставления рекомендаций по лечению профильных патологий</p>';
        break;

        case 
"org":
        echo 
'<p>По вопросам организации диагностики и лечения</p>';
        break;

        case 
"money":
        echo 
'<p>По вопросам оплаты диагностики и лечения</p>';
        break;
}

  
$_POST['fiop'] = htmlspecialchars(stripslashes($_POST['fiop']));
  
$_POST['fiod'] = htmlspecialchars(stripslashes($_POST['fiod']));
  
$_POST['email'] = htmlspecialchars(stripslashes($_POST['email']));
  
$_POST['pol'] = htmlspecialchars(stripslashes($_POST['pol']));
  
$_POST['year'] = htmlspecialchars(stripslashes($_POST['year']));
  
$_POST['pochta'] = htmlspecialchars(stripslashes($_POST['pochta']));
  
$_POST['money'] = htmlspecialchars(stripslashes($_POST['money']));
  
$_POST['tel'] = htmlspecialchars(stripslashes($_POST['tel']));
  
$picture "";
  
// Если поле выбора вложения не пустое - закачиваем его на сервер
  
if (!empty($_FILES['vlog']['tmp_name']))
  {
    
// Закачиваем файл
    
$path $_FILES['vlog']['name'];
    if (
copy($_FILES['vlog']['tmp_name'], $path)) $picture $path;
  }
    
$fiop =$HTTP_POST_VARS['fiop'];
    
$fiod =$HTTP_POST_VARS['fiod'];
    
$email=$HTTP_POST_VARS['email'];
    
$pol =$HTTP_POST_VARS['pol'];
    
$year=$HTTP_POST_VARS['year'];
    
$pochta=$HTTP_POST_VARS['pochta'];
    
$money=$HTTP_POST_VARS['money'];
    
$tel=$HTTP_POST_VARS['tel'];

  
// Отправляем почтовое сообщение
$headers "From: niito@mail.ru";
$subject 'Консультация online: '.$select"\n";
$mailcontent 'ФИО пациента:  ' .$fiop"\n"
               
.'Пол пациента:  ' .$pol."\n"
               
.'Возраст пациента:  ' .$year."\n"
               
.'ФИО доверенного лица:  '.$fiod."\n"
               
.'Почтовый адрес: ' .$pochta."\n"
               
.'Контактный телефон пациента:  ' .$tel."\n"
               
.'E-mail: ' .$email."\n";

$to"ad_mexture@mail.ru";
  
  if(empty(
$picture)) mail($to$subject$mailcontent);
  else 
send_mail($to$subject$mailcontent$picture);
  
// Вспомогательная функция для отправки почтового сообщения с вложением
  
function send_mail($subject$html$path)
  {
    
$fp fopen($path,"r");
    if (!
$fp)
    {
      print 
"Файл $path не может быть прочитан";
      exit();
    }
    
$file fread($fpfilesize($path));
    
fclose($fp);

    
$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 "--$boundary\n";
    
$message_part .= "Content-Type: application/octet-stream\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 .= $message_part."--$boundary--\n";


    if(!
mail($to$subject$multipart$headers))
    {
      echo 
"К сожалению, письмо не отправлено";
      exit();
    }
  }



 print(
"<font face='Verdana, Arial, Helvetica, sans-serif' color=#332f2f size=-1><div align='center'><b>Спасибо!<br><br>Ваша сообшение отправленно.</b></div></font>");
 
  
?>


Спаисбо.

   
 
 автор: cheops (из кафе)   (18.04.2006 в 13:45)
 
   для: ADmexture   (18.04.2006 в 12:44)
 

Если вам не надоели ещё примеры, посмотрите пожалуйста скрипт http://www.softtime.ru/scripts/mailattach.php - он 100% рабочий...

   
 
 автор: ADmexture   (18.04.2006 в 14:01)   письмо автору
 
   для: cheops (из кафе)   (18.04.2006 в 13:45)
 

Я его смотрел, только что попробовал:

При отправке пишет: Введите адрес получателя.
Ну вы конечно понимаете, что адрес я ввожу :)

В чем же все таки дело?

   
 
 автор: cheops   (19.04.2006 в 16:35)   письмо автору
 
   для: ADmexture   (18.04.2006 в 14:01)
 

Хм... а вы HTML-форму не меняете?

   
 
 автор: Jura   (19.05.2006 в 16:06)   письмо автору
 
   для: cheops (из кафе)   (18.04.2006 в 13:45)
 

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

Нашел тут класс один, на деневере работает, а на сервере никак не может отправить. и скрипт вешается. ошибки в логах не пишутся, видать из за несовместимости версий. Та как класс написан для 5 php, а стоит четвертый.

   
 
 автор: Jura   (25.05.2006 в 11:03)   письмо автору
 
   для: ADmexture   (18.04.2006 в 12:44)
 

http://softtime.ru/forum/files/17812-20060525012636.txt - тут немного переработаный скрипт, но тоже работоспособный. Скорее всего из него вырастет довольно скоро целый скрипт-модуль.

   
 
 автор: kadet_73   (25.05.2006 в 11:20)   письмо автору
 
   для: Jura   (25.05.2006 в 11:03)
 

Вот рабочий скрипт, остаётся только написать мыло и какой файл аттачится-в нижнеё части




<?php

class mime_mail {
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;

// создаем класс
function mime_mail() {
$this->parts = array();
$this->to = "";
$this->from = "";
$this->subject = "";
$this->body = "";
$this->headers = "";
}

// как раз сама функция добавления файлов в мыло
function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
$this->parts [] = array (
"ctype" => $ctype,
"message" => $message,
"encode" => $encode,
"name" => $name
);
}

// Построение сообщения (multipart)
function build_message($part) {
$message = $part["message"];
$message = chunk_split(base64_encode($message));
$encoding = "base64";
return "Content-Type: ".$part["ctype"].($part["name"]? "; name = \"".$part["name"]."\"" : "")."\nContent-Transfer-Encoding: $encoding\n\n$message\n";
}

function build_multipart() {
$boundary = "b".md5(uniqid(time()));
$multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
for($i = sizeof($this->parts)-1; $i>=0; $i--) $multipart .= "\n".$this->build_message($this->parts[$i]). "--$boundary";
return $multipart.= "--\n";
}

// Посылка сообщения, последняя вызываемая функция класса
function send() {
$mime = "";
if (!empty($this->from)) $mime .= "From: ".$this->from. "\n";
if (!empty($this->headers)) $mime .= $this->headers. "\n";
if (!empty($this->body)) $this->add_attachment($this->body, "", "text/plain");
$mime .= "MIME-Version: 1.0\n".$this->build_multipart();
mail($this->to, $this->subject, "", $mime);
}
}


//Вот и все, привожу пример использования класа:


$attachment = fread(fopen("Ваш файл с путём к нему", "r"), filesize("Ваш файл с путём к нему"));
$mail = new mime_mail();
$mail->from = "мыло с которого отправляется ";
$mail->to = "Кому отправляется мыло";
$mail->subject = "тема письма";
$mail->body = " тело сообщения";
$mail->add_attachment("$attachment", "имя файла без пути", "Content-Transfer-Encoding: base64");
$mail->send();

?>

   
 
 автор: Jura   (25.05.2006 в 11:49)   письмо автору
 
   для: kadet_73   (25.05.2006 в 11:20)
 

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

Это парсить надо? полученный код? или как это реализовать?

   
 
 автор: Jura   (25.05.2006 в 11:21)   письмо автору
 
   для: ADmexture   (18.04.2006 в 12:44)
 

Ошибка в строке 52 первого файла!

                <TD><input type="hidden" name="MAX_FILE_SIZE" alue="1024000"> 


Должно быть

                <TD><input type="hidden" name="MAX_FILE_SIZE" value="1024000"> 

И тогда все заработает. ;)

   
Rambler's Top100
вверх

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