У меня есть сервер Amazon EC2 с Ubuntu 16.04.
Я создал свой проектный сайт с бесплатным доменом от Freenom.com и бесплатным SSL от Cloudflare.com - мой сайт работает хорошо.
На сервере в параметре входящих правил я добавил следующие типы протоколов: «http = 80», «https = 443», «ssh = 22», «smtp = 25».
Я установил 'mailutils', настроил 'postfix' и другие вещи, после этого в терминале я могу отправлять электронные письма на любой адрес электронной почты, но мое действие формы по сценарию PHP не отправляет письма с моего сайта ...
Пример формы страницы сайта:
`
if (isset($_POST["name"])) {
$name = htmlspecialchars($_POST["name"]);
$error_name = 1;
}
else {
$name = '';
}
if (isset($_POST["phone"])) {
$telefone = htmlspecialchars($_POST["phone"]);
$error_tel = 1;
}
else {
$telefone = 0;
}
if(empty($name)) {
$error_name = -1;
}
if ($telefone == 0 || !intval($telefone))
{
$error_tel = -1;
}
if ($error_name == -1 || $error_tel == -1) $mail_sent = 0;
else {
$sender = "root@mysite.com"; //senders name Сервер-отправитель
$recipient = "recipient@mail.com"; //recipient получатель письма (Вы)
$mail_body = "Name: " . $name; //name отправителя
$phone_body = "Mobile phone: " . $telefone; //phone body отправителя
$subject = "Order from " . $name; //subject тема письма и от кого (ФИО)
$header = "From: ". $sender . " \r\n"; //optional headerfields
ini_set('SMTP', 'localhost');
if(mail($recipient, $subject, $mail_body, $phone_body, $header)) {
$mail_sent = 1;
} else $mail_sent = -1;
}
?> `
`
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>MySite.com</title>
<div>
<form action="" method="post">
<label>
<input type="text" name="name" placeholder="Your name"/>
<span>
<?php
if ($error_name == -1) echo "<h5><span style = 'color: red;'>Name?</span></h5>";
else if ($error_tel == -1) echo "<h5><span style = 'color: red;'>Type name again!</span></h5>";
?>
</span>
</label>
<label>
<input type="tel" name="phone" placeholder="tel: 701-1234567" pattern="[0-9]{3}-[0-9]{7}"/>
<span>
<?php
if ($error_tel == -1) echo "<h5><span style = 'color: red;'>Your phone?</span></h5>";
else if ($error_name == -1) echo "<h5><span style = 'color: red;'>Type phone again!</span></h5>";
?>
</span>
</label>
<button>Call back</button>
<?php
if ($mail_sent == 1) echo "<h5><span style = 'color: blue;'>Thank you, we call you soon!</span></h5>";
else if ($mail_sent == -1) echo "<h5><span style = 'color: red;'>Some error with emailing, try to call us!</span></h5>
<h4>8-701-1234567</h4>";
?>
</form>
</div>
`
Шаги установки postfix на сервере:
Я настроил 'mailutils' на сервер через SSH с помощью этой команды: "sudo apt-get install mailutils".
- Конфигурация Postfix:
Выбран «Интернет-сайт» (будет общий тип почтовой конфигурации).
В качестве системного почтового имени моего сервера введите мой домен.
Затем внесли изменения в файл 'main.cf' командой: "sudo nano /etc/postfix/main.cf"
- Нашел строку 'myhostname' и набрал имя моего домена следующим образом: "myhostname = mysite.com".
- Нашел строку 'mydestination' и удалил все, кроме этого: "mydestination =".
- Нашел строку 'inet_interfaces' и набрал: "inet_interfaces = loopback-only".
Также изменил имя моего хоста командой: "sudo nano /etc/hostname".
- Типизированный домен моего сайта.
Затем создал файл командой: "sudo nano /etc/postfix/virtual".
- Введите мой почтовый адрес как root и postmaster, чтобы отправлять все электронные письма с сервера на мой почтовый адрес:
root mymailaddress@yandex.ru
почтмейстер mymailaddress@yandex.ru
Затем добавляется в файл main.cf (для отображения файла с адресом электронной почты, куда отправляются электронные письма root) командой: "sudo nano /etc/postfix/main.cf".
- Добавлены следующие строки текста в конце файла: "virtual_alias_maps = hash: / etc / postfix / virtual".
Преобразованный «виртуальный» файл для postfix по команде: «sudo postmap /etc/postfix/virtual".
Перезагрузил мой хост-сервер командой: "sudo reboot".
После этого проверяется отправка почты с терминала по следующей команде:
1. эхо "Привет, мужчины!" | почта "Привет, тема!" anyemailaddress@ya.ru
или же
2. sendmail myemail@gmail.com
и это работает, но когда я пытаюсь отправить электронную почту, используя форму PHP моего сайта - он не отправляет электронную почту ...!
Затем я попытался отредактировать файл php.ini командой: "sudo nano /opt/lampp/etc/php.ini".
- нашел строку 'sendmail_path' и написал это: sendmail_path = "/ usr / sbin / sendmail -t -i -f"
Кто-нибудь знает, почему это не работа?
Какие файлы конфигурации сервера мне нужно отредактировать, чтобы моя форма PHP отправляла электронные письма?