<?php
$file = "maillist.txt"; // файл, содержащий адреса
error_reporting(0); // запрещаем вывод сообщений о возможных ошибках
function test_mail($char) // функция, проверяющая реальность адреса
{
$flag = false;
if(eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3}$)", $char)) $flag = true;
if ($flag) return true;
else return false;
}
$email = trim(strtolower($email)); // получаем введеный в
// форму адрес с
// символами в нижнем регистре
function copy_mail($char) // проверяем, есть ли такой адрес в базе
{
$file = "maillist.txt";
$list = file($file);
for ($i = 0; $i < sizeof ($list); $i++)
if ($char == trim($list[$i])) $flag = true;
if ($flag) return true;
else return false;
}
echo "<center>";
if (is_file($file)) // далие проверяем адрес вышеописаными функциями
{
$maillist = file($file);
if (!$email == '') {
if (test_mail($email)) {
if (!copy_mail($email))
{
$maillist[] = "\n$email";
print "E-mail: $email добавлен базу рассылки</center>";
}
else print "E-mail: $email уже есть в базе</center>";
}
else print "E-mail: $email не сушествует</center>";
}
else print "</center>";
}
else print "Не найден файл $file ! Пожалуйста <A HREF=\"mailto:$fromemail\">сообщите</a> мне о ошибке.</center>";
// выводи на екран форму с предложением подписки и отписки
echo "<br><center>Подписаться на рассылку<form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
echo "Введите mail:<input type=\"text\" name=\"email\" size=\"30\"><input type=\"submit\" name=\"submit\" value=\"подписаться\"></form></center>";
echo "<CENTER><br><br><form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
echo "Отписаться от рассылки<br>Введите mail:";
echo "<input type=\"text\" name=\"delmail\" size=\"15\"><input type=\"submit\" name=\"submit\" value=\"Отписаться\"></form></CENTER>";
// если пользователь решил отписаться - удаляем введеный адрес
$flag = false;
$fw = fopen($file, "w");
for ($i = 0; $i < sizeof ($maillist); $i++)
if (trim(strtolower($delmail)) == trim(strtolower($maillist[$i]))) {
if (!$delmail == '')
{
print "<center>$delmail удален из базы рассылки</center>";
$flag = true;
}
}
else fputs($fw, $maillist[$i]); // введеного адреса в базе нет
fclose($fw);
if (!$delmail == '')
if (!$flag) print "<center>$delmail не найден в базе рассылки</center>";
?>
<?php
\error_reporting(0); // запрещаем вывод сообщений о возможных ошибках
function test_mail($char) { // функция, проверяющая реальность адреса
return (boolean) \preg_match('/[\w\d\._-]+@[\w\d\._-]+\.[\w\d]{2,}/u', $char);
}
function find_mail($maillist, $email) { // функция, проверяющая наличие адреса в базе
$result = FALSE;
foreach ($maillist as $key => $part) {
if ($email == \trim($part)) {
$result = $key; // возвращаем порядковый номер адреса, если он найден
break;
}
}
return $result;
}
function add_mail($file, $email) {
\file_put_contents($file, "$email\n", FILE_APPEND);
}
function remove_mail($file, $maillist, $key) {
unset($maillist[$key]);
\file_put_contents($file, \implode('', $maillist));
}
$message = ''; // здесь будет сообщение о результате действия
if (!empty($_POST)) { // если форма отправлена
$fromemail = 'admin@site.ru'; // адрес администратора для отправки ошибок
$email = \trim(\strtolower(\htmlentities($_POST['email']))); // очищаем введённый адрес
$file = "maillist.txt"; // файл, содержащий адреса
if (\file_exists($file)) { // файл существует
$maillist = \file($file);
if (!empty($email) && test_mail($email)) { // email не пустой и правильный
$key = find_mail($maillist, $email); // номер адреса в базе или FALSE, если такого нет
if (isset($_POST['subscribe'])) { // запрошена подписка на рассылку
if ($key === FALSE) { // email нет в базе
add_mail($file, $email);
$message = "E-mail: $email добавлен в базу рассылки.";
} else { // email уже есть в базе
$message = "E-mail: $email уже есть в базе рассылки.";
}
} elseif (isset($_POST['unsubscribe'])) { // запрошена отписка от рассылки
if ($key === FALSE) { // email нет в базе
$message = "E-mail: $email не найден в базе рассылки.";
} else {
remove_mail($file, $maillist, $key);
$message = "E-mail: $email удален из базы рассылки.";
}
}
} else { // email пустой или неправильный
$message = "E-mail: $email не сушествует.";
}
} else { // файл не существует
$message = "Не найден файл $file ! Пожалуйста <A HREF=\"mailto:$fromemail\">сообщите</a> мне об ошибке.";
}
}
\header('Content-Type: text/html; charset=utf-8;');
?>
<p><?=$message?></p>
<form method="post">
<fieldset>
<legend>Подписаться на рассылку</legend>
<label for="email">Введите e-mail:</label>
<input type="text" id="email" name="email" size="30" required>
<input type="submit" name="subscribe" value="Подписаться">
</fieldset>
</form>
<form method="post">
<fieldset>
<legend>Отписаться от рассылки</legend>
<label for="email">Введите e-mail:</label>
<input type="text" id="email" name="email" size="30" required>
<input type="submit" name="unsubscribe" value="Отписаться">
</fieldset>
</form>