» ASP
для новичков
» Главная
страница
»
ASP
для новичков
Использование
электронной почты
Весьма часто разработчику
Web-приложений приходится использовать в своих проектах функцию автоматической
отправки электронной почты. Чаще всего электронные письма, которые создаются и
отправляются автоматически, без участия администраторов, содержат какие-либо
уведомления. Например, о совершении покупки в онлайновом магазине, или о
подписке на рассылку новостей сайта. Так или иначе, практически ни один из
серьезных проектов не обходится без использования электронной почты, и,
следовательно, нам необходимо рассмотреть механизм ее использования в работе
Web-приложений.
Для этого применяется класс
SmtpMaii, располагающийся в пространстве имен System.Web.Mail. Основное его
свойство SmtpServer типа string содержит адрес почтового сервера, на который
будет отсылаться сообщение. А метод send отсылает письмо на этот сервер. В
качестве параметра этому методу передается значение типа MaiiMessage. Именно
этот тип полностью определяет отсылаемое сообщение. Рассмотрим этот тип
подробнее.
- Attachments. Свойство задает
список файлов, присоединяемых к письму Свойство имеет значение типа iList. Этот
тип является коллекцией наименований файлов.
- всс. Свойство типа string. Его значением является список адресов электронной
почты, по которым будет отправлено электронное письмо. Следует, однако,
заметить, что в этом свойстве задаются адреса, входящие в список ВСС (Blind
Carbon Сору), т. е. получатели, чьи адреса указаны в полях То (Кому) и
Сору (Копия) не увидят в заголовке письма адреса из списка ВСС. Адреса,
входящие в список ВСС, разделяются запятой.
- Body. Свойство типа string. В нем находится само тело электронного письма.
- BodyEncoding. Свойство типа Encoding. Задает кодировку символов сообщения.
Тип Encoding является перечислимым типом.
- BodyFormat. Свойство типа MailFormat, в котором устанавливается формат тела
электронного письма. Свойство может принимать значения Text и Html.
- Сс. Свойство типа string. В этом свойстве записываются адреса, разделенные
запятыми, по которым будет отправлена копия электронного сообщения.
- From. Свойство типа string, в котором указывается электронный адрес
отправителя письма.
- Priority. Свойство перечислимого типа MaiiPriority, в котором указывается
приоритет отсылаемого письма. Свойство может принимать значения High, Low И
Normal.
- Subject. Свойство типа string. В нем записывается тема отправляемого письма.
- то. Свойство типа string. В нем указывается адрес электронной
почты, по которому будет отправлено создаваемое сообщение.
Теперь, когда мы знаем структуру
объектов, применяемых для отправки электронных писем, рассмотрим пример
использования этой технологии. Создадим Web-приложение, которое будет
предназначено для отправки ^пользователем сообщений по электронной почте.
На стартовой странице,
которую мы сохраним под именем default.aspx, следует разместить три однострочных
поля текстового ввода. В первое из них .пользователь будет вводить адрес
получателя письма, во второе — обратный адрес, а третье поле предназначено для
указания темы отправляемого сообщения. Также нам потребуется одно многострочное
поле, в котором пользователь будет писать текст сообщения, и кнопка,
подтверждающая отправку сообщения. К первым двум полям ввода, которые будут
предназначены для ; ввода адресов электронной почты, следует присоединить
компоненты под 'названием RegularExpressionValidator. Они будут следить за
правильностью ввода адресов. В листинге 3.51 приведен HTML-код Web-страницы в
режиме ее разработки.
Листинг 3.51
<%@ Page Language="vb"
AutoEventWireup="false" Codebehind="default.aspx.vb"
Inherits="mailer.WebForml"%>
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<titlex/title>
<meta name="GENERATOR"
content="Microsoft Visual Studio.NET 7.0">
<meta name="CODE_LANGUAGE"
content="Visual Basic 7.0">
<meta
name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
con-tent="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body
MS_POSITIONING="GridLayout">
<form id="Forml" method="post"
runat="server">
<asp:Label id="Labell"
style="Z-INDEX: 101; LEFT: 37px;
POSITION: absolute;
TOP: 24px" runat="server"
Width="257px" Height="19px"> Виртуальный no4TaMT</asp:Label>
<asp;RegularExpressionValidator
id="RegularExpressionValidator3" style="Z-INDEX: 110; LEFT: 34px;
POSITION: absolute;
TOP: 149px" runat="server"
ЕггогМеззаде="Введен неверный адрес электронной почты"
ControlToValidate="TextBox4"
ValidationExpression="\w+([-+.]\w+)*@\ w+([-.]\w+)*\.\w+([-. ]
\w+)*"X/asp:RegularExpressionValidator>
<asp:TextBox id="TextBox4"
style="Z-INDEX: 109; LEFT: 195px;
POSITION: absolute;
TOP: 115px" runat="server"
Width="193px" Height="24px"x/asp:TextBox>
<asp:Label id="Labe!4"
style="Z-INDEX: 108; LEFT: 37px;
POSITION: absolute;
TOP: 122px" runat="server"
Width="151px" Height= "17рх">Адрес отправителЖ/asp: Label>
<asp:RegularExpressionValidator
id="RegularExpressionValidator2" style="Z-INDEX: 104; LEFT: ЗЗрх;
POSITION: absolute;
TOP: 91px" runat="server"
ЕггогМеззаде="Введен неверный адрес электронной почты"
4>ControlToValidate="TextBoxl" ValidationExpression="\w+([-+.]\w+)*@\ w+{
[-%>. 1 \w+) *\. \w+{ [-. ] \w-t-)
*"x/asp:RegularExpressionValidator>
<asp:Label id="Labe!2"
style="Z-INDEX: 102; LEFT: 37px;
POSITION: absolute;
TOP: 59px" runat="server"
Width="127px" Height= "19рх">Дцрес получателя</азр^аЬе!>
<asp:TextBox id="TextBoxl"
style="Z-INDEX: 103; LEFT: 195px;
POSITION: absolute;
TOP: 52px" runat="server"
Width="193px" Height="24px"x/asp:TextBox>
<asp:RegularExpressionValidator
id="RegularExpressionValidatorl" style="Z-INDEX: 105; LEFT: ЗЗрх;
POSITION: absolute;
TOP: 91px" runat="server"
ЕггогМеззаде="Введен неверный адрес электронной почты"
ControlToValidate="TextBoxl" ValidationExpression="\w+([-+.]\w+)*@\
w+([-.]\w+)*\.\w+([-.]\w+)*"x/asp:RegularExpressionValidator>
<asp:Label id="Labe!3"
style="Z-INDEX: 106; LEFT: 37px;
POSITION: absolute;
TOP: 186px" runat="server">TeMa
письма</азр:Label>
<asp:TextBox id="TextBox2"
style="Z-INDEX: 107; LEFT: 195px;
POSITION: absolute;
TOP: 177px" runat="server"
Width="192px" Height="26px"x/asp:TextBox>
<asp:Label id="Labe!5"
style="Z-INDEX: 111; LEFT: 37px;
POSITION: absolute;
TOP: 220px" runat="server">TeKCT
nMCbMa</asp:Label>
<asp:TextBox id="TextBox3"
style="Z-INDEX: 112; LEFT: 37px;
POSITION: absolute; TOP: 246px"
runat="server" Width="353px" Height="99px" Rows="5"x/asp:TextBox>
<asp:Button id="Buttonl"
style="Z-INDEX: 113; LEFT: 41px;
POSITION: absolute;
TOP: 358px" runat="server"
Width="166px" Height="24px" Text= "Отправить nMCbMO"x/asp:Button>
</form>
</body>
</HTML>
После того, как пользователь
заполнит все поля и нажмет на подтверждающую кнопку, необходимо сформировать и
отправить письмо. Этим будет заниматься класс, связанный с проектируемой
страницей. Код этого класса приведен в листинге 3.52.
Листинг 3.51
Public Class WebForml
Inherits System.Web.UI.Page
Protected WithEvents Labell As
System.Web.Ul.WebControls.Label Protected WithEvents Label2
As System.Web.Ul.WebControls.Label
Protected WithEvents TextBoxl
As
System.Web.UI.WebControls.TextBox
Protected WithEvents
RegularExpressionValidatorl
As
System.Web.UI.Webcontrols.RegularExpressionvalidator
Protected WithEvents Label3
As System.Web.Ul.WebControls.Label
Protected WithEvents TextBox2
As
System.Web.UI.WebControls.TextBox
Protected WithEvents
RegularExpressionValidator2
As
System.Web.UI.Webcontrols.RegularExpressionvalidator
Protected WithEvents Label4 As
System.Web.Ul.WebControls.Label Protected WithEvents TextBox4
As
System.Web.UI.WebControls.TextBox
Protected WithEvents
RegularExpressionValidatorS
As
System.Web.UI.WebControls.RegularExpressionvalidator
Protected WithEvents Labels
As System.Web.UI.WebControls.Label
Protected WithEvents TextBoxS
As
System.Web.Ul.WebControls.TextBox Protected WithEvents Buttonl
As System.Web.Ul.WebControls.Button
iRegion " Web Form Designer
Generated Code "
'This call is required by the Web
Form Designer.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender
As System.Object, ByVal e
As System.EventArgs) Handles
MyBase.Init
'CODEGEN: This method call is
required by the Web Form Designer
'Do not modify it using the code
editor. InitializeComponent() End Sub
#End Region
Private Sub Page_Load(ByVal sender
As System.Object, ByVal
e As System.EventArgs) Handles
MyBase.Load
'Put user code to initialize the
page here
End' Sub
Private Sub Buttonl_Click(ByVal
sender As System.Object, ByVal
e As System.EventArgs) Handles
Buttonl.Click
Dim email As New
Web.Mail.MailMessage() Dim smtp
As New Web.Mail.SmtpMail() email.To
= TextBoxl.Text email.From = TextBox4.
Text email.Subject = TextBox2.Text
email.Body = TextBox3.Text
smtp.SmtpServer = "my.mail.ru"
'Задали имя используемого SMTP-сервера smtp.Send(email)
Response.Redirect("Webform.aspx")
End Sub
End Class
Рассмотрим несколько внимательнее
обработчик события Buttoni_ciick. Для отправки электронного письма нам
потребуются две переменные. Одна из них будет иметь тип MailMessage, и в ней
будет располагаться полное описание отсылаемого сообщения, а вторая переменная
будет иметь тип SmtpMail. Вторая переменная предназначена уже для отсылки
созданного сообщения.
При объявлении этих переменных мы
одновременно и создаем экземпляры соответствующих объектов при помощи оператора
New. Следует также отметить, что искомые классы находятся в пространстве имен
System.Web.Mail. Так как прямые вызовы конструкторов этих классов встречаются в
нашей процедуре всего два раза, автор счел возможным не импортировать все
пространство имен, а вместо этого использовать полные наименования
конструкторов.
После того, как переменные созданы,
можно приступать к их заполнению. Данные, введенные пользователем в поля ввода,
мы присваиваем соответствующим свойствам переменной email. После того, как
электронное сообщение сформировано, его необходимо отправить. Для этого
необходимо воспользоваться переменной smtp. Сначала задать доменное имя или
IP-адрес используемого SMTP-сервера при помощи свойства SmtpServer, а затем,
воспользовавшись методом send, отправить письмо.
После того, как письмо будет
отправлено, пользователь будет переадресован на другую Web-страницу, на которой
отображается всего лишь сообщение о том, что электронное письмо отправлено
успешно. В силу того, что эта страница максимально проста, мы не будем приводить
ее листинга здесь.
Листинг 3.53
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML> <HEAD>
<title></title>
<meta name="GENERATOR"
content="Microsoft Visual Studio.NET 7.0">
<meta name="CODE_LANGUAGE"
content="Visual Basic 7.0">
<meta
name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body
MS_POSITIONING="GridLayout">
<form< name="Forml"
method="post" action="default.aspx" language= "javascript"
4>onsubmit="ValidatorOnSubmit();" id="Forml">
<input type="hidden"
name="__VIEWSTATE" value="dDwtNzQ!ODMxMDQ7Oz4=" />
<script language="javascript"
src="/aspnet_client/system_Web/ l_0_2914_16/WebUIValidation.js"X/script>
<span id="Labell"
style="height:19px;width:257px;Z-INDEX: 101; LEFT: 37px;
POSITION: absolute; TOP:
24рх">Виртуальный почтамт</зрап>
<span
id="RegularExpressionValidator3" controltovalidate="TextBox4"
еггогтеззаде="Введен неверный адрес электронной почты" evaluationfunction=
"RegularExpressionValidatorEvaluatelsValid" validationexpression="\
w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" style="color:Red;Z-INDEX:110;
LEFT:34px;
POSITION:absolute;
TOP:149px;visibility:hidden;">Введен
неверный адрес электронной почты</зрап>
<input name="TextBox4"
type="text" id="TextBox4"
style="height:24px;width:193px;Z-INDEX: 109;
LEFT: 195px;
POSITION: absolute;
TOP: 115px" />
<span id="Labe!4"
style="height:17px;width:151px;Z-INDEX: 108; LEFT: 37px;
POSITION: absolute; TOP:
122рх">Ддрес отлравителя</зрап>
<span
id="RegularExpressionValidator2" controltovalidate="TextBoxl"
еггоппеззаде="Введен неверный адрес электронной почты" evaluationfunction=
"RegularExpressionValidatorEvaluatelsValid" validationexpression="\
w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" style="color:Red;Z-INDEX:104;
EFT:33px;
POSITION:absolute;TOP:91px;visibility:hidden;
">Введен неверный адрес электронной почты</зрап>
<span id="Labe!2"
style="height:19px;width:127px;Z-INDEX: 102; LEFT: 37px;
POSITION: absolute;
TOP: 59рх">Адрес
получателя</зрап>
<input name="TextBoxl"
type="text" id="TextBoxl"
style="height:24px;width:193px;Z-INDEX: 103;
LEFT: 195px;
POSITION: absolute;
TOP: 52px" />
<span
id="RegularExpressionValidatorl" controltovalidate="TextBoxl"
еггогтеззаде="Введен неверный адрес электронной почты" evaluationfunction=
"RegularExpressionValidatorEvaluatelsValid" validationexpression="\
w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" style="color:Red;Z-INDEX:105;
LEFT:33px;
POSITION:absolute;
TOP:91px;visibility:hidden;">Введен
неверный адрес электронной почты</зрап>
<span id="Labe!3"
style="Z-INDEX: 106; LEFT: 37px;
POSITION: absolute;
TOP: 186рх">Тема
письма</зрап>
<input name="TextBox2"
type="text" id="TextBox2" style= "height:26px;width:192px;Z-INDEX: 107; LEFT:
195px;
POSITION: absolute;
TOP: 177px" />
<span id="Labe!5"
style="Z-INDEX: 111; LEFT: 37px;
POSITION: absolute; TOP:
220рх">Текст письма</зрап>
<input name="TextBox3"
type="text" id="TextBox3" style= "height:99px;width:353px;Z-INDEX: 112; LEFT:
37px;
POSITION: absolute;
TOP: 246px" />
<input type="submit"
name="Buttonl" value="OTnpaBMTb письмо" onclick= "if (typeof(Page
ClientValidate) == 'function') Page_ClientValidate(); " language="javascript"
id="Buttonl" style="height:24px;width:166px;
Z-INDEX: 113; LEFT: 41px; POSITION:
absolute;
TOP: 358px" />
<script
language="javascript">
var Page_Validators = new
Array (document . all [
"RegularExpressionValidatorS " ] document . all [ "RegularExpressionValidator2"]
,
document . all [
"RegularExpressionValidatorl" ] ) ;
</script>
<script language="
javascript"> <! — \ var Page_ValidationActive = false/-
if (typeof (clientlnformation) !=
"undefined" && clientlnf ormation. appName .
indexOf ("Explorer") != -1) {
if (typeof (Page_ValidationVer) ==
"undefined")
alert ("Unable to find script
library ' /aspnet_client/ system_Web/l_0_2914_16/WebUIValidation. js' .
Try placing this file manually, or
reinstall by running 'aspnet_regiis -c'.");
else if (Page_ValidationVer l~
"121")
alert ("This page uses an incorrect
version of WebUIValidation. js. The page expects version 121.
The script library is " +
Page_ValidationVer + ".");
else
ValidatorOnLoad ( ) ; }
function ValidatorOnSubmit () { if
(Page_ValidationActive) { ValidatorConmonOnSubmit ( ) ;
</script>
</form>
</body>
</HTML>
Естественно, HTML-код страницы
получился столь большим из-за того, что при ее создании были использованы
компоненты системы проверки достоверности, которые реализуются
при помощи Java-сценариев, действующих на стороне пользователя.
Следующий
урок
|