http://blagtalkan.ru
http://oktpoisk.ru
http://mysorru.ru/
http://san-okt.ru/
http://pes6evolution.ru/
http://chasikigov.ru
http://serafimsovet.ru
http://filmsgov.ru
http://free-domen.ru
http://fithonda.ru/forums/index.php
http://avtogov.ru
http://www.1001bilet.com.ua/base/on-line/
http://pravilavoini.ru
http://school41ufa.ru
http://rusrav4.ru
прочие методы | Книга AJAX
 

Сначала с помощью метода connect () выполняется подключение! данных. Затем создается и исполняется запрос к базе данных, рый должен извлечь различные части сообщения электронной i (сохраняется в переменной Squery). Результаты запроса поме в объект! row.
На следующем шаге создается объект класса AjaxMailMessage,: затем заполняется информацией, полученной из базы данных:
class AjaxMailbox { // прочие методы
function getMessage(Smessageld) { $conn = $this->connect();
// получить информацию
Squery = "select Messageld, 'To', 'From', CC, BCC, Subject, Squery .= "Message,HasAttachments,Unread from AjaxMailMessages i Squery .= " Messageld=$messageld"; Sresult = mysql_query($query, Sconn); Srow = mysql_fetch_assoc($result);
Smessage - new AjaxMailMessage(); $message->id = $row["Message!d"];
$message->to = $row["To"]; $message->cc = $row["CC"]; $message->bcc = $row["BCC"]; $message->unread = ($row["Unread"]= $message->from = $row["From"]; $message->subject = $row["Subject"]; .$message->date = date("M j, Y H;i", intval($row["Date"])); $message->hasAttachments = ($row["HasAttachments"]==1); $message->unreadCount = $this->getUnreadCount($conn); $message->nessage = $row["Message"];
// здесь находится остальной код
Как и в методе getFolderPage(), здесь битовые поля также сравнивают¬ся со значением 1, чтобы получить логическое значение. Дата тоже преобразуется в более длинную строку, которая содержит как дату, так и время (например, «Окт 28, 2005 05:17») . Обратите внимание, что в сообщение добавлено свойство unreadCount. Эта величина не имеет прямого отношения к самому сообщению, однако такой прием помога¬ет постоянно обновлять количество непрочитанных сообщений в поль¬зовательском интерфейсе.
В заключение метод возвращает информацию о вложении (если тако¬вое существует).
class AjaxMailbox { // прочие методы
function getMessage($messageId) { $сопп = $this->connect();
// получить информацию
Squery = "select Messageld, 'То', 'From', СС, ВСС, Subject, Date, "; Squery .= "Message,HasAttachments,Unread from AjaxMailMessages where"; Squery .= " Messageld=$messageld"; Sresult = mysql_query($query, Sconn); $row = mysql_fetch_assoc($result);
Smessage = new AjaxMailMessageQ;
$message->id = $row["Messageld"];
$message->to = $row["To"];
$message->cc = $row["CC"];
$message->bcc = $row["BCC"];
$message->unread = ($row["Unread"]==1);
$message->from = $row["From"];
$message->subject = $row["Subject"];
$message->date = date("M j, Y H:i", intval($row["Date"]));
$message->hasAttachments = ($row["HasAttachments"]==1);
$message->unreadCount = Sthis->getUnreadCount(Sconn);
$message->message = $row["Message"];
if ($message->hasAttachments) {
Squery = "select Attachmentld,Filename,Size"; Squery .= " from AjaxMailAttachments"; Squery .= " where Messageld=$messageld";
Sresult = mysql_query($query, Sconn);
while (Srow = mysql_fetch_assoc($result)) {
$message->attachments[] = new AjaxMailAttachmentHeadesrf }
$row["Attachmentld"], $row["Filename"], (int) $row["Size"]);
$this->disconnect($conn); return Smessage;
>
// прочие методы
>
В этом фрагменте проверяется наличие вложений. Если вло есть, выполняется запрос, который возвратит все вложения в данных, имеющие отношение к этому сообщению. Обратите ние: фактическое содержимое вложения не возвращается, тол еловой идентификатор, имя файла и размер. Далее в цикле whilei полняется обход полученных результатов и для каждого из вло создается экземпляр класса AjaxMailAttachmentHeader, который добавляется в массив attachments объекта Smessage. Напомним ев что возвращаемый объект преобразуется вызывающей прог в строку формата JSON.
Отправка электронной почты
Приложение AjaxMail производит отправку электронной почты« мощью библиотеки PHPMailer (http://phpmailer.sourceforge.net\.", библиотека дает возможность посылать сообщения по элек! почте через сервер SMTP или через приложение sendmail (юь mail.org). Как уже говорилось, приложение AjaxMail отправляет» щения исключительно по протоколу SMTP.
Метод, обеспечивающий отправку почты, называется sendMail()_ принимает четыре аргумента, причем только первые три яв обязательными. В качестве аргументов передаются: строка с эле! ным адресом получателя (аргумент $to), тема сообщения (арг Ssubject), текст сообщения (аргумент Smessage) и адрес элект почты, куда должна быть отправлена копия сообщения (аргумент!
На первом шаге этот метод создает экземпляр класса PHPMailer и: няет поля То и СС. Эти поля заполняются с помощью методов
!"ess() и AddCC() соответственно. Каждый из них принимает два аргу¬мента: электронный адрес и реальное имя получателя. Трудность здесь в том, что аргументы $to и $сс могут содержать по несколько ад¬ресов, разделенных запятыми или точкой с запятой и к тому же пред¬ставленных в формате name. Например, в сообщении, отправ¬ляемом двум получателям, адрес может выглядеть так (копии не рас¬сылаются):
Joe Somebody ; Jim Somebody
Это обстоятельство необходимо учитывать при использовании класса PHPMailer для отправки почты:
class AjaxMailbox {
// прочие методы
function sendMail($to, $subject, Smessage, $cc="") { ь $mailer = new PHPMailerO;
$tos = preg_split ("/;],/", $to); foreach ($tos as $to) {
preg_match("/(.*?)<?(.*?)>?/i", $to, Smatches);
$maile r->AddAdd ress($matches[2],st r_replace('
}
$cc);
if ($cc != "'•) {
$ccs = preg_split ("/;!./"
foreach ($ccs as $cc){
preg_match("/(.*?)<?(.*?)>?/i", $cc, Smatches);
$mailer->AddCC($matches[2],str_replace('"

}
// здесь находится остальной код
// прочие методы

В первой строке метода создается экземпляр класса PHPMailer. Следую¬щая строка разбивает содержимое аргумента $to на составные части по запятым и точкам с запятой с помощью функции preg_split(), которая возвращает массив электронных адресов. Затем в цикле обрабатывает¬ся массив $tos, где функция preg_match() проверяет совпадение каждого элемента массива с шаблоном real name . Регулярное выраже¬ние, используемое в функции preg_match(), возвращает массив из трех совпадений. Первое - это вся строка, второе - имя получателя, если оно существует, и третье - собственно адрес электронной почты. После это¬го вызывается метод AddAdd ress(), которому передаются второе и третье совпадения. Поскольку реальное имя получателя может быть заключено в кавычки, для него вызывается функция str_replace(), к удалит все кавычки из той части строки, где содержится имя пс ля. Те же действия выполняются и для аргумента $сс с той лишь цей, что добавление производится методом AddCC().
У вас всегда будет массив $matches из трех совпадений, даже если строка не содержит имени получателя.
Теперь необходимо записать в объект $mailer информацию о SMTP, а также тему и текст сообщения, после чего сообщение быть отправлено:
class AjaxMailbox {
//прочие методы
function sendMail($to, Ssubject, Smessage, Scc="") { Smaller = new PHPMailer();
Stos = preg_split ("/;|,/", Sto); foreach (Stos as Sto) {
preg_match(7(.*?)<?(.»?)>?/i", $to, Smatches);
Smailer->AddAddress($matches[2],str_replace('

,SmatchesI

}

if (Sec != -') {
Sees = preg_split ("/;|,/"

Sec);

foreach (Sees as Sec) {
preg_match("/(.*?)<?(.*?)>?/i", Sec, Smatches);
$mailer->AddCC($matches[2],str_replace("",'' ,$matches[

}
$mailer->Subject = Ssubject; $mailer->Body = Smessage; $mailer->From = EMAIL_FROM_ADDRESS; Smailer->FromName: = SMAIL_FROMlNAME; $mailer->SMTPAuth = SMTP_DO_AUTHORIZATION; $mailer->Username = SMTP_UsIr; $mailer->Password = SMTP.PASSWORD; $mailer->Host = SMTP_SERVER; $mailer->Mailer = "smtp";,
$mailer->Send(); $mailer->SmtpClose(j;
// здесь находится остальной код
}
// прочие методы
}
Значения первых двух свойств, Subject и Body, берутся из входных гументов метода. В качестве значений свойств From и FromName
константы из файла conf ig. inc. php. Первое из них представляет адрес, а второе - имя отправителя (которое обычно отображается большинст¬вом клиентов электронной почты в качестве обратного адреса).
Далее заполняются свойства, имеющие отношение к параметрам аутентификации на сервере SMTP. Некоторые серверы SMTP требуют аутентификации пользователя перед отправкой сообщения, а некото¬рые нет. Если в свойстве SMTPAuth содержится значение false, PHPMailer будет пытаться отправить сообщение без отправки значений свойств Username и Password. В противном случае объект отправит эти значения серверу, пытаясь получить разрешение на отправку сообщения.
Последние два свойства определяют сервер SMTP и метод отправки со¬общения. В свойство Host записывается значение константы SMTP_SER-VER, а в свойство Mailer - строка "smtp", которая определяет тип про¬граммы электронной почты (в противоположность "sendmail").
После того как все свойства будут определены, вызывается метод Send(), который производит фактическую отправку сообщения, после чего вы¬зывается метод SmtpClose(), закрывающий соединение с сервером SMTP. Но на этом работа метода не заканчивается. Клиент должен знать, было ли отправлено сообщение. Для этого надо создать объект с ответом, со¬держащий информацию с извещением об отправке сообщения:
class AjaxMailbox { // прочие методы
function sendMail($to, $subject, Smessage, $cc="") { Smailer = new PHPMailerQ;
Sto);
Sto, Smatches); $mailer->AddAddress($matches[2], str_replace(
Stos = preg_split ("/;|,/ foreach (Stos as Sto) {
preg_match("/(*?)<?(.*?)>?/!
,$matches[1]));

}
if (Sec != ") {
Sees = preg_split ("/;!./", Sec);
foreach (Sees as Sec) {
preg_match(7(.*?)<?(.*?)>?/i", Sec, Smatches);
$mailer->AddCC($matches[2],str_replace("", ",$matches[1]));
}
}
$mailer->Subject = Ssubject; $mailer->Body = Smessage; $mailer->From = EMAIL_FROM_ADDRESS; Smailer->FromName = EMAIL_FROM_NAME; $mailer->SMTPAuth = SMTP_DO_AUTHORIZATION; $mailer->Username = SMTPJJSER; $mailer->Password = SMTP.PASSWORD; $mailer->Host = SMTP_SERVER;
$mailer->Mailer = "smtp";
$mailer->Send(); $mailer->SmtpClose();
$response = new JSONObject();
.if ($mailer->IsError()) { $response->error = true; $response->message = $mailer->ErrorInfo; } else {
$response->error = false;
$response->message = "Сообщение было успешно отправлено.";/ return $response;
}
// прочие методы
}
Для хранения информации, которая будет отправлена клиенту, ется объект класса JSONObject. Класс PHPMailer имеет метод IsEr возвращающий логическое значение, по которому можно опре, не было ли ошибки в процессе передачи сообщения. Если этот возвращает значение t rue (попытка отправить сообщение завер неудачей), то в свойство error объекта $ response записывается ние об ошибке, извлеченное из свойства Errorlnfo объекта В противном случае в свойство error записывается значение и клиенту передается подтверждение успешной отправки сооб В заключение, метод sendMail() возвращает объект $response вы щей программе.