][alter
06-12-2007, 03:01
Доброе время суток.
У меня возникла небольшая проблемка при обработке письма и отправке нужному адресату. Дело в том что, для корректной обработке письма требуется указать поле «recipient» (получатель) их числа администраторы, пользователи и т.д. После удаления данного поля из шаблона формы(а оно не как не вписывается в общий дизайн сайта), возникает ошибка «E-Mail: <> not valid». Как я понимаю, не указан адрес получателя. Вот кусок кода отвечающий за данную операцию:
if (isset($_POST['send'])) {
$stop = "";
if ($is_logged)
{
$name = $member_id['name'];
$email = $member_id['email'];
} else {
$name = $db->safesql(strip_tags($_POST['name']));
$email = $db->safesql(strip_tags($_POST['email']));
$db->query("SELECT name from " . USERPREFIX . "_users where LOWER(name) = '".strtolower($name)."' OR LOWER(email) = '".strtolower($email)."'");
if ($db->num_rows() > 0) {
$stop = $lang['news_err_7'];
}
$name = strip_tags(stripslashes($_POST['name']));
$email = strip_tags(stripslashes($_POST['email']));
}
$subject = strip_tags(stripslashes($_POST['subject']));
$message = strip_tags(stripslashes($_POST['message']));
$recip = intval($_POST['recip']);
function check_email($value) {
return eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $value);
}
if (empty($name)) {
$stop .= $lang['feed_err_1'];
}
if (empty($email)) {
$stop .= $lang['feed_err_2'];
}
elseif (!check_email($email)) {
$stop .= $lang['feed_err_3'];
}
if (empty($subject)) {
$stop .= $lang['feed_err_4'];
}
if (empty($message)) {
$stop .= $lang['feed_err_5'];
}
if ( $_POST['sec_code'] != $_SESSION['sec_code_session'] OR !$_SESSION['sec_code_session']) {
$stop .= $lang['reg_err_19'];
}
$_SESSION['sec_code_session'] = false;
if ($stop) {
msgbox ($lang['all_err_1'], "$stop<br><br><a href=\"javascript:history.go(-1)\">$lang[all_prev]</a>");
} else {
include_once ENGINE_DIR.'/inc/mail.class.php';
$mail = new dle_mail ($config);
$recipient = $db->super_query("SELECT name, email, fullname FROM " . USERPREFIX . "_users WHERE user_id='".$recip."'");
if (empty($recipient['fullname'])) $recipient['fullname'] = $recipient['name'];
$row = $db->super_query("SELECT template FROM " . PREFIX . "_email where name='feed_mail' LIMIT 0,1");
$row['template'] = stripslashes($row['template']);
$row['template'] = str_replace("{%username_to%}",$recipient['fullname'], $row['template']);
$row['template'] = str_replace("{%username_from%}",$name, $row['template']);
$row['template'] = str_replace("{%text%}",$message, $row['template']);
$row['template'] = str_replace("{%ip%}",$_SERVER['REMOTE_ADDR'], $row['template']);
$mail->from = $email;
$mail->send ($recipient['email'], $subject, $row['template']);
if ($mail->send_error) msgbox ($lang['all_info'], $mail->smtp_msg);
else msgbox($lang['feed_ok_1'], "$lang[feed_ok_2] ".$recipient['name']." $lang[feed_ok_3] <a href=\"{$config['http_home_url']}\">$lang[feed_ok_4]</a>");
}
} else {
$user = intval($_GET['user']);
if (!$user)
$db->query("SELECT name, user_group, user_id FROM " . USERPREFIX . "_users where user_group < '4' AND allow_mail = '1' ORDER BY user_group");
else
$db->query("SELECT name, user_group, user_id FROM " . USERPREFIX . "_users where user_id = '$user' AND allow_mail = '1' ORDER BY user_group");
if ($db->num_rows())
{
$empf = "<select name=\"recip\">";
$i = 1;
while ($row = $db->get_array()) {
$str = $row['name']." (".stripslashes($user_group[$row['user_group']]['group_name']).")";
if ($i == 1) {
$empf .= "<option selected=\"selected\" value=\"".$row["user_id"]."\">".$str."</option>\n";
} else {
$empf .= "<option value=\"".$row["user_id"]."\">".$str."</option>\n";
}
$i++;
}
$empf .="</select>";
Как мне задать отправку письма, лишь на один почтовый адрес или просто скрыть это поле? Сам я лих начинающий программист, вот и решил попросить помощи у более квалифицированных лиц.
У меня возникла небольшая проблемка при обработке письма и отправке нужному адресату. Дело в том что, для корректной обработке письма требуется указать поле «recipient» (получатель) их числа администраторы, пользователи и т.д. После удаления данного поля из шаблона формы(а оно не как не вписывается в общий дизайн сайта), возникает ошибка «E-Mail: <> not valid». Как я понимаю, не указан адрес получателя. Вот кусок кода отвечающий за данную операцию:
if (isset($_POST['send'])) {
$stop = "";
if ($is_logged)
{
$name = $member_id['name'];
$email = $member_id['email'];
} else {
$name = $db->safesql(strip_tags($_POST['name']));
$email = $db->safesql(strip_tags($_POST['email']));
$db->query("SELECT name from " . USERPREFIX . "_users where LOWER(name) = '".strtolower($name)."' OR LOWER(email) = '".strtolower($email)."'");
if ($db->num_rows() > 0) {
$stop = $lang['news_err_7'];
}
$name = strip_tags(stripslashes($_POST['name']));
$email = strip_tags(stripslashes($_POST['email']));
}
$subject = strip_tags(stripslashes($_POST['subject']));
$message = strip_tags(stripslashes($_POST['message']));
$recip = intval($_POST['recip']);
function check_email($value) {
return eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $value);
}
if (empty($name)) {
$stop .= $lang['feed_err_1'];
}
if (empty($email)) {
$stop .= $lang['feed_err_2'];
}
elseif (!check_email($email)) {
$stop .= $lang['feed_err_3'];
}
if (empty($subject)) {
$stop .= $lang['feed_err_4'];
}
if (empty($message)) {
$stop .= $lang['feed_err_5'];
}
if ( $_POST['sec_code'] != $_SESSION['sec_code_session'] OR !$_SESSION['sec_code_session']) {
$stop .= $lang['reg_err_19'];
}
$_SESSION['sec_code_session'] = false;
if ($stop) {
msgbox ($lang['all_err_1'], "$stop<br><br><a href=\"javascript:history.go(-1)\">$lang[all_prev]</a>");
} else {
include_once ENGINE_DIR.'/inc/mail.class.php';
$mail = new dle_mail ($config);
$recipient = $db->super_query("SELECT name, email, fullname FROM " . USERPREFIX . "_users WHERE user_id='".$recip."'");
if (empty($recipient['fullname'])) $recipient['fullname'] = $recipient['name'];
$row = $db->super_query("SELECT template FROM " . PREFIX . "_email where name='feed_mail' LIMIT 0,1");
$row['template'] = stripslashes($row['template']);
$row['template'] = str_replace("{%username_to%}",$recipient['fullname'], $row['template']);
$row['template'] = str_replace("{%username_from%}",$name, $row['template']);
$row['template'] = str_replace("{%text%}",$message, $row['template']);
$row['template'] = str_replace("{%ip%}",$_SERVER['REMOTE_ADDR'], $row['template']);
$mail->from = $email;
$mail->send ($recipient['email'], $subject, $row['template']);
if ($mail->send_error) msgbox ($lang['all_info'], $mail->smtp_msg);
else msgbox($lang['feed_ok_1'], "$lang[feed_ok_2] ".$recipient['name']." $lang[feed_ok_3] <a href=\"{$config['http_home_url']}\">$lang[feed_ok_4]</a>");
}
} else {
$user = intval($_GET['user']);
if (!$user)
$db->query("SELECT name, user_group, user_id FROM " . USERPREFIX . "_users where user_group < '4' AND allow_mail = '1' ORDER BY user_group");
else
$db->query("SELECT name, user_group, user_id FROM " . USERPREFIX . "_users where user_id = '$user' AND allow_mail = '1' ORDER BY user_group");
if ($db->num_rows())
{
$empf = "<select name=\"recip\">";
$i = 1;
while ($row = $db->get_array()) {
$str = $row['name']." (".stripslashes($user_group[$row['user_group']]['group_name']).")";
if ($i == 1) {
$empf .= "<option selected=\"selected\" value=\"".$row["user_id"]."\">".$str."</option>\n";
} else {
$empf .= "<option value=\"".$row["user_id"]."\">".$str."</option>\n";
}
$i++;
}
$empf .="</select>";
Как мне задать отправку письма, лишь на один почтовый адрес или просто скрыть это поле? Сам я лих начинающий программист, вот и решил попросить помощи у более квалифицированных лиц.