Как настроить почтовый ящик для сайта с помощью функции mail

1 голос

Рад видеть вас на моем блоге start-luck.ru. Сегодня рассмотрим, зачем нужна Php функция Mail. Какой бы вы не создали интернет-проект на нем должна быть форма обратной связи, чтобы люди могли с вами общаться. Особенно это актуально для коммерческих проектов. Это сложная тема, о которой я уже говорил в статье «Как написать сайт на php». Рассмотрим, как использовать данную функцию для отправки сообщений.

Немного теории

Для отправки писем необходим SMTP-сервер. Он есть на всех качественных платных хостингах. Для приема понадобится POP-сервер. Необходимо понимать, что php не отправляет сообщение, он передает команды приложению sendmail, которое и занимается отправкой. Поэтому его нужно иметь. Если вы используете Денвер, то это приложение уже встроено. Все сообщения помещаются в директорию «tmp/!sendmail». Кстати, рекомендую вам, завести себе почту от Гугла. Это особенно актуально, если вы занимаетесь сайтостроением.

Что это такое

Mail применяется для отправки сообщений при условии что будут выполняться некоторые правила. Самое главное — эта функция не подходит для пересылки большого числа писем. Потому что после каждой отправки она закрывает, а потом опять открывает соединение с почтовым сервером. Это приведет к перерасходу мощностей на хостинге.

Настройка функции происходит в конфигурационном файле php.ini. В нем прописывают путь к лог-файлам, задают значение порта и так далее.

Mail принимает пять аргументов из которых три — обязательные:

  • Адрес отправителя;
  • Тайтл письма;
  • Текст сообщения.

Например, напишем такие строки кода

<?php
mail("test@yandex.ru", "Заголовок", "Текст сообщения");
?>

Если вы пользуетесь Денвером, то информация, которую вы отправили, сохранится на виртуальном диске Z папке «tmp\!sendmail». Если вы забыли, как установить данный локальный сервер, то советую почитать статью «Как быстро установить Denver».

Некоторые особенности

При работе возникает много нюансов. Они зависят от используемой платформы ОС и других настроек и параметров. Рассмотрим самые основные:

  • При отправке письма заголовок Form нужно задать через необязательный параметр «additional_headers». При его отсутствии может возникнуть ошибка при отправлении;
  • Заголовки разделите символами перевода на новую строку и каретки (\r\n);
  • Длина строки не более семидесяти знаков. Ее регулируйте (\r\n).

Что делать если функция не отправляет письма

Даже с учетом всех перечисленных выше моментов, mail может не работать. При этом на локальном сервере все отправляется как следует. Одной из причин почему так происходит — неправильная настройка функции на хостинге. Поэтому нужно обратиться к конфигурационному файлу php.ini, в котором посмотрите функцию «disable_functions».

Для проверки работоспособности напишите такой несложный код и разместите его в корне созданного интернет-проекта.

<?
print mail("name@my.ru","header","text");
?>

Если все работает правильно, то на экране браузера появится цифра один «1». Ее возвратит «print» после выполнения.

Важно! Если вы используете в качестве локального сервера OpenServer, то письма сохраняются в папке C:\openserver\userdata\temp\email. При условии, что его вы установили на локальный диск «С».

Отправка с вложением

Рассмотрим пример, как отсылать сообщения с прикрепленным файлом. Для этого используется функция sendMailAttachment(). Рассмотрим, как это работает на примере:

<?
$file = "./files/test.txt"; // прописываем путь к файлу, который нужно отправить
$mailTo = "test@gmail.com"; // адрес отправителя
$from = "test@files.com"; // от кого
$subject = "Test file"; // тема
$message = "Текст с вложением"; // контент письма
$r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением
echo ($r)?Отправлено':'Ошибка. Не отправлено!';
//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения
//echo ($r)?Отправлено':'Ошибка. Не отправлено!';
?>

Проблемы с кодировкой

Иногда сообщения приходят в виде вопросов «?» или непонятных символов. От того насколько правильно оно будет перекодировано, зависит прочтет ли его получатель. При стандартных способах отправки php не учитывает кодировку. На эту тему на моем блоге уже была статья «UTF-8 и Windows 1251». Сам контент сообщения может быть любой кодировки. Вся сложность заключается в заголовке From. По стандарту они должны быть в US-ASCII. Есть две формы кодирования —BASE64 и Quoted-Printable. Первая — более универсальная и работает с UTF-8, поэтому используете ее. Например,

<?
$to = "Адрес куда отправлять";
$from = "От кого";
$subject = "Тема";
$message = '
<html><head>
<title>Привет</title>
</head><body>
Текст
</body></html>';
$headers  = "Content-type: text/html; charset= UTF-8 \r\n";
$headers .= "From: Любой текст <$from>\r\n";
mail($to, $subject, $message, $headers);
?>

При таком варианте заголовки могут быть нечитаемые. Чтобы решить данную проблему напишите заголовок в таком виде:

$subject = '=?UTF-8?B?'.base64_encode('Обратная связь').'?=';

Важно! Используйте исключительно UTF-8.

Остались еще вопросы? Рекомендую вам ознакомиться с хорошим курсом Русакова  «Создание движка на PHP и MySQL 2.0». Изучив его вы не только разберетесь с веб-программированием, но и научитесь писать собственный движок сайта.

Вывод

Итак, работа функции mail, не очень сложна. Мы рассмотрели самые распространенные ошибки, которые могут возникнуть при ее реализации. Хочется порекомендовать вам посетить портал для программистов GeekBrains.ru, где вы наверняка найдете что-то интересное. Подписывайтесь на мою группу ВКонтакте, там тоже вы найдете много полезной информации.

Дмитрий 3959

Какого материала вы хотели бы видеть больше? (Рубрики)

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

  • ;-)
  • :|
  • :x
  • :twisted:
  • :smile:
  • :shock:
  • :sad:
  • :roll:
  • :razz:
  • :oops:
  • :o
  • :mrgreen:
  • :lol:
  • :idea:
  • :grin:
  • :evil:
  • :cry:
  • :cool:
  • :arrow:
  • :???:
  • :?:
  • :!: