Если Вам нужно послать сообщение администратору, пользователю, сделать рассылку,
отправить отчет по електронной почте, то проще всего это сделать с помощью встроенной
функции mail().
bool mail (string to, string subject, string message [, string additional_headers [,
string additional_parameters]])
Для того, чтобы она работала должны быть установлены:
На Unix платформе - установленный и настроенный sendmail. Если его путь
не в переменной окружения, то в php.ini нужно указать sendmail_path =/path/to/sendmail
-t -i в разделе [mail function].
На Windows платформе - иметь SMTP сервер. Его параматры нужно указать в
php.ini в разделе [mail function]:
SMTP=192.168.1.1
sendmail_from=admin@example.com
Функция вызывается как
mail (кому, тема, тело, [дополнительные заголовки, [параметры]])
Всё что нужно - это правильно сформировать все строковые параметры.
Кому (копии и скрытые копии указываются в дополнительных заголовках):
nobody@example.com
John Smith <nobody@example.com>
nobody@example.com, pupkin@example.com
John Smith <nobody@example.com>, Ivan Pupkin <pupkin@example.com>
Тема - любой текст без символов новой строки
Тело - любой текст, в т.ч. HTML или MIME
Заголовки - здесь можно указывать такие заголовки: From: Cc: Bcc: MIME-Version:
Content-type: Reply-To: X-Mailer: X-Priority: Date: Content-Transfer-Encoding:
Content-Disposition:
From - От: "pupkin@example.com" или "Ivan Pupkin <pupkin@example.com>"
Cc - Копия: также как и "кому"
Bcc - Скрытая копия: также как и "Кому"; работает только на
Unix
Reply-To - если при ответе нужно подставлять адресата иного чем отправителя
X-Priority - важность сообщения (по умолчанию 3)
Заголовки разделяются <font color="#0000CC">\r\n</font> (На Unix можно
только <font color="#0000CC">\n</font>)
Если посылается письмо в HTML формате, нужно обязательно поставить следующие
2 строчки в заголовках:
<blockquote>MIME-Version: 1.0\r\n;<br>
Content-Type: text/html; charset=& quot;windows-1251& quot;</blockquote>
!!! Хочу послать письмо с аттачментом(ми) (например HTML с рисунками)
Нужно использовать MIME (RFC1896, RFC2045, RFC2046, RFC2047, RFC2048, RFC2049).
Для этого нужно сначала считать файл в переменную и закодировать его в безопасную
base64 кодировку с помощью функции base64_encode(). В заголовке нужно указать:
MIME-Version: 1.0\r\n<br>
Content-Type: multipart/mixed; boundary=& quot;$delimiter& quot;
Где $delimiter - любая строка, можно случайная. multipart/mixed можно заменить
на multipart/alternative.
$delimiter=& quot;----=_Разделитель_Блоков_=----& quot;
А в теле письма разделить разные типы данных boundary ($delimiter) и указать их Content-Type:
$body="This is a multi-part message in MIME format.";
$body.="\r\n\r\n".$delimiter;
$body.="Content-Type: text/plain; charset=\"windows-1251\"\r\n\r\n";
$body.="Content-Transfer-Encoding: quoted-printable";
$body.="Привет Иван! Шлю тебе как и обещал фотку и реферат";
$body.="\r\n\r\n".$delimiter;
$body.="Content-Type: image/jpeg; name=\"meeting.jpg\"";
$body.="Content-Transfer-Encoding: base64";
$body.="Content-Disposition: attachment; filename=\"meeting.jpg\"\r\n\r\n";
$body.=base64_encode($file1);
$body.="\r\n\r\n".$delimiter;
$body.="Content-Type: application/msword; name=\"referat.doc\"";
$body.="Content-Transfer-Encoding: base64";
$body.="Content-Disposition: attachment; filename=\"referat.doc\"\r\n\r\n";
$body.=base64_encode($file2);
$body.="\r\n\r\n".$delimiter;
?>
Приведу несколько примеров:
Простое использование функции php mail
mail("rasmus@lerdorf.on.ca", "My Subject", "Line 1\nLine 2\nLine 3");
Использование дополнительных заголовков php mail
mail("nobody@aol.com", "the subject", $message,
"From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());
Создание комплексного письма при помощи PHP
/* recipients */
$recipient .= "Mary <mary@u.college.edu>" . ", " ; //note the comma
$recipient .= "Kelly <kelly@u.college.edu>" . ", ";
$recipient .= "ronabop@php.net";
/* subject */
$subject = "Birthday Reminders for August";
/* message */
$message .= "The following email includes a formatted ASCII table\n";
$message .= "Day \t\tMonth \t\tYear\n";
$message .= "3rd \t\tAug \t\t1970\n";
$message .= "17rd\t\tAug \t\t1973\n";
/* you can add a stock signature */
$message .= "--\r\n"; //Signature delimiter
$message .= "Birthday reminder copylefted by public domain";
/* additional header pieces for errors, From cc's, bcc's, etc */
$headers .= "From: Birthday Reminder <birthday@php.net>\n";
$headers .= "X-Sender: <birthday@php.net>\n";
$headers .= "X-Mailer: PHP\n"; // mailer
$headers .= "X-Priority: 1\n"; // Urgent message!
$headers .= "Return-Path: <birthday@php.net>\n"; // Return path for errors
/* If you want to send html mail, uncomment the following line */
// $headers .= "Content-Type: text/html; charset=iso-8859-1\n"; // Mime type
$headers .= "cc: birthdayarchive@php.net\n"; // CC to
$headers .= "bcc: birthdaycheck@php.net, birthdaygifts@php.net"; // BCCs to
/* and now mail it */
mail($recipient, $subject, $message, $headers);
В принципе овладев техникой отправки файлов с сервера на
электронную почту и имея корпоративный "почтовый" интернет дома можно
скачивать много файлов посредством одной лишь электронной почты. А для
перекачки файлов с любого интернет сервера на корпоративный сервер
обычно используется fopen, но об этом как-нибудь позже.
|