Вернер А. Р., центр Интернет АСФ КемГУ.
Содержание:
Введение
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> <span style="color: #008000;">' проверяем важность</span> <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> <span style="color: #008000;">' Идем к следующему сообщению</span> </TR> <% Next %>
Вот собственно и все. Результат выглядит примерно так:
3. Чтение почтового сообщения.
Текст письма. <span style="color: #008000;">' делаем активным например первое сообщение</span> <% Set ofMsg = objMessages.Item(1) %> <span style="color: #008000;">' если необходимо обрабатываем текст сообщения</span> <% Dim tre tre = Mid(ofMsg.HTMLText, InStr(ofMsg.HTMLText, "</HEAD>")+7) tre = Replace(tre, "</BODY>", "") tre = Replace(tre, "</HTML>", "") %> <span style="color: #008000;">' выводим</span> <%= tre%>
Если в почтовом сообщении есть вложения то:
<% If ofMsg.Attachments.Count > 0 Then %> <% Dim ic, fname, fs <span style="color: #008000;">' физический путь к вложениям пользователя</span> path = "C:InetpubwMailAtt" Set fs = CreateObject("Scripting.FileSystemObject") For ic = 1 To ofMsg.Attachments.Count fname = ofMsg.Attachments.Item(ic).Name If fname <> "" Then <span style="color: #008000;">' проверяем наличие папки для пользователя</span> If fs.FolderExists(path&muName)=False Then fs.CreateFolder(path&muName) <span style="color: #008000;">' пишем вложение(я) в папку</span> 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") <span style="color: #008000;">' собственно посылаем сообщение</span> 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