Отправка почты в PHP с вложениями

Представляю посетителям сайта http://red-book-cms.ru пример полностью рабочей самописной функции отправки писем с вложениями на PHP:

<?php

/**
 * Функция отправки письма с вложениями.
 * Коды возвращаемых ошибок: 
 * 0 - файл не существует, 
 * 1 - файл не удалось открыть,
 * 2 - письмо не удалось отправить,
 * -1 - письмо успешно отправлено.
 * 
 * @param string $charset
 * @param string $to
 * @param string $from
 * @param string $subject
 * @param string $message
 * @param array $files
 * @return int
 */
function send_mail($charset, $to, $from, $subject, $message, $files) {
    $boundary = "--" . md5(uniqid(time())); // генерация разделителя 
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $headers .= "From: $from\r\n";
    $multipart .= "--$boundary\n";

    $multipart .= "Content-Type: text/html; charset=$charset\n";
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    $multipart .= $message;

    if ((is_array($files)) && (!empty($files))) :
        foreach ($files as &$path):
            if (!file_exists($path)): // проверяем, что файл существует
                return 0;
                exit();
            endif;

            $fp = fopen($path, "r"); // пробуем открыть файл
            if (!$fp) :
                return 1;
                exit();
            endif;

            $file = fread($fp, filesize($path));
            fclose($fp);

            $message_part .= "--$boundary\n";
            $message_part .= "Content-Type: application/octet-stream\n";
            $message_part .= "Content-Transfer-Encoding: base64\n";
            $message_part .= "Content-Disposition: attachment; filename = \"" . $path . "\"\n\n";
            $message_part .= chunk_split(base64_encode($file)) . "\n";
        endforeach;
        $multipart .= "\n\n" . $message_part . "--$boundary--\n";
    endif;

    if (!mail($to, $subject, $multipart, $headers)): // отправка письма
        return 2;
        exit();
    endif;
    return -1;
}

print send_mail('windows-1251',
        'red-book-cms@yandex.ru', 
        'ПХП <by-php@yandex.ru>', 
        'Письмо от PHP с вложениями', 
        '<h1>Привет.</h1><p>Присланы файлы вам во вложении.</p>', 
        array('robots.txt', 'html.zip')
        );
?>

В принципе все входные параметры функции приведены в комментарии к ней же, но для тех кому все ещё ничего непонятно поясню, как пользоваться данным сниппетом.

  • $charset — кодировка письма, строковый тип данных. Примеры кодировок: windows-1251, koi8-r, utf-8.
  • $to — получатели, их ящики, также строковый тип данных.
  • $from — отправитель, от кого письмо придет получателям, строка.
  • $subject — тема письма, строкового типа данных.
  • $message — текст сообщения, тело письма. Может содержать как простой текст, так и разметку на HTML.
  • $files — массив с файлами. Пример: array('text.txt', 'readme.md', 'archive.zip');.

Коды ошибок, которые возвращает моя самописная функция:

  •  -1 — все в порядке, письмо отправлено по назначению.
  • 0 — какого-то из файлов или файла не существует.
  • 1 — файл(ы) не удалось открыть по каким-то причинам.
  • 2 — по неизвестным причинам письмо отправить не получилось.
Опубликовано 30-08-2013 в 17:15


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>











Свежие комментарии

  • krasnov8953: к записи Не работает как мне кажется строчка $newTvId = $ »
  • Dimanski: к записи ничего не понимаю. Ставлю ModX на хостинг r01.ru »
  • Дмитрий: к записи Спасибо! Очень выручили. С битриксом беда, а прав »
  • леонид: к записи как сделать что были в ряд? у меня получается по о »
  • Администратор: к записи Статический IP. »
  • Steel: к записи Администратор, вы данную проблему решили подключен »
  • Дмитрий: к записи Хотел узнать как прикрутить данное окно (http://re »

Blogroll:

  • На сайте http://shtori.ru/ элитные шторы по Вашему эскизу. →

Последние твиты