-->
   
-->

Главная

ТАРИФЫ ХОСТИНГА
АРЕНДА СЕРВЕРОВ
КЛИЕНТАМ
ТЕХ. ПОДДЕРЖКА
РЕССЕЛЕРАМ
ПРОГРАММЫ И УСЛУГИ
ИНФОРМАЦИЯ
О КОМПАНИИ

  

Лист рассылки на сайте

 

Опубликовано:
22.12.05

Источник: http://web-support.ru

Лист рассылки на сайте

 

В данной статье хочу описать процесс создания листа рассылке на корпоративном Internet-сайте.

При разработке данной задачи возникает необходимость в решении нескольких проблем:

- хранение адресов подписчиков в базе данных
- необходимо обеспечить рассылку сообщений большому количеству пользователей
- необходимо предоставить возможность пользователю получить забытый пароль на его почтовый адрес
- необходимо обеспечить администрирование листа подписки через web

Для хранения адресов подписчиков я применяю MS SQL сервер. Работу с базами данных я не рассматриваю, так как по этой теме написано достаточно много материала.
Для создания рассылки я применил Mailer-компонету с Dundas.com.

Для отправки сообщений участникам рассылки я создал вот такую форму для ввода:

Вот html код формы:

<form method="post">
<table bgcolor=Wheat align=center border="1"
cellspacing="0" cellpadding="0" bordercolor=DodgerBlue>
<tr>
<td>
заголовок сообщения
<INPUT type="text" size=30
name=subject></td>
</tr>
<tr>
<td>
тело сообщения<br>
<textarea rows=15 cols=40
name=body></textarea></td>
</tr>
<tr>
<td><INPUT type="submit" value="отправить"></td>
</tr>
</table>
</form>

При нажатии на кнопку submit текст сообщения отправляется этой же странице и обрабатывается следующим скриптом
<%
if inStr(Request.ServerVariables("Request_Method"),"POST")<>0 then

Set objMailer = Server.CreateObject("Dundas.Mailer")
objMailer.SMTPRelayServers.Add (smtp_server) ' адрес SMTP сервера
'objMailer.TOs.Add "vedenin@bashkirenergo.ru" ' адрес получателя
objMailer.TOs.Add "postmaster@your_server"

set conn=Server.CreateObject("ADODB.command")
conn.ActiveConnection="строка подкюичения"
conn.CommandText="select e_address from list_user"

conn.CommandType=1

set rs=conn.Execute(null,null,1)

if not(rs.EOF=true and rs.BOF=true) then
rs.MoveFirst

while not rs.EOF

objMailer.BCCs.Add rs.Fields("e_address").value
rs.MoveNext

wend
else
Err.Raise
end if

set rs=nothing
set conn=nothing

objMailer.CustomHeaders.Add "Content-Type:",
"text/plain;charset=windows-1251" ' формат и кодировка сообщения
objMailer.CustomHeaders.Add "Content-Transfer-Encoding:",
"8bit" ' битовая кодировка сообщения
objMailer.Organization = " органицация "
objMailer.FromAddress = "postmaster@your_server" ' адрес отправителя

objMailer.Subject = Request.Form("subject")
objMailer.Body = Request.Form("body")
objMailer.SendMail
save=true
end if
%>

Этим скрипом адреса подписчиков записываются в коллекцию BCCs, которая содержит адреса получателей скрытой копии сообщений. В коллецию Tos лучше записать какой-нибудь адрес, чтобы у подписчика при получении письма раздел "Кому" не был пустым.
Для отправки пользователю забытого пароля на его почтовый адрес я в специально написанной для этого форме запрашиваю адрес, и затем, если он верен, высылаю пароль на полученный адрес. Отсылку осуществляю следующим скриптом -

if inStr(Request.ServerVariables("Request_Method"),"POST")<>0 then

set conn=Server.CreateObject("ADODB.command")
conn.ActiveConnection="строка подключения "
conn.CommandText="select e_address, pass " _
& "from list_user where e_address='" _
& Request.Form("email") & "'"
conn.CommandType=1
set rs=conn.Execute(null,null,1)

if rs.EOF=true and rs.BOF=true then error=true


if error=false then

Set objEmail = Server.CreateObject("Dundas.Mailer")
objEmail.QuickSend "postmaster@your_address ", _
rs.Fields("e_address").value,"ваш пароль", _
" пароль пользователя листа рассылки " _
& chr(13) & chr(10) &_
" email :" & rs.Fields("e_address").value _
& chr(13) & chr(10) & _
" пароль:" & rs.Fields("pass").value
set objEmail=nothing
set rs=nothing

end if
end if

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

Просмотр записей базы данных осложняется тем, что необходимо просматривать записи из базой страницами, содержащими определенное количество записей из базы данных (например, по 10). Причем необходимо осуществлять выборку между этими страницами. Для указания текущей страницы в выборке из базы данных я использую параметр curpage. Инициализирую я его следующим образом:

if len(Request.QueryString("curpage"))=0 then
curpage = 1
else
curpage= CInt (Request.QueryString("curpage"))
end if

где параметр curpage я передаю в url странице при выборе текущей страницы объекта RecordSet.
Возможность выборки между страницами я обеспечиваю следующим способом:

<%
set conn= Server.CreateObject("ADODB.connection")

conn.Provider="sqloledb"
conn.Open "строка подключения"

set rs= Server.CreateObject("ADODB.Recordset")
rs.CursorType=1
rs.CursorLocation=3
rs.Open "select * from list_user",conn,3,3,1

if not(rs.EOF=true and rs.BOF=true) then
rs.MoveFirst
rs.AbsolutePage=curpage

for i=1 to rs.PageCount
Response.Write "<a href='admin.asp?curpage=" _
& i &"'>" & i & "</a> "
next

%>
<table border=1 border="1" cellspacing="1"
cellpadding="3" bordercolor="DodgerBlue" >
<tr bgcolor="DodgerBlue">
<td></td>
<td>email</td>
<td>пароль</td>
<td>ФИО</td>
<td>город</td>
<td>место работы</td>
<td>должность</td>
<td>проверить</td>

<%
for i=1 to rs.PageSize

if rs.EOF=true then exit for
%>
<tr>
<td><input type="checkbox" name=checkDel
value="<%=rs.Fields("id").value%>"></td>
<td><%=rs.Fields("e_address").value%></td>
<td><%=rs.Fields("pass").value%></td>
<td><%=rs.Fields("fio").value%></td>
<td><%=rs.Fields("town").value%></td>
<td><%=rs.Fields("place_work").value%></td>
<td><%=rs.Fields("dolg").value%></td>
<td><a href="javascript:openW('check.asp?e_add=
<%=rs.Fields("e_address").value%>','_blank',450,310)">>></a>

</td>
</tr>
<%
rs.MoveNext
next
%>
</table>
<input type="submit" value="удалить" name="delBut">
</form>
<%
rs.Close
set rs=nothing
conn.Close
set conn=nothing
end if
%>

Для удаления подписчиков я использую тэг input в котором передаю идентификатор записи пользователя, выбранного для удаления. Удаление выполняю в следующем скрипте:
del_str=""

if Request.Form("checkDel").Count<>0 then
for i=1 to Request.Form("checkDel").Count
if i=1 then
del_str=del_str & " id="& int(Request.Form("checkDel")(i))
else
del_str=del_str & " or id="& int(Request.Form("checkDel")(i))
end if
next

set conn=Server.CreateObject("ADODB.command")
conn.ActiveConnection="строка подключения "
conn.CommandText="delete from list_user where " & del_str

conn.CommandType=1
set rs=conn.Execute(null,null,1)

set rs=nothing
set conn=nothing
curpage = 1

end if

Для проверки корректности адреса пользователя я использую метод ValidateAddress Mailer-компонеты Dundas.com.
<%@ Language=VBScript %>

<!-- #include file="include/general.asp"-->
<%

Dim objEmail
dim res

%>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/tags.css">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1251">
</head>
<body>

проверка адреса <%=Request.QueryString("e_add")%> <br>

<%
Set objEmail = Server.CreateObject("Dundas.Mailer")
res=objEmail.ValidateAddress (Request.QueryString("e_add"))

select case res
case 0: Response.Write "адрес существует"
case 1: Response.Write "адрес пуст"
case 2: Response.Write "адрес существует"
case 3: Response.Write "проверка SMTP сервера закончилась неудачей"
case 4: Response.Write "указанный пользователь не найден"
case 5: Response.Write "MX запись не найдена"
case 6: Response.Write "операция проверки адреса закончилась неудачей"
end select

%>

</body>
</html>

После проверки адреса можно решить, удалять пользователя или нет. Экран работы страницы:


Таким образом, рассылку на ASP организовать достаточно просто.

Автор: Вадим Веденин


Версия для печати

Назад

Проверить домен

ru  com net

Новости компании

02.04.10
Технические работы на сервере!

В пятницу 3-го апреля 2009 г. возможен кратковременный перерыв в работе сервера с 17 до 18 часов в связи с проводимыми техническими работами. ...


08.09.08
ВНИМАНИЕ!!! Пользователям сервера PRO-HOSTING!

В связи с технической необходимостью, мы вынуждены перевезти оборудование из датацентра СТЕК в новый, более современный и удобный датацентр на Остаповском проезде. Переезд оборудования будет осуществл...


15.04.08
Новая рекламная акция нашей компании.

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


01.02.08
Специальная акция "Автоматизируй свой сайт"

Скидка 30% на покупку системы управления сайтом SSPRO. Установка системы управления производится бесплатно. Подробнее о системе управления сайтом смотрите на странице: Система управления сайтом ...


20.12.07
С новым 2008-м годом

Поздравляем всех клиентов и посетителей сайта с новым 2008 годом, желаем успехов в новом году, здоровья и счастья. Коллектив ООО " ССПРО ХОСТИНГ"  ...


06.02.07
Профилактические работы на сервере

Уведомляем Вас о том, что 06/02/2007 на сервере ONLINEHOST.RU администраторами датацентра "STACK" запланировано отключение электропитания, связанное с профилактическими работами на монтажной стойке. Н...



Ваш проект:


Коммерческий
Коммерческий
Коммерческий


2002-2009 (с) ООО "ССПРО Хостинг"
+7 495 77-88-33-9  Карта сайта,
Разработка сайта Cве-Арт | Cms Sspro