Всем привет. Рассмотрим варианты отправки и получение писем на PHP. Кстати, я уже публиковал пост на тему создания простой контактной формы для сайта. В этот раз рассмотрим отправку писем на почту более детально, так как в большинстве мой сайт читают новички. Но прежде, чем приступить к написанию скрипта отправки писем на PHP, нам нужна форма, с которой будут собираться данные. Для примера я возьму Bootstrap и сделаю несколько полей, а именно:
- Для ввода email адреса отправителя
- Тема сообщения
- Поле ввода сообщения
Для всех полей, в том числе и кнопки отправки, которую поставим внизу, прописываем атрибут name, которому присваиваем какое-то значение (имя), оно может быть любым, но символичным и желательно писать латиницей. И в итоге должно получиться. что-то вроде этого:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <form class="my-form" action="" method="post">
<small>* Все поля обязательны для заполнения</small>
<div class="form-group">
<input type="email" class="form-control" name="email" placeholder="Ваш email" required/>
</div>
<div class="form-group">
<input type="text" class="form-control" name="theme" placeholder="Тема сообщения" required/>
</div>
<div class="form-group">
<textarea class="form-control" rows="3" name="message" placeholder="Введите сообщение" required></textarea>
</div>
<button type="submit" class="btn btn-warning" name="submit">Отправить</button>
</form> |
<form class="my-form" action="" method="post">
<small>* Все поля обязательны для заполнения</small>
<div class="form-group">
<input type="email" class="form-control" name="email" placeholder="Ваш email" required/>
</div>
<div class="form-group">
<input type="text" class="form-control" name="theme" placeholder="Тема сообщения" required/>
</div>
<div class="form-group">
<textarea class="form-control" rows="3" name="message" placeholder="Введите сообщение" required></textarea>
</div>
<button type="submit" class="btn btn-warning" name="submit">Отправить</button>
</form>
Теперь напишем сам скрипт отправки писем. Это можно сделать прямо в этом файле, но лучше будет вынести обработчик в отдельный. MySql нам не нужен. Для каждого поля нужно создать переменную и присвоить им значения глобального массива POST, то есть то, что мы прописали до этого в атрибутах name. Отправлять будем письмо в HTML формате, поэтому создадим небольшую таблицу, в которую и поместим все данные полей плюс дополнительно напишем откуда была произведена отправка. К примеру со страницы Спасибо за комментарий. В итоге письмо должно прийти на почту в таком виде:
Информация |
Откуда |
Страница спасибо за комментарий |
Адресат |
login@example.com |
Тема |
Тема письма |
Сообщение |
Письмо с сайта |
Простой скрипт отправки писем PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| < ?php
$to = "<myemail@example.com>";
$email = $_POST['email'];
$subject = $_POST["theme"];
$page = 'Страница спасибо за комментарий';
$message = '
<html>
<body>
<center>
<table border=1 cellpadding=6 cellspacing=0 width=90% bordercolor="#DBDBDB">
<tr><td colspan=2 align=center bgcolor="#E4E4E4"><b>Информация</b></td></tr>
<tr>
<td><b>Откуда</b></td>
<td>'.$page.'</td>
</tr>
<tr>
<td><b>Адресат</b></td>
<td><a href="mailto:'.$email.'">'.$email.'</a></td>
</tr>
<tr>
<td><b>Тема</b></td>
<td>'.$subject.'</td>
</tr>
<tr>
<td><b>Сообщение</b></td>
<td>'.$_POST['message'].'</td>
</tr>
</table>
</center>
</body>
</html>';
$headers = "Content-type: text/html; charset=utf-8\r\n";
if (!empty($email) && !empty($subject) && !empty($message)) {
$result = mail($to, $subject, $message, $headers);
}
if ($result) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>Сообщение успешно отправлено!</strong> Вы можете закрыть это сообщение.
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}else{
echo '<div class="alert alert-danger alert-dismissible fade show" role="alert">
<strong>Сообщение не отправлено!</strong> Попробуйте еще раз.
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?> |
< ?php
$to = "<myemail@example.com>";
$email = $_POST['email'];
$subject = $_POST["theme"];
$page = 'Страница спасибо за комментарий';
$message = '
<html>
<body>
<center>
<table border=1 cellpadding=6 cellspacing=0 width=90% bordercolor="#DBDBDB">
<tr><td colspan=2 align=center bgcolor="#E4E4E4"><b>Информация</b></td></tr>
<tr>
<td><b>Откуда</b></td>
<td>'.$page.'</td>
</tr>
<tr>
<td><b>Адресат</b></td>
<td><a href="mailto:'.$email.'">'.$email.'</a></td>
</tr>
<tr>
<td><b>Тема</b></td>
<td>'.$subject.'</td>
</tr>
<tr>
<td><b>Сообщение</b></td>
<td>'.$_POST['message'].'</td>
</tr>
</table>
</center>
</body>
</html>';
$headers = "Content-type: text/html; charset=utf-8\r\n";
if (!empty($email) && !empty($subject) && !empty($message)) {
$result = mail($to, $subject, $message, $headers);
}
if ($result) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>Сообщение успешно отправлено!</strong> Вы можете закрыть это сообщение.
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}else{
echo '<div class="alert alert-danger alert-dismissible fade show" role="alert">
<strong>Сообщение не отправлено!</strong> Попробуйте еще раз.
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
Это готовый вариант. Все, что нужно сделать, это поменять на второй строчке email адрес, на который будет приходить письмо, а на пятой — указать откуда была отправка.
c 7 по 31 строки — шаблон HTML письма
32 — указание типа письма и его кодировка
33 — проверка на пустые поля
С 36 строки и до конца идет условие. Если произошла успешная отправка, то будет выведено уведомление об успешной отправке в виде зеленого алерта (бутстрап). В противном случае будет выведено сообщение об ошибке.
Что делать, если не приходят письма через mail PHP
Для начала проверить все ли правильно вы сделали. Скажу сразу, что с локального сервера никакой отправки вы не увидите. Данные просто записываются в лог-файл. Если вы это делаете на реальном хостинге, то ваш хостер мог заблокировать почтовый модуль из-за подозрения на рассылку спама. Так было у меня несколько раз, когда был взлом и распространили кучу вирусов. Попробуйте написать в поддержку. И как вы уже поняли, этот PHP скрипт не подходит для массовой рассылки, для таких целей используют SMTP, но об этом мы поговорим в другой раз. Так же в будущем рассмотрим способ отправки писем через Ajax, с вложениями (картинки, файлы и пр.) при помощи PHPMailer. И как обычно можете скачать готовое решение по прямой ссылке.
СКАЧАТЬ
Добавить комментарий