Вернер А. Р., центр Интернет АСФ КемГУ.
Содержание:
Введение
1. Авторизация
2. Чтение почтового ящика пользователя
3. Чтение почтового сообщения
4. Создаем новое письмо
5. Адресная книга
6. Выводы
Есть у такого решения много
достоинств:
— платформенная независимость клиента;
— нет жесткой привязки клиентского рабочего места;
— для доступа к ящику клиента не нужен POP3 сервер и клиент(иногда нужен);
— для работы с почтовым ящиком используются стандартные программы для веб-серфинга и т. д.;
и недостатков:
— проблемы с плохими каналами при удаленном доступе;
— проблема безопасности;
— локализация сообщений(характерно для не англоязычных систем) и др.
Самый простой у первой странички убрать анонимный доступ. В этом случае пользователь при обращении к странице должен будет ввести ИМЯ и ПАРОЛЬ в стандартном окне для авторизации.
Я использовал этот метод, но немного изменил его.
Пользователь вводит ИМЯ и ПАРОЛЬ в стандартной форме.

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://averner.ru
Теперь можно перейти к собственно к чтению почтового ящика пользователя.
<%
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:InetpubwMailAtt" 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%>
Результат выглядит примерно так:

Вот собственно и все. Теперь рассмотрим создание почтового сообщения.
<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
Адресную книгу можно создать сохраняя в текстовом файле данные об адресатах. Например вот так:

Можно сохранять индивидуальные настройки для каждого пользователя используя текстовый документ или Cookies.
Большой недостаток VB-Script — мало функций для работы с текстовыми строками.
(файл newmail.asp)
Есть конечно и большие недостатки.
SMTP сервер при плохих каналах может терять сообщения и др.
При большом количестве почтовых сообщений компонент CDO замедляет свою работу.
Ну и конечно необходимо позаботиться о безопасности.
Leave a Comment