Как отослать почту

323
Как отослать почту

Как отослать почту

Если Вам нужно послать сообщение администратору, пользователю, сделать рассылку, 
отправить отчет по електронной почте, то проще всего это сделать с помощью встроенной 
функции mail(). Для того, чтобы она работала должны быть установлены:

 

  1. На Unix платформе - установленный и настроенный sendmail. Если его путь 
    не в переменной окружения, то в php.ini нужно указать sendmail_path =/path/to/sendmail 
    -t -i
     в разделе [mail function].
  2. На Windows платформе - иметь SMTP сервер. Его параметры нужно указать в 
    php.ini в разделе [mail function]:

    SMTP=192.168.1.1

    sendmail_from=admin@example.com


Функция вызывается как

mail(комутематело, [дополнительные 
заголовки
, [параметры]])


Всё что нужно - это правильно сформировать все строковые параметры.

  1. Кому (копии и скрытые копии указываются в дополнительных заголовках):

    • nobody@example.com
    • John Smith 
    • nobody@example.com, 
    • John Smith , Ivan Pupkin 
  2. Тема - любой текст без символов новой строки
  3. Тело - любой текст, в т.ч. HTML или MIME
  4. Заголовки - здесь можно указывать такие заголовки: 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 "
    • Cc - Копия: также как и "кому"
    • Bcc - Скрытая копия: также как и "Кому"; работает только на 
      Unix
    • Reply-To - если при ответе нужно подставлять адресата иного чем отправителя
    • X-Priority - важность сообщения (по умолчанию 3)

    Заголовки разделяются \r\n (На Unix можно 
    только \n)
Если посылается письмо в HTML формате, нужно обязательно поставить следующие 
2 строчки в заголовках:

MIME-Version: 1.0\r\n;

Content-Type: text/html; charset="windows-1251"

 

Хочу послать письмо с аттачментом(ми) (например HTML с рисунками)


Нужно использовать MIME . 
Для этого нужно сначала считать файл в переменную и закодировать его в безопасную 
base64 кодировку с помощью функции base64_encode(). В заголовке нужно указать:

 

 

MIME-Version: 1.0\r\n

Content-Type: multipart/mixed; boundary="$delimiter"


Где $delimiter - любая строка, можно случайная. multipart/mixed можно заменить 
на multipart/alternative.

$delimiter="----=_Разделитель_Блоков_=----"


А в теле письма разделить разные типы данных 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;
?>