Введение в программирование на PHP5


Программирование сообщения E-mail


Начнем теперь программирование сценария, который вставляется на страницу. Необходимо сделать так, чтобы поле e-mail было не обязательным на форме проверки кредитной карты. Некоторые заказчики могут не предоставлять адрес e-mail, и мы не сможем послать им подтверждающее сообщение. Поэтому весь сценарий находится внутри условного оператора.

if ($Email) {Then

'—Послать подтверждение заказа по e-mail $to = $Email $subject = "Order $OrderNo Confirmation"

Прежде всего, необходимо инициализировать параметры mail() — $to и $subject. Параметру $to присваивается один из элементов информации, посланной из компании кредитных карт и полученной в начале этой страницы. Переменная содержит адрес e-mail заказчика. Это должен быть реальный, действительный адрес e-mail.

Присваивание $subject использует текстовую строку, которая включает для идентификации значение переменной $OrderNo.

Теперь необходимо составить тело сообщения, форматируя его с помощью HTML для создания общей компоновки и внешнего вида. Вспомните из сказанного ранее, что тело должно быть одной строкой текста. Поэтому нельзя написать последовательность отдельных строк HTML и присвоить их параметру $message. Необходимо представить их в виде одной строки. Мы делаем это, задавая переменную $message, а затем помещаем в нее одну длинную строку, собирая ее из отдельных подстрок. Такой подход можно видеть в следующем фрагменте кода.

Пример I.19.

(html, txt)

Каждая подстрока текста соединяется с переменной $message, создавая постепенно в переменной одну текстовую строку. Эта строка содержит также теги XHTML для форматирования вложенного текста. Отметим, что переменные $Date, $OrderNo, $Name, $Address, $City, $State, и $Zip, полученные из информации кредитной компанией, встраиваются в увеличивающуюся строку. Конечная часть кода создает заголовки таблицы для информации заказа на продажу, которая форматируется далее.

Затем необходимо собрать информацию заказа на продажу из таблицы OrderDetail и сформатировать ее как строки таблицы.

$sqlMail = "SELECT * From OrderDetail WHERE OrderNo = '$OrderNo'"; $rsMail = odbc_exec($conn,$sqlMail);


while ($row = odbc_fetch_array($rsMail))

{

$ItemNumber =$row[ItemNumber]; $ItemTitle =$row[ItemTitle]; $ItemQuantity = $row[ItemQuantity]; $ItemPrice = $row[ItemPrice]; $ItemAmount = $ItemQuantity * $ItemPrice; $OrderTotal = $OrderTotal + $ItemAmount; $message = $message . "<tr>"; $message = $message ." <td>" . $ItemNumber . "</td>"; $message = $message . " <td>" . $ItemTitle . "</td>"; $message = $message . " <td >". $ItemQuantity . "</td>"; $message = $message . " <td >" . number_format($ItemPrice,2) . "</td>"; $message = $message . " <td >" . number_format($ItemAmount,2) . "</td>"; $message = $message . "</td>"

}

Это делается здесь в цикле while: значения полей помещаются в переменные, которые форматируются в ячейки таблицы и соединяются со строкой $message. По мере выполнения цикла накапливается значение переменной $OrderTotal.

$ShippingCharge = $OrderTotal * .02; $OrderTotal = $OrderTotal + $ShippingCharge; $message = $message . "<tr>"; $message = $message . "<td colspan=4 >Shipping</td>"; $message = $message . " <td >" . number_format($ShippingCharge,2) . "</td>"; $message = $message . "</tr>"; $message = $message . "<tr>"; $message = $message . "<td colspan=4 >Order Total</td>"; $message = $message . "<td >" . number_format($OrderTotal,2) . "</td>"; $message = $message . "</tr>"; $message = $message . "</table>"; $message = $message . "</body>"; $message = $message . "</html>";

$headers = 'From: sales@webwarehouse.com' . "\r\n" . 'Reply-To: sales@webwarehouse.com' . "\r\n" . 'Content-Type:text/html;charset=us-ascii' . "\r\n" . 'X-Mailer: PHP/' . phpversion();



mail($to, $subject, $message, $headers);

После того как сценарий выполнил итерации на множестве записей, форматируя отдельные строки таблицы для купленных продуктов, вычисляется и форматируется $ShippingCharge, вместе с $OrderTotal, как две последние строки таблицы. Закрывающие теги HTML присоединяются в конце строки $message, и сообщение e-mail завершается.

После завершения формирования сообщения e-mail мы создаем переменную $headers для хранения заголовочных данных, которые нужны для описания сообщения. В данном случае мы добавляем заголовочные сообщения From (указывает адрес e-mail, откуда было прислано сообщение), Reply-To (адрес e-mail, который появится в поле TO получателя, если он будет отвечать на автоматическое сообщение), Content-Type (определяет формат сообщения) и X-Mailer (определяет версию PHP, используемую для генерации сообщения). Хотя заголовочные сообщения являются необязательными, рекомендуется всегда их включать.

Если сообщение e-mail содержит HTML, который должен интерпретироваться соответствующим образом, то необходимо использовать следующее значение заголовка.

'Content-Type:text/html;charset=us-ascii'

Последний шаг состоит в вызове встроенной функции mail().

Необходимо упомянуть попутно, что прежде чем можно будет послать сообщение e-mail через сценарий PHP, сервер Web должен иметь выполняющуюся службу SMTP (Простой протокол пересылки почты), и может понадобиться внести изменения в файл PHP.ini. Особенности настроек различных серверов можно найти на сайте PHP.


Содержание раздела