PHP: Универсальная отправка Email + вложения

Одним из немногих преимуществ языка программирования PHP — это легкий способ отправки электронных сообщений. Однако рано или поздно базового функционала начинает не хватать и приходиться начинать поиски в Интернете о возможных настройках стандартной функции mail.

После долгих проб я решил написать наиболее универсальную функцию, которую можно использовать для отправки email. При этом Вам не нужно будет думать о настройках. Все основные настройки уже включены в функцию. Мой метод также позволит без труда прикреплять файлы к электронным письмам (т.е. делать аттач).
Код функции отправки email на PHP:

function Mail($to, $subj, $text, $from = false, $file = array(), $contentType = 'text/html', $charset = 'utf-8')
  {
    $z = $text;
    $un = strtoupper(uniqid(time()));
    if (isset($file['path']) && is_array($file['path'])) {
      if (!isset($file['name']) ||
          !is_array($file['name']) ||
          count($file['name']) != count($file['path'])) {
        $file['name'] = array();
        foreach ($file['path'] as $path) {
          $file['name'][] = basename($path);
        } 
      } 
      $z = "------------".$un."\nContent-Type:".$contentType.";\n";
      $z .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
      foreach($file['path'] as $idx => $path) {
        $f   = fopen($path, 'rb');
        $z .= "------------".$un."\n";
        $z .= "Content-Type: application/octet-stream;";
        $z .= "name=\"".basename($path)."\"\n";
        $z .= "Content-Transfer-Encoding:base64\n";
        $z .= "Content-Disposition:attachment;";
        $z .= "filename=\"".$file['name'][$idx]."\"\n\n";
        $z .= chunk_split(base64_encode(fread($f, filesize($path))))."\n";
        fclose($f);
      }
    }
    $head = "To: $to\n";
    if ($from) {
      $head .= "From: $from\n";
      $head .= "Reply-To: $from\n";
    }
    $head .= "X-Mailer: PHPMail Tool\n";
    $head .= "Mime-Version: 1.0\n";
    $head .= "Content-Type:";
    if ($z == $text) {
       $head .= $contentType."; charset=".$charset;
    } else {
      $head .= "multipart/mixed;";
    }
    $head .= "boundary=\"----------".$un."\"\n\n";
    return mail($to, $subj, $z, $head);
  }

А теперь немного описания параметров:
$to — email получателя (или получателей);
$subj — Тема сообщения;
$text — Текст сообщения (по умолчанию HTML код);
$from = false — Отправитель письма;
$file = array() — файлы для вложения в виде:
array(‘path’ => array(‘пути к файлу’), ‘name’ => array(‘имена файлов в письме’)), например
array(‘path’ => array(‘files/file1.zip’, ‘img/image.png’), ‘name’ => array(‘Программа.zip’, ‘Наш баннер.png’));
$contentType = ‘text/html’ — формат текста сообщения;
$charset = ‘utf-8’ — кодировка сообщения;

Запись опубликована в рубрике PHP с метками , , , , , , , , , , , . Добавьте в закладки постоянную ссылку.