Помогите, пожалуйста, разобраться в следующем:
Форму обратной связи делала по урокам.
В файле config.inc.php есть такие строки, отвечающие за адреса, куда будут отправляться письма
$recipient[1] = 'mail@mail.ru';
$recipient[2] = 'mail@mail.ru';
Разве не на все адреса должна приходить почта?
Когда указываю адрес 2символа@2символа.ru, выдается ошибка↓, хотя адрес, который указываю, существует. Использую ящик mail.ru - все доходит без проблем.
$error['mailer'] = "<br/>Извините, произошла непредвиденная ошибка. Ваша анкета не была отправлена";
Что мне делать?
Спустя 8 минут, 26 секунд (24.04.2010 - 23:09) Nikitian написал(а):
Цитата |
Что мне делать? |
Выложить код и процитировать ошибку.
Спустя 19 минут, 51 секунда (24.04.2010 - 23:29) veronica85 написал(а):
index.php
<?php
//Инициализация сессии
session_start();
//Подключаем файл конфигурации
require("inc/config.inc.php");
//Подключаем файл с функциями
require("inc/functions.inc.php");
//Были ли нажата кнопка
if(@$_POST['do']!=''){
//Создаем переменные
$_ERR='';
$page='';
$head='';
//Переопределяем переменную
$keystring = $_REQUEST['keystring'];
//Сравниваем
if ($keystring != $_SESSION['captcha_keystring'] OR empty($keystring)) {
//Составляем уведомление
$page.='<p style="color:red">Ошибка: '.$error['captcha'].'</p>';
unset($_SESSION['captcha_keystring']);
}
else {
//Если мэйл обязателен
if($requirements['email']==1){
//Проверяем
if(checkmail($_POST['field']['email']) ===0 ){ $_ERR.=$error['email'];}
} else { //Если нет
//Было ли заполнено
if($_POST['field']['email']!=''){
//Тогда проверяем
if(checkmail($_POST['field']['email']) ===0 ){ $_ERR.=$error['email'];}
}
}
//Запускаем цикл
for($i=1;$i<=count($requirements);$i++){
//Проверяем
if($requirements[$i] ==1) {
//Проверяем существование переменной
if(!isset($_POST['field'][$i]) OR $_POST['field'][$i]=='' ) { $_ERR.=$error[$i];}
}
}
//Если есть ошибки
if($_ERR !='') {
$page.='<p style="color:red">Ошибка: '.$_ERR.'</p>';
} else {
//Подгружаем шаблон формы
$_tmpl = @join('',@file($_file));
//Парсим шаблон
for($k=1;$k<=count($requirements);$k++){
//Проверяем массив ли это?
if(is_array($_POST['field'][$k])) {
//Формируем строку из массива
$_string = implode(",",$_POST['field'][$k]);
//Заменяем метку
$_tmpl = str_replace('[FIELD'.$k.']',$_string,$_tmpl);
} else {
//Заменяем метки
$_tmpl = str_replace('[FIELD'.$k.']',$_POST['field'][$k],$_tmpl);
}
}
//Заменяем метку эл.адреса
$_tmpl = str_replace('[EMAIL]',$_POST['field']['email'],$_tmpl);
//Заменяем служебные метки
$_tmpl = str_replace('[DATA]',date("d.m.Y H:i:s"),$_tmpl);
$_tmpl = str_replace('[IP]',getenv('REMOTE_ADDR'),$_tmpl);
$_tmpl = str_replace('[BROWSER]',getenv('HTTP_USER_AGENT'),$_tmpl);
$_tmpl = str_replace('[URL]',getenv('HTTP_REFERER'),$_tmpl);
//Разбираем массив получателей
$_to = implode(",",$recipient);
//Отправляем письмо
if(@mail($_to, $_subject, $_tmpl, $_headers)){
if($_redirect == 0){
//Перенаправляем пользователя на страницу
header("Location:".$_success_url);
}
if($_redirect == 1) {
//Перенаправляем пользователя на страницу при помощи js с нулевой задержкой
$head .= '<script type="text/javascript">
setTimeout(\'location.replace("'.$_success_url.'")\', 0);
</script>
<noscript>
<meta http-equiv="refresh" content="0; url='.$_success_url.'">
</noscript>';
}
$page.='<p style="color:#ca2720">Спасибо. Ваше сообщение отправлено</p>';
} else {
$page.='<p style="color:red">Ошибка: '.$error['mailer'].'</p>';
}
}
}
if($page==''){ $page.='<p style="color:red">Ошибка: '.$error['render'].'</p>';}
//Разрушаем сессию
unset($_SESSION['captcha_keystring']);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<?=$head;?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
<link href="/css/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Написать письмо</h1>
<!--уведомелния-->
<?=$page;?>
<!--/уведомления-->
<!--BEGIN FORM-->
<form action="" method="post" style="width: 320px;" >
<span class="req">*</span> Ваше имя:<br/>
<input type="text" name="field[1]" value="<?= $_POST['field']['1']?>" maxlength="50" size="50"/><br/>
<span class="req">*</span> Ваш e-mail:<br/>
<input type="text" name="field[email]" value="<?=$_POST['field']['email']?>" maxlength="255" size="50" /><br/>
Заголовок:<br/>
<input type="text" name="field[2]" value="<?= $_POST['field']['2']?>" maxlength="50" size="50" /><br/>
<span class="req">*</span> Текст сообщения:<br/>
<textarea name="field[3]" wrap="on" rows="7" cols="49"><?=$_POST['field']['3']?></textarea><br/>
<a name="captcha"></a>
<p><span class="req">*</span> Введите число: <input type="text" name="keystring" size="10"></p>
<p><img src="kcaptcha/img.php" id="image"></br>
<a href="#captcha" onClick="document.getElementById('image').src='kcaptcha/img.php?rand='+Math.round(1000 * Math.random());" id="cap">обновить</a></p>
<input type="submit" value="Отправить" class="btn" name="do" />
<div style="clear: both;"></div>
<p><span class="req">*</span> - поля, необходимые для заполнения</p>
</form>
<!--END FORM-->
</body>
</html>
functions.inc.php
<?php
function checkmail($mail) {
// режем левые символы и крайние пробелы
$mail=trim($mail);
// если пусто - выход
if (strlen($mail)==0) return 0;
if (!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|ru|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail))
return 0;
return $mail;
}
?>
config.inc.php
<?php
//Настраиваем массив ошибок
$error = array();
//Ошибки для каждого поля
$error['1'] = "<br/>Необходимо ввести имя";
$error['2'] = "<br/>Необходимо ввести заголовок";
$error['3'] = "<br/>Пожалуйста, введите текст сообщения";
//Служебные ошибки
$error['email'] = "<br/>Введите корректный e-mail адрес";
$error['captcha'] = "<br/>Не верно введен код подтверждения";
$error['render'] = "<br/>Извините, произошла непредвиденная ошибка";
$error['mailer'] = "<br/>Извините, произошла непредвиденная ошибка. Ваша анкета не была отправлена";
//Настраиваем обязательность(1)/необязательность(0)
$requirements = array();
$requirements['email'] = 1;
$requirements['1'] = 1;
$requirements['2'] = 0;
$requirements['3'] = 1;
//Настраиваем получателей
//дополнительный адрес настраивается путем добавления еще одного элемента массива
$recipient = array();
$recipient[1] = 'mail@mail.ru';
//$recipient[2] = '00@00.ru';
//Указываем путь к шаблону письма
$_file = 'tmpl/index.html';
//Метод редиректа
$_redirect = 1;
//Заголовки письма
$_headers = 'MIME-Version: 1.0' . "\r\n";
$_headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
$_headers .= 'From: Сообщение <no-replay@mail.ru>'. "\r\n";
//Тема с которой письмо будет приходить к вам на ящики
$_subject ='C сайта';
?>
Спустя 2 часа, 12 минут, 40 секунд (25.04.2010 - 01:41) Nikitian написал(а):
Попробуйте такой index.php:
И конфиг немного подправим, чисто из соображений обучения и понимания:
Код не проверял, но вроде должно работать.
index.php
<?php
//Инициализация сессии
session_start();
//Подключаем файл конфигурации
require("inc/config.inc.php");
//Подключаем файл с функциями
require("inc/functions.inc.php");
//Были ли нажата кнопка
if(@$_POST['do']!=''){
//Создаем переменные
$_ERR='';
$page='';
$head='';
//Переопределяем переменную
$keystring = $_REQUEST['keystring'];
//Сравниваем
if ($keystring != $_SESSION['captcha_keystring'] OR empty($keystring)) {
//Составляем уведомление
$page.='<p style="color:red">Ошибка: '.$error['captcha'].'</p>';
unset($_SESSION['captcha_keystring']);
}
else {
//Если мэйл обязателен
if($requirements['email']==1){
//Проверяем
if(checkmail($_POST['field']['email']) ===0 ){ $_ERR.=$error['email'];}
} else { //Если нет
//Было ли заполнено
if($_POST['field']['email']!=''){
//Тогда проверяем
if(checkmail($_POST['field']['email']) ===0 ){ $_ERR.=$error['email'];}
}
}
//Запускаем цикл
for($i=1;$i<=count($requirements);$i++){
//Проверяем
if($requirements[$i] ==1) {
//Проверяем существование переменной
if(!isset($_POST['field'][$i]) OR $_POST['field'][$i]=='' ) { $_ERR.=$error[$i];}
}
}
//Если есть ошибки
if($_ERR !='') {
$page.='<p style="color:red">Ошибка: '.$_ERR.'</p>';
} else {
//Подгружаем шаблон формы
$_tmpl = @join('',@file($_file));
//Парсим шаблон
for($k=1;$k<=count($requirements);$k++){
//Проверяем массив ли это?
if(is_array($_POST['field'][$k])) {
//Формируем строку из массива
$_string = implode(",",$_POST['field'][$k]);
//Заменяем метку
$_tmpl = str_replace('[FIELD'.$k.']',$_string,$_tmpl);
} else {
//Заменяем метки
$_tmpl = str_replace('[FIELD'.$k.']',$_POST['field'][$k],$_tmpl);
}
}
//Заменяем метку эл.адреса
$_tmpl = str_replace('[EMAIL]',$_POST['field']['email'],$_tmpl);
//Заменяем служебные метки
$_tmpl = str_replace('[DATA]',date("d.m.Y H:i:s"),$_tmpl);
$_tmpl = str_replace('[IP]',getenv('REMOTE_ADDR'),$_tmpl);
$_tmpl = str_replace('[BROWSER]',getenv('HTTP_USER_AGENT'),$_tmpl);
$_tmpl = str_replace('[URL]',getenv('HTTP_REFERER'),$_tmpl);
//Разбираем массив получателей
//$_to = implode(",",$recipient);
$r=true;
foreach($recipient as $_to){
//Отправляем письмо
$r=$r&&@mail($_to, $_subject, $_tmpl, $_headers);
}
if($r){
if($_redirect == 0){
//Перенаправляем пользователя на страницу
header("Location:".$_success_url);
}
if($_redirect == 1) {
//Перенаправляем пользователя на страницу при помощи js с нулевой задержкой
$head .= '<script type="text/javascript">
setTimeout(\'location.replace("'.$_success_url.'")\', 0);
</script>
<noscript>
<meta http-equiv="refresh" content="0; url='.$_success_url.'">
</noscript>';
}
$page.='<p style="color:#ca2720">Спасибо. Ваше сообщение отправлено</p>';
} else {
$page.='<p style="color:red">Ошибка: '.$error['mailer'].'</p>';
}
}
}
if($page==''){ $page.='<p style="color:red">Ошибка: '.$error['render'].'</p>';}
//Разрушаем сессию
unset($_SESSION['captcha_keystring']);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<?=$head;?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
<link href="/css/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Написать письмо</h1>
<!--уведомелния-->
<?=$page;?>
<!--/уведомления-->
<!--BEGIN FORM-->
<form action="" method="post" style="width: 320px;" >
<span class="req">*</span> Ваше имя:<br/>
<input type="text" name="field[1]" value="<?= $_POST['field']['1']?>" maxlength="50" size="50"/><br/>
<span class="req">*</span> Ваш e-mail:<br/>
<input type="text" name="field[email]" value="<?=$_POST['field']['email']?>" maxlength="255" size="50" /><br/>
Заголовок:<br/>
<input type="text" name="field[2]" value="<?= $_POST['field']['2']?>" maxlength="50" size="50" /><br/>
<span class="req">*</span> Текст сообщения:<br/>
<textarea name="field[3]" wrap="on" rows="7" cols="49"><?=$_POST['field']['3']?></textarea><br/>
<a name="captcha"></a>
<p><span class="req">*</span> Введите число: <input type="text" name="keystring" size="10"></p>
<p><img src="kcaptcha/img.php" id="image"></br>
<a href="#captcha" onClick="document.getElementById('image').src='kcaptcha/img.php?rand='+Math.round(1000 * Math.random());" id="cap">обновить</a></p>
<input type="submit" value="Отправить" class="btn" name="do" />
<div style="clear: both;"></div>
<p><span class="req">*</span> - поля, необходимые для заполнения</p>
</form>
<!--END FORM-->
</body>
</html>
И конфиг немного подправим, чисто из соображений обучения и понимания:
config.inc.php
<?php
//Настраиваем массив ошибок
$error = array();
//Ошибки для каждого поля
$error['1'] = "<br/>Необходимо ввести имя";
$error['2'] = "<br/>Необходимо ввести заголовок";
$error['3'] = "<br/>Пожалуйста, введите текст сообщения";
//Служебные ошибки
$error['email'] = "<br/>Введите корректный e-mail адрес";
$error['captcha'] = "<br/>Не верно введен код подтверждения";
$error['render'] = "<br/>Извините, произошла непредвиденная ошибка";
$error['mailer'] = "<br/>Извините, произошла непредвиденная ошибка. Ваша анкета не была отправлена вовсе, либо отправлена не всем получателям";
//Настраиваем обязательность(1)/необязательность(0)
$requirements = array();
$requirements['email'] = 1;
$requirements['1'] = 1;
$requirements['2'] = 0;
$requirements['3'] = 1;
//Настраиваем получателей
//дополнительный адрес настраивается путем добавления еще одного элемента массива
$recipient = array();
$recipient[1] = 'mail@mail.ru';
//$recipient[2] = '00@00.ru';
//Указываем путь к шаблону письма
$_file = 'tmpl/index.html';
//Метод редиректа
$_redirect = 1;
//Заголовки письма
$_headers = 'MIME-Version: 1.0' . "\r\n";
$_headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
$_headers .= 'From: Сообщение <no-replay@mail.ru>'. "\r\n";
//Тема с которой письмо будет приходить к вам на ящики
$_subject ='C сайта';
?>
Код не проверял, но вроде должно работать.