PHP - Класс для отправки письма с вложением
Хочу предложить вам к использованию простой и удобный класс на PHP для отправки электронных писем с возможностью вложения файлов. Внизу страницы приведены примеры использования данного класса.
// class Mail { private $params = array('to', 'subject', 'message', 'from'); private $settings = array(); private $contentType = 'text/plain'; private $charset = 'utf-8'; private $headers = array(); private $body = array(); private $file; private $separator; private $errors = array(); private $file_extensions = array('png', 'jpg', 'pdf', 'txt'); function __construct() { $this->separator = md5(time()); } function __set($name, $value) { if(in_array($name, $this->params) == true) { $this->settings[$name] = $value; } else { $this->errors[] = 'Setting [' . $name . '] doesn\'t exist'; } } public function checkSettings() { $error = array(); foreach($this->params as $value) { if(array_key_exists($value, $this->settings) != true) $error[] = $value; } if(empty($error) != true) $this->errors[] = sprintf('Settings: [%s] does\'n exist', implode(', ', $error)); return true; } public function setFileExtensions($array = array()) { if(is_array($array) == true) $this->file_extensions = $array; return $this; } public function checkErrors() { if(empty($this->errors) != true) { foreach($this->errors as $key => $error) throw new Exception($error); } return true; } public function isHtml($isHtml = true) { if($isHtml == true) $this->contentType = 'text/html'; return $this; } private function mainHeaders() { $this->headers[] = 'From: ' . $this->settings['from']; $this->headers[] = 'MIME-Version: 1.0'; $this->headers[] = sprintf('Content-Type: multipart/mixed; boundary="%s"', $this->separator); } private function messageHeaders() { $this->body[] = '--' . $this->separator; $this->body[] = 'Content-Transfer-Encoding: 7bit' . PHP_EOL; $this->body[] = '--' . $this->separator; $this->body[] = 'Content-type: ' . $this->contentType . '; charset=' . $this->charset; $this->body[] = 'Content-Transfer-Encoding: 8bit' . PHP_EOL; $this->body[] = $this->settings['message']; } private function fileHeaders() { $this->body[] = '--' . $this->separator; $this->body[] = sprintf('Content-Type: application/octet-stream; name="%s"', $this->file); $this->body[] = 'Content-Transfer-Encoding: base64'; $this->body[] = 'Content-Disposition: attachment' . PHP_EOL; $this->body[] = $this->prepareFile(); $this->body[] = '--' . $this->separator . '--'; } public function attachFile($file) { if(file_exists($file) != true) $this->errors[] = 'file ' . $file . ' doesn\'t exist'; $ext = pathinfo($file, PATHINFO_EXTENSION); if(in_array($ext, $this->file_extensions) != true) $this->errors[] = $ext . ' not available to attach.'; $this->file = $file; return $this; } private function prepareFile() { $handle = fopen($this->file, 'r'); $content = fread($handle, filesize($this->file)); fclose($handle); return chunk_split(base64_encode($content)); } public function send() { try { if($this->checkSettings() && $this->checkErrors()) { $this->mainHeaders(); $this->messageHeaders(); if($this->file) $this->fileHeaders(); if(mail($this->settings['to'], $this->settings['subject'], implode("\r\n", $this->body), implode("\r\n", $this->headers)) == true) { print sprintf('Message to %s succesfully send', $this->settings['to']); } else { throw new Exception('Can not send message.'); } } return true; } catch(Exception $e) { echo $e->getMessage(); } } } //
Пример использования вышеприведенного класса
// /* Создаем экземпляр класса. */ $m = new Mail(); /* Указываем основные настройки. */ $m->to = 'address@example.ru'; $m->subject = 'Тестовая тема сообщения'; $m->message = 'Тестовое содержимое сообщения'; $m->from = 'sender@example.ru'; /* По-умолчанию письма отправляются в формате простого текста. Строчка ниже необходима для того, чтобы отправлять в сообщениях HTML код. */ $m->isHtml(true); /* По-умолчанию мы можем прикреплять вложения следующих форматов: png, jpg, pdf, txt. Строчка ниже необходима для того, чтобы задать ваш собственный набор разрешенных для вложения форматов файлов. Чтобы задать ваш собственный набор разрешенных для вложения форматов файлов, передайте в метод setFileExtensions() массив разрешенных форматов в качестве аргумента. */ $m->setFileExtensions(array('zip')); /* Прикрепляем файл в виде вложения с помощью метода attachFile(). В качестве аргумента для указанного метода необходимо указать полный путь к файлу. */ $m->attachFile(dirname(__FILE__) . '/demo.zip'); /* Отправляем электронное сообщение */ $m->send(); //
Вам требуются услуги или консультация специалиста по веб-разработке?
Свяжитесь со мной