Простая функция отправки e-mail на php



Делаем простенькую функцию для отправки e-mail средствами php. Например, ее можно будет использовать для уведомлений в каком-нибудь сервисе. Мы используем пример отправки письма, сообщающего об удачном добавлении сайта в каталог.

Итак, какие параметры будет принимать наша функция:

  • Имя адресата: $name
  • Тема письма: $subject
  • Адрес сайта: $url
  • Адрес отсылки: $to
  • От кого: $from

Будем считать, что данные у нас в кодировке win-1251, а отправлять письмо мы будем в (самой распространенной для e-mail) кодировке koi8-r. Время в письмо будет поставляться текущее.

Шаблон письма не будем держать в коде, а вынесем в отдельный текстовый файлик, в котором будут специальные места для подстановки данных. Пример файлика:

Здравствуйте, {name}!

Кто-то, возможно это Вы и есть, указал этот e-mail при заполнении заявки на
добавление сайта {url} в каталог Alt-F4. Если Вы этого не делали, просто
удалите данное письмо.

Ваша заявка успешно прошла модерацию и сайт добавлен в каталог.

С уважением, администрация сайта www.alt-f4.ru
Е-mail: info@alt-f4.ru
{date}

Пусть файлик будет называться 'letter.txt' (кстати говоря, этот шаблон можно хранить в базе данных). Теперь смотрим на листинг функции:

function sendMail($name, $subject, $url, $to, $from) {
   $letter_tpl = file_get_contents('letter.txt'); // считываем из файла шаблон письма
   $date = date("d.m.Y", time()); // форматируем текущую дату
   $searches = array("/\{name\}/", "/\{url\}/", "/\{date\}/");
   $replacements = array($name, $url, $date);
   // подставляем данные в шаблон
   $letter = preg_replace($searches, $replacements, $letter_tpl);
   $from = convert_cyr_string($from, "w","k"); // перекодируем поле 'от кого'
   $letter = convert_cyr_string($letter, "w","k"); // перекодируем тело письма
   // составляем заголовки - очень важно!
   $headers  = "Content-type: text/plain; charset=koi8-r\r\n";
   $headers .= "From: ".$from."\r\n";
   $subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "w","k")).'?=';
   if (mail($to, $subject, $letter, $headers)) {
      return true;
   }else {
      return false;
   }
}

Стоит заметить, что в переменную $from следует писать что-то вроде:

$from = "Администрация сайта Alt-F4.ru <no-reply@alt-f4.ru>"

Вот и все. Эта функция будет отправлять письма, построенные по всем правилам и в верной кодировке. Буду рад если вам поможет эта заметка.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешаю теги: <a> <em> <strong> <pre> <ul> <ol> <li>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Подробнее о форматировании

Image CAPTCHA
Регистр символов учитывается.