X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Всем кому нужна рассылка на своём сайте
Htmlmaster
Htmlmaster
Topic Starter сообщение 4.10.2009, 17:41; Ответить: Htmlmaster
Сообщение #1


Я ХОТЕЛ РАССКАЗАТЬ В ЭТОМ РАЗДЕЛЕ О СОЗДАНИИ РАССЫЛКИ НА САЙТЕ:

В интернете есть много бесплатных сервисов. В том числе и услуги по рассылке писем подписчикам. Некоторые из них очень хороши. Но раз уж они бесплатны, значит тут же в письмах появляется реклама. Да и немалые формы для подписки с логотипом представителя услуг многих не устраивают.

Так почему бы не написать простенький движок для своей рассылки и отсылать письма своими силами?

Давайте разберемся, что нам для этого потребуется. Для того чтоб посетители имели возможность подписаться на вашу рассылку необходима форма для ввода адреса электронной почты. После ввода адрес надо запомнить. Давайте адреса будем сохранять в файле maillist.txt по одному адресу в строчке. После того как адрес будет сохранен, давайте выведем соответствующее сообщение и отобразим форму для подписки еще одного адреса или удаления существующего. Вот собственно почти и все. Осталось добавить только возможность отправки писем. Для безопастности, давайте на возможность отправки писем поставим пароль - необходима форма для ввода пароля. Далие потребуются формы для заполнения адреса отправителя и темы, а также для самого текста. Ну и, наконец, сам скрипт, который будет отсылать письма. А теперь все по порядку. Форма для ввода адреса электронной почты будет состоять только из окна для ввода адреса и кнопки для подтверждения:
<form method="post" action="ras.php" enctype="multipart/form-data">
<input type="text" name="email" size="30">
<input type="submit" name="submit" value="подписаться">
</form>


Итак, в окне для ввода текста, с именем email и видимой длиной в 30 символов, будет вводиться адрес электронной почты. После нажатия на кнопку с надписью подписаться, адрес будет передан скрипту ras.php для занесения в базу рассылки. Далее давайте рассмотрим скрипт ras.php который будет сохранять адрес почты в файле, выводить сообщение о результате и формы для подписки и отписки. Скрипт можно исполнить совсем просто - сохранить адрес, вывести соответствующее сообщение. Но могут возникнуть проблемы: кто-то может случайно подписаться несколько раз, кто-то может допустить опечатку и ввести в поле адреса недопустимый символ. В таком случае база рассылки будет загрязняться, а неверные адреса станут приводить к ошибкам в работе скрипта. Вывод ясен - перед сохранением адреса следует проверить его на соответствие стандартам имен адресов электронных почтовых ящиков, а также на наличие в базе рассылки. Для того чтоб не рассматривать код по частям, я дам комментарии в самом коде:
[php]<?php
$file = "maillist.txt"; // файл, содержащий адреса

error_reporting(0); // запрещаем вывод сообщений о возможных ошибках

function test_mail($char) // функция, проверяющая реальность адреса
{
if (eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3}$)", $char)) return true;
return false;
}

// получаем введеный в форму адрес с символами в нижнем регистре
$email = trim(strtolower($email));

function copy_mail($char) // проверяем, есть ли такой адрес в базе
{
global $file;
$list = file($file);
for ($i = 0; $i < sizeof ($list); $i++)
if ($char == trim($list[$i])) return true;
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]
Вот наш код сохранения и удаления адресов готов. Теперь надо позаботится о средствах отправки почты. Не будем же мы через Outlook отсылать!?. Как уже говорилось, защитим возможность отправки паролем, который будем вводить на специальной форме:
<form method="POST" action="out.php">
<input type="password" name="pass" value="">
<input type="submit" value="войти">
</form>

Поле для ввода с именем pass и будет служить для ввода пароля. После нажатия на кнопку с надписью войти, пароль будет передан скрипту out.php:
[php]<?php
$subject = "Рассылка моего сайта"; // тема рассылки
$fromemail = "мое@мыло"; // ваш адрес (для ответов)
$file = "maillist.txt"; // список адресов подписчиков
$password = "secretpassword"; // ваш пароль для рассылки

if ($_POST['pass'] == $password) // если пароль ввели правильный
// то выводим форму с полями для ввода:
// адрес отправителя, текст письма, тело письма
// кнопку для отправления
// после нажатия на кнопку, передаем данные скрипту send.php
{
echo "<font size=\"-1\"><hr><form method=\"POST\" action=\"send.php\">";
echo "адрес отправителя<br><input type=\"text\" name=\"fromemail\" value=\"$fromemail\" size=\"25\"><br>";
echo "тема письма<br><input type=\"text\" name=\"subject\" value=\"$subject\" size=\"50\">";
echo "<br>текст письма:<br><textarea name=\"body\" rows=\"8\" cols=\"50\"></textarea>";
echo "<br><input type=\"submit\" value=\"Отправить сообщение\"></form></font>";
print "<i>В базе<b>". sizeof($maillist) ."</b> адресов</i><br><hr>";
for ($i = 0; $i < sizeof ($maillist); $i++) print $maillist[$i]. "<br>";
}
// если пароль неверный - просим ввести еще раз
else echo "<form method=\"POST\" action=\"ras.php\">
<input type=\"password\" name=\"pass\" value=\"\">
<input type=\"submit\" value=\"Управление\"></form>";
?>
[/php]
Осталось рассмотреть только один скрипт - тот самый, который будет отсылать почту:
[php]<?php
$odr = "\n\n\n Для отказа от подписки воспользуйтесь ссылкой\n";
$homepage = "http://адрес.сайта/ras.php";

error_reporting(0);
$subject = $HTTP_POST_VARS["subject"];
$body = $HTTP_POST_VARS["body"];
$subject = stripslashes($subject);
$body = stripslashes($body);

$file = "maillist.txt";
$maillist = file($file);

print "В базе". sizeof($maillist) ." адресов<br>";
for ($i = 0; $i < sizeof ($maillist); $i++)
{
#echo($maillist[$i]."<br>");
mail($maillist[$i], $subject,
$body ."$odr $homepag?delmail=$maillist[$i]",
"From: $fromemail");
}
echo "Готово!";
?>
[/php]
Тут все просто: получаем значения, введенные в предыдущюю форму и в цикле отправляем их по очереди на каждый из адресов.

НУ ВОТ И ВСЁ...СКРИПТ ПРОВЕРЕН НА ВСЕХ ПЛАТФОРМАХ, ВСЁ РАБОТАЕТ!:play:

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) CryptoCloud — прием USDT, BTC, ETH, LTC на любом сайте
36 CryptoCLoud 10591 Сегодня, 16:02
автор: CryptoCLoud
Горячая тема (нет новых ответов) Странный трафик на сайте длительное время
33 TABAK 8649 12.4.2024, 5:56
автор: Skyworker
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыТрафик в Телеграм (рассылка, инвайт, парсинг)
9 gelt 2837 8.4.2024, 15:28
автор: gelt
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыСостояние после ампутации - нужна помощь
благотворительный топик
49 vitvirtual 5860 1.4.2024, 5:23
автор: vitvirtual
Открытая тема (нет новых ответов) Нужна ли плоская структура категорий в ИМ?
1 noviktamw 1167 26.3.2024, 21:50
автор: c4p1t4l15t


 



RSS Текстовая версия Сейчас: 16.4.2024, 21:13
Дизайн