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

Форум PHP

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

 

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

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

тема: Функция main() с присоединением файла
 
 автор: lbgraf   (18.12.2008 в 23:23)   письмо автору
 
 

Здравствуйте .

На данном ссайте нашел пример отправки почты с прикреплением файла . Запустил отправил почту но когда открыл почту то мэил отправителя почемуто мэил хостинга компании у которых я купил место . Вот код . Помогите разобраться .


Код php

<?php
if(empty($_POST['mail_to'])) exit("no found");

if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to'])) exit("somebody@server.com");
$picture = "";

if (!empty($_FILES['mail_file']['tmp_name']))
{

$path = $_FILES['mail_file']['name'];
if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
}
$thm = $_POST['mail_subject'];
$msg = $_POST['mail_msg'];
$mail_to = $_POST['mail_to'];

if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);

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: lbgraf@gmail.com";

$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL;
$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;
}
else {
return True;
}
exit;
}
?>


код формы

<table width=1 border=0>
<form action=simple_mail.php enctype='multipart/form-data' method=post>

<tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr>
<tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
<tr><td colspan=2>Message:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td>
<tr><td width=50%>Photo:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
</tr><tr><td colspan=2><input type=submit value='Send'></td></tr>
</form>
</table>

  Ответить  
 
 автор: sim5   (19.12.2008 в 04:46)   письмо автору
 
   для: lbgraf   (18.12.2008 в 23:23)
 

mail($mail_to, $thema, $multipart, $headers, -fадрес_отправителя). Если не поможет, то обращаться к хостеру.

PS. Тему на русском нужно кодировать.

  Ответить  
 
 автор: lbgraf   (19.12.2008 в 13:49)   письмо автору
 
   для: sim5   (19.12.2008 в 04:46)
 

Скажите я присвоел значение переменной

$mail_from = "lbgraf@gmail.com";

передаю в функцию все значения

send_mail($mail_to, $thm, $msg, $picture ,$mail_from);

и отправляю

mail($mail_to, $thema, $multipart, $headers ,$mail_from);

правельно . если да то результат не изменился .

Прошу прощение но я только начинаю изучать язык и если Вам не сложно то дайте полный ответ в чем проблема и как ее решать . Спасибо

  Ответить  
 
 автор: sim5   (19.12.2008 в 14:49)   письмо автору
 
   для: lbgraf   (19.12.2008 в 13:49)
 

Нет не правильно. Я же вам написал как:
сперва должен быть ключ для sendmail - -f, а затем без пробела следует адрес, то есть у вас должно быть:
-flbgraf@gmail.com
Если так не будет работать, то только к хостеру обращаться.
Повторяю еще раз, если вы будете отправлять тему письма в русской кодировке не кодируя ее, то адресаты будут получать нечитаемый текст. Следует делать, например, так:
$thema = "=?windows-1251?B?" . base64_encode(текст темы) . "?=";

  Ответить  
 
 автор: lbgraf   (19.12.2008 в 15:00)   письмо автору
 
   для: sim5   (19.12.2008 в 14:49)
 

написал так
mail($mail_to, $thema, $multipart, $headers ,-flbgraf@gmail.com
)

получаю ошибку

Parse error: parse error, unexpected '@' in D:\Domains\bgraf.biz\httpdocs\simple_mail.php on line 53


line 53 - это именно та строка с функцией mail($mail_to, $thema, $multipart, $headers ,-flbgraf@gmail.com
)

  Ответить  
 
 автор: sim5   (19.12.2008 в 15:01)   письмо автору
 
   для: lbgraf   (19.12.2008 в 15:00)
 

Строки нужно писать в кавычках, вам на это парсер указывает, адрес это ведь строка.

  Ответить  
 
 автор: lbgraf   (19.12.2008 в 15:05)   письмо автору
 
   для: sim5   (19.12.2008 в 15:01)
 

т.е. так mail($mail_to, $thema, $multipart, $headers ,"-flbgraf@gmail.com"
)

  Ответить  
 
 автор: sim5   (19.12.2008 в 15:50)   письмо автору
 
   для: lbgraf   (19.12.2008 в 15:05)
 

Да.

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

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