| |
|
|
| | Здесь есть, очень ценный скрипт, я и форму и обработчик разместил на странице send.php
но проблема в том, что скрипт отправляет, но не дает отчета, отправил он его или нет
а как это сделать?
http://softtime.ru/scripts/mailattach.php | |
| |
|
|
| |
|
|
| |
для: fxsektor
(10.07.2007 в 10:06)
| | | Я немного переделал конечную часть скрипта:
if(!mail($mail_to, $thema, $multipart, $headers))
{return False; //если не письмо не отправлено
echo "Письмо не отправлено!";
}
else { //// если письмо отправлено
echo "Ура! Письмо отправлено успешно!";
return True;
}
exit;
} | |
| |
|
|
| |
|
|
| |
для: wolfandman
(10.07.2007 в 10:32)
| | | Проверь у себя, у меня не работает :( | |
| |
|
|
| |
|
|
| |
для: fxsektor
(10.07.2007 в 11:50)
| | | А, я понял. То что я выше писал - это функция, которая даже не вызывается.
Вот этот код рабочий, правда не очень элегантный. Я проверил
<?php
if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
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($mail_to, $thm, $msg); if ($mail) echo "ПИСЬМО ОТПРАВЛЕНО (без вложений)"; else echo "ПИСЬМО НЕ ОТПРАВЛЕНО";}
else {$send_mail=send_mail($mail_to, $thm, $msg, $picture);
if ($send_mail) echo "ПИСЬМО ОТПРАВЛЕНО (с вложением)"; else echo "ПИСЬМО НЕ ОТПРАВЛЕНО";}
// Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)
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"; // ограничитель строк, некоторые почтовые сервера требуют \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; //если не письмо не отправлено
}
else { //// если письмо отправлено
return True;
}
exit;
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: wolfandman
(10.07.2007 в 12:29)
| | | если механизм работает в том же скрипте где и выдача результата, то есть проблема, что если страницу с выданным результатом обновить, то механизм передачи выполниться 2ой раз, что все таки не есть хорошо...
я приспособился работать с сессией
forma.php:
<form action="send.php">....</form>
send.php:
<?
session_start();
...
if (mail(...))
{
$_SESSION['send_result'] = 'сообщение отправлено';
} else
{
$_SESSION['send_error'] = 'тут список ошибок';
}
?>
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=<?=$_SERVER['HTTP_REFERER']?>" />
</head>
</html>
forma.php:
session_start();
...
$send_result = @$_SESSION['send_result'];
if (!empty($send_result)) unset($_SESSION['send_result']);
$send_error = @$_SESSION['send_error'];
if (!empty($send_error)) unset($_SESSION['send_error']);
...
if (!empty($send_result)) echo '<span style="color: green;">'.$send_result.'</span>';
if (!empty($send_error)) echo '<span style="color: red;">'.$send_error.'</span>';
...
|
какие плюсы:
- избавляемся от ненужных флажков, если результат операции передовать с помощью GET (не портим адресную строку)
- можем записать в сессионную переменную все что угодно, т.е. во время обработки пишем туда текст ошибки, а не какой-то код, а при выводе просто выводим текст переменной, а не ковыряемся к какому коду ошибки какое сообщение писать
- избавляемся от вероятного 2го раза отработки скрипта после выдачи результатов
- это работает ;) | |
| |
|
|