Как настроить сервер AWS EC2 Ubuntu 16.04 с установленным mailutils (postfix) для отправки электронной почты от mysite с помощью действия формы php? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть сервер 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 на сервере:

  1. Я настроил 'mailutils' на сервер через SSH с помощью этой команды: "sudo apt-get install mailutils".

    • Конфигурация Postfix: Выбран «Интернет-сайт» (будет общий тип почтовой конфигурации). В качестве системного почтового имени моего сервера введите мой домен.
  2. Затем внесли изменения в файл 'main.cf' командой: "sudo nano /etc/postfix/main.cf"

    • Нашел строку 'myhostname' и набрал имя моего домена следующим образом: "myhostname = mysite.com".
    • Нашел строку 'mydestination' и удалил все, кроме этого: "mydestination =".
    • Нашел строку 'inet_interfaces' и набрал: "inet_interfaces = loopback-only".
  3. Также изменил имя моего хоста командой: "sudo nano /etc/hostname".

    • Типизированный домен моего сайта.
  4. Затем создал файл командой: "sudo nano /etc/postfix/virtual".

    • Введите мой почтовый адрес как root и postmaster, чтобы отправлять все электронные письма с сервера на мой почтовый адрес: root mymailaddress@yandex.ru почтмейстер mymailaddress@yandex.ru
  5. Затем добавляется в файл main.cf (для отображения файла с адресом электронной почты, куда отправляются электронные письма root) командой: "sudo nano /etc/postfix/main.cf".

    • Добавлены следующие строки текста в конце файла: "virtual_alias_maps = hash: / etc / postfix / virtual".
  6. Преобразованный «виртуальный» файл для postfix по команде: «sudo postmap /etc/postfix/virtual".

  7. Перезагрузил мой хост-сервер командой: "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 отправляла электронные письма?

...