| |
|
|
| | Всем привет!
Задаю, наверное, всем известный до боли вопрос с отправкой писем при помощи формы обратной связи на сайте.
Пример сценария я взял из скриптов: Отправка письма с почтовым вложением.
Так вот у меня такой вопрос, для того, чтобы мне отправлять успешно почту, мне необходим сервер SMTP?
Кроме этого я хотел бы у Вас узнать, что необходимо дописать, чтобы при отправке сообщения - сообщение отправлялось на конкретный адрес, вот пример скрипта:
<?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");
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to']));
$_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject']));
$_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg']));
$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($to, $thm, $html, $path)
{
$fp = fopen($path,"r");
if (!$fp)
{
print "Файл $path не может быть прочитан";
exit();
}
$file = fread($fp, filesize($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, $thm, $multipart, $headers))
{
echo "К сожалению, письмо не отправлено";
exit();
}
}
?>
|
Что необходимо исправить?
Заранее спасибо за ответ! | |
| |
|
|
| |
|
|
| |
для: Vados
(28.07.2006 в 11:19)
| | | Прошу очень нужно, помогите! | |
| |
|
|
| |
|
|
| |
для: Vados
(28.07.2006 в 11:43)
| | | в ф-ии mail() ты не ту переменную подставил.
надо mail_to, а не to | |
| |
|
|
| |
|
|
| |
для: Vados
(28.07.2006 в 11:43)
| | | Возможно, это опечатка, но нашел баг у вас в скрипте - вот в этом месте:
<?php
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
<?php
|
Корректно должно работать вот это:
<?php
// Отправляем почтовое сообщение
if(empty($picture)) {
mail($mail_to, $thm, $msg);
} else {
send_mail($mail_to, $thm, $msg, $picture);
}
?>
|
Вообще какую он ошибку выдает? | |
| |
|
|
| |
|
|
| |
для: Vados
(28.07.2006 в 11:19)
| | | 1) Вы откуда хотите почту отправлять с сервера или локальной машины?
2) Под конкретным адресом что подразумевается? Вы будете каждый раз слать письмо на один и тот же адрес? Тогда просто добавьте в начале строку
<?php
$_POST['mail_to'] = "someone@somewhere.ru";
?>
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(28.07.2006 в 11:46)
| | | Да с локальной машины.
Скажите, а если я буду использовать это на удалённой?
Как это реализовывается.
А бага там никакого нет! | |
| |
|
|
| |
|
|
| |
для: Vados
(28.07.2006 в 11:57)
| | | Если на сервере настроен почтовый сервер, то проблем не возникнет - всё будет отправляться. | |
| |
|
|
| |
|
|
| |
для: cheops
(28.07.2006 в 12:01)
| | | Хорошо, спасибо!
А чтобы локально у меня была возможность пробовать отправить письма, мне что необходимо?!
Расскажите пожалуйста? | |
| |
|
|
|