Функции за ел. поща
PHP Manual

mail

(PHP 4, PHP 5)

mailИзпраща ел. поща

Описание

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Изпраща ел. поща.

Параметри

to

Получателят или получателите на писмото.

Форматирането на низа трябва да бъде съгласно » RFC 2822. Ето някои примери:

  • user@example.com
  • user@example.com, anotheruser@example.com
  • User <user@example.com>
  • User <user@example.com>, Another User <anotheruser@example.com>

subject

Тема на писмото.

Внимание

Темата трябва да удовлетворява » RFC 2047.

message

Съобщението, което трябва да се изпрати.

Всеки ред трябва да бъде отделен с LF (\n). Редовете не трябва да надвишават 70 знака.

Внимание

(Само за Windows) Ако PHP открие точка в началото на някой от редовете, когато се обръща директно към SMTP сървър, тя ще бъде премахната. За да предотвратите това, заменете откритите такива места с две точки.

<?php
$text 
str_replace("\n.""\n.."$text);
?>

additional_headers (незадължителен)

Низ, който ще бъде поставен в края на заглавките на писмото.

Това обикновено се използва за добавяне на допълнителни заглавки (From, Cc, и Bcc). Заглавките трябва да се разделят чрез CRLF (\r\n).

Забележка: При изпращане на ел. поща, писмото трябва да съдържа заглавка From. Тя може да се установи чрез параметъра additional_headers или по подразбиране от php.ini.
При неуспех ще се генерира съобщение за грешка, от рода на: Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. Под Windows, заглавката From установява и Return-Path.

Забележка: Ако съобщенията не се получат, пробвайте да използвате само LF (\n). Някои нискокачествени програми за изпращане на ел. поща под Unix автоматично заместват LF с CRLF (което води до дублиране на CR, ако CRLF се е използвало). Това трябва да се използва в краен случай, защото не е съгласно » RFC 2822.

additional_parameters (незадължителен)

Параметърът additional_parameters може да се използва за подаване на допълнителни параметри към програмата, която използвате за изпращане на ел. поща, чрез настройката sendmail_path. Например, това може да се използва, за да установите адреса на изпращача на писмото, когато използвате sendmail в режим -f.

Потребителят, който стартира уеб сървъра трябва да бъде добавен като надежден в настройките на sendmail, за да се предпазите от прибавяне на заглавка 'X-Warning' към писмото, когато изпращачът му (-f) е установен по този начин. За потребителите на sendmail, файлът е /etc/mail/trusted-users.

Връщани стойности

Връща TRUE, ако писмото е прието за доставка успешно. Иначе връща FALSE.

Забележете, че това, че писмото е прието успешно за доставка, НЕ означава, че наистина ще достигне очакваната дестинация.

Дневник на промените

Версия Описание
4.3.0 (Само за Windows) Стартира поддръжката на всички обикновени заглавки (като From, Cc, Bcc и Date) и те не са чувствителни към регистъра. След като обикновените заглавки не се интерпретират от MTA в първия случай, но се обработват от PHP, PHP < 4.3 поддържа само Cc елемента, а той е чувствителен към регистъра).
4.2.3 Параметърът additional_parameters е забранен в safe_mode и когато се използва, функцията mail() ще изведе предупредително съобщение и ще върне FALSE.
4.0.5 Добавен е параметърът additional_parameters .

Примери

Example #1 Изпращане на ел. поща.

Употреба на mail() за изпращане на елементарно писмо:

<?php
// Съобщението
$message "Line 1\nLine 2\nLine 3";

// В случай, че някой от редовете надвишава 70 знака, трябва да използваме wordwrap()
$message wordwrap($message70);

// Изпращаме
mail('caffinated@example.com''My Subject'$message);
?>

Example #2 Изпращане на ел. поща с допълнителни заглавки.

Допълнение от собствени заглавки, информиращо MUA за адресите на From и Reply-To:

<?php
$to      
'nobody@example.com';
$subject 'the subject';
$message 'hello';
$headers 'From: webmaster@example.com' "\r\n" .
    
'Reply-To: webmaster@example.com' "\r\n" .
    
'X-Mailer: PHP/' phpversion();

mail($to$subject$message$headers);
?>

Example #3 Изпращане на ел. поща с допълнителен параметър от командния ред.

Параметърът additional_parameters може да се използва за подаване на допълнителни параметри към програмата, настроена да се използва за изпращане на ел. поща, използвайки sendmail_path.

<?php
mail
('nobody@example.com''the subject''the message'null,
   
'-fwebmaster@example.com');
?>

Example #4 Изпращане на HTML форматирана ел. поща

Чрез функцията mail() също е възможно и изпращането на HTML ел. поща.

<?php
// много получатели
$to  'aidan@example.com' ', '// забележете на запетайката
$to .= 'wez@example.com';

// тема
$subject 'Birthday Reminders for August';

// съобщение
$message '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
'
;

// За изпращането на HTML ел. поща, трябва да бъде установена заглавката Content-type
$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";

// Допълнителни заглавки
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' "\r\n";

// Изпращаме
mail($to$subject$message$headers);
?>

Забележка: Ако възнамерявате да изпращате HTML или други сложни писма, се препоръчва употребата на PEAR пакета » PEAR::Mail_Mime.

Бележки

Забележка: Изпълнението на функцията mail() под Windows се различава в много отношения от това под Unix. Първо, не се използва локален изпълним файл за съставянето на съобщенията, а се работи с директни сокети, което означава че MTA трябва да прослуша мрежов сокет (който може да бъде на локалната машина или на отдалечена такава).
Второ, собствените заглавки From:, Cc:, Bcc: и Date: не се интепретират от MTA в първия случай, но се обработват от PHP.
В допълнение, параметърът to не трябва да бъде във формат "Something <someone@example.com>". При комуникация с MTA, командата за ел. поща може да не го обработи правилно.

Забележка: Чрез функцията могат също да се изпращат и писма, съдържащи прикрепени файлове и специални типове съдържание (например HTML). Това се осъществава чрез MIME кодиране - за повече информация, прегледайте » Статията на Zend или » PEAR Mime класовете.

Забележка: Забележете, че функцията mail() не е подходяща за голям обем от писма, в цикъл. Тя отваря и затваря SMTP сокет за всяко писмо, което не е много елегантно.
За изпращане на големи количества ел. поща, прегледайте пакетите » PEAR::Mail и » PEAR::Mail_Queue.

Забележка: Следните RFC стандарти може да са ви от ползва: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049 и » RFC 2822.

Вж. също


Функции за ел. поща
PHP Manual