GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Программирование на ASP. Введение или первый урок.(15992)
Отображение картинки из БД напрямую - создание своего HttpHandler(13357)
Использование шаблонов дизайна в ASP .NET(12495)
Кеширование ASP.NET страниц(11704)
Пакетная компиляция в ASP.NET(11454)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » ASP » Web почта на ASP

Web почта на ASP


Вернер А. Р.
verner@asf.ru
http://verner.asf.ru/

Введение.

Для всех не секрет, что использование электронной почты на базе веб становиться в последнее время популярным.
Есть у такого решения много достоинств:

  • платформенная независимость клиента;
  • нет жесткой привязки клиентского рабочего места;
  • для доступа к ящику клиента не нужен POP3 сервер и клиент(иногда нужен);
  • для работы с почтовым ящиком используются стандартные программы для веб-серфинга и т. д.;
и недостатков:
  • проблемы с плохими каналами при удаленном доступе;
  • проблема безопасности;
  • локализация сообщений(характерно для не англоязычных систем) и др.

У нас такая проблема возникла в связи с использованием операционной системы Windows NT и прокси сервера для доступа к Интернет. Подобная картина наблюдается, по моему, во многих классах общего доступа.

Обычно класс входит в домен Windows NT и все пользователи имеют свою учетную запись. Поэтому было решено построить веб-почту на базе Windows 4.0 Option Pack для Windows NT Server(OP). В комплекте OP имеется SMTP сервер, пользователи Windows NT имеют автоматически учетную запись на SMTP сервере. И еще один компонент, который нам необходим - MicrosoftR CDO for NTS Library(Collaboration Data Objects for Windows NTR Server).

Этот компонент при работе с SMTP сервером обращается к общей папке с сообщениями(обычно :Mailroot/Drop) и работает с ними в зависимости от имени пользователя.

Перейдем непосредственно к тому, как работает веб-почта.

1. Авторизация.
Для авторизации пользователя можно использовать несколько методов. Самый простой у первой странички убрать анонимный доступ. В этом случае пользователь при обращении к странице должен будет ввести ИМЯ и ПАРОЛЬ в стандартном окне для авторизации. Я использовал этот метод, но немного изменил его. Пользователь вводит ИМЯ и ПАРОЛЬ в стандартной форме.


HTML код для индексной(начальной) странички следующий:

...
<form name="Login" action="r.asp" method="POST">
<tr>
  <td>Имя</td>
  <td><input type="Text" name="user" title="Введите Имя."></td>
</tr>
<tr>
  <td>Пароль</td>
  <td><input type="Password" name="passw" title="Введите Пароль."></td
</tr>
<tr>
<td></td>
<td align="RIGHT"><input type="Submit" name="ent" value="Вход"></td>
</td>
</tr>
</form>
...
Следующая страничка(r.asp):
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT='0; URL=<%="http://" & Request.Form("user") & _
   ":" & Request.Form("passw") & "@ mail.youhost.ru/index2.asp" %>'> 
	<title>Login</title>
</head>
<body bgcolor="#C0C0C0">
Login in progress...
</body>
</html>

Таким образом, формируется простой запрос типа:

http://USERNAME:PASSWORD@mail.youhost.ru/index2.asp
Анонимный доступ к страничке index2.asp должен быть отключен. Ну а теперь все просто, если ИМЯ и ПАРОЛЬ действительны, то получаем серверную переменную AUTH_USER и используем ее в дальнейшем для проверки успешной авторизации.

Страничка index2.asp:
<%Option Explicit %>
<%
If Request.ServerVariables("LOGON_USER") = "" Then
	Response.Write("403 Access Forbidden")
	Response.End 
Else
	Response.Redirect "in.asp"
	Response.End
End If
%>
Как видно из кода, при успешной авторизации пользователь попадает на страничку in.asp - главную страничку веб-почты.

Этот код необходимо вставить на все странички веб-почты!

<%
	  If Request.ServerVariables("LOGON_USER") = "" Then
           Response.Redirect "index.html"
           Response.End
	  End If
%>
Код для авторизации выполненный отдельно доступен по адресу http://verner.asf.ru/rus/software.html
Теперь можно перейти к собственно к чтению почтового ящика пользователя.

2. Чтение почтового ящика пользователя.
Для просмотра почтового ящика открываем сессию методом LogonSMTP и инициализируем объект сообщений objMessages:

<% 
Dim mLog
Dim objSession
Dim objMessages
Dim muName
domain = "youhost.ru"

muName = Request.ServerVariables("LOGON_USER")
Set objSession = CreateObject("CDONTS.Session")
mLog = objSession.LogonSMTP(muName, muName & "@" & domain)
Set objMessages = objSession.Inbox.Messages
%>
Если сообщений нет:

objMessages.Count <= 0

то пишем клиенту:

Response.Write "Вам нет сообщений"


Если сообщения есть то организуем цикл:

Dim mCol(objMessages.Count)

	For i = 1 To objMessages.Count
	Set ofMsg = mCol(i)
	Set objAddrEntry = ofMsg.Sender

Пишем клиенту строки в таблице:

<tr>

' проверяем важность

<td>
<% Select Case ofMsg.Importance
	Case 0 %>
<img src="images/impor_l.gif" border=0 alt="Не важно.">
<% Case 1 %>
<img src="images/impor_0.gif" border=0 alt="Простое письмо.">
<% Case 2 %>
<img src="images/impor_h.gif" border=0 alt="Очень важно!!!">
<% End Select %>
</td>
Если в сообщении есть вложения то:

<td>
<% If ofMsg.Attachments.Count > 0 Then  %>
<img src="images/att.gif" border=0 alt="С письмом(возможно пришли файлы)!">
<% Else %>
<img src="images/att0.gif">
<% End If %></center>
</td>
Пишем время сообщения:

<td>
<%= ofMsg.TimeReceived %>
</td>
Тема сообщения:

<TD>
<% If ofMsg.Subject = "" Then %>
Без темы
<% Else %>
<%= ofMsg.Subject %>
<% End If %>
</TD>
И на последок размер сообщения:

<TD>
<%= ofMsg.Size %>
</TD>

' Идем к следующему сообщению

</TR>
<% Next %>
Вот собственно и все. Результат выглядит примерно так:


3. Чтение почтового сообщения.

Текст письма.

' делаем активным например первое сообщение
<% Set ofMsg = objMessages.Item(1) %>

' если необходимо обрабатываем текст сообщения
<% 
Dim tre
tre = Mid(ofMsg.HTMLText, InStr(ofMsg.HTMLText, "</HEAD>")+7)
tre = Replace(tre, "</BODY>", "")
tre = Replace(tre, "</HTML>", "")
%>
' выводим
<%= tre%>
Если в почтовом сообщении есть вложения то:
<% If ofMsg.Attachments.Count > 0 Then %>
<%
Dim ic, fname, fs
' физический путь к вложениям пользователя
path = "C:\Inetpub\wMail\Att\"
Set fs = CreateObject("Scripting.FileSystemObject")
For ic = 1 To ofMsg.Attachments.Count
fname = ofMsg.Attachments.Item(ic).Name
If fname <> "" Then

' проверяем наличие папки для пользователя
		If fs.FolderExists(path&muName)=False Then fs.CreateFolder(path&muName)

' пишем вложение(я) в папку
		ofMsg.Attachments.Item(ic).WriteToFile path&muName&"/"&fname
%>
<%= ic %>: <a href='att/<%= muName&"/"&fname%>'><%= fname%></a><br>
<% 
End If
Next 
%>
<%End If%>
Результат выглядит примерно так:



Вот собственно и все. Теперь рассмотрим создание почтового сообщения.

4. Создаем новое письмо(файл newmail.asp)
Форма для почтового сообщения(упращенная):

<form action="newmail.asp?mTo=<%= mTo%>&mSubject=<%= mSubject%>&
mText=<%= Request("mText") %>" method="POST">
<input type="Hidden" name="mSend" value="1">
<input type="Hidden" name="FileName2" value="<%= mAttachment&fExt %>">
<input type="Text" name="mTo" title="" value=<%= Request("mTo")%>><br>
<input type="Text" name="mSubject" title="" value=<%= Request("mSubject")%>>
<textarea name="mText" cols="50" rows="14" title=""><%= Request("mText") %></textarea>
<select name="mPriority">
<option value="0">Низкий</option>
<option value="1" selected>Нормальный</option>
<option value="2">Высокий</option>
</select>

<input type="Submit" name="Send" value="Отправить">
</form>

Выглядит это так:


Определяем необходимые переменные с формы и не только:

<% 
Dim objNewMail
Dim i, muName, recipient, fl, Post, file, fs, afl, er
Dim mTo, mSubject, mText, mAttachment, mPriority, fExt
Post = ""
muName = Request.ServerVariables("LOGON_USER")
mTo = Request.Form("mTo")
mSubject = Request.Form("mSubject")
mText = Request.Form("mText")
mAttachment = Request.Form("FileName")
fExt = Request.Form("FileExtention")
mPriority = Request.Form("mPriority")
file = Request.Form("FileName2")
%>
Если все переменные не пустые то формируем почтовое сообщение:
If Request("mSend") = 1 And mTo <> "" Then
	Dim myMail 
	Set myMail = CreateObject("CDONTS.NewMail")
	myMail.From = muName & "@" & domain
	myMail.To = mTo
	myMail.Subject = mSubject
	myMail.Body = mText
	myMail.Importance = Request.Form("mPriority")
' собственно посылаем сообщение
	er=myMail.Send
	Set myMail = Nothing
End If
Если необходимо создать почтовое сообщение с вложением, то для этого нужен компонент для загрузки вложения на сервер(например Posting Acceptor от Microsoft или любой другой работающий по RFC 1867). После загрузки вложения его очень просто присоединить к письму:

	myMail.AttachFile path&muName&"\"&file

5. Адресная книга и др.
Адресную книгу можно создать сохраняя в текстовом файле данные об адресатах. Например вот так:


Можно сохранять индивидуальные настройки для каждого пользователя используя текстовый документ или Cookies. Большой недостаток VB-Script - мало функций для работы с текстовыми строками.

6. Выводы.
Как видно из вышесказанного построение веб почты на ASP под Windows NT вполне возможно и довольно просто. Есть конечно и большие недостатки. SMTP сервер при плохих каналах может терять сообщения и др. При большом количестве почтовых сообщений компонент CDO замедляет свою работу. Ну и конечно необходимо позаботиться о безопасности.

Центр Интернет АСФ КемГУ

 
22.03.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.