Победил Postfix t send PHP mail () функция из формы

У меня есть postfix, чтобы отправлять мне электронные письма с моего сервера через консоль, используя пример тела echo " "| mail -s "пример темы" мой @ адрес электронной почты, но когда я пытаюсь отправить электронное письмо с моего веб-сайта через mail () , функцию php, я не получаю письмо. Я новичок в веб-серверах и почтовых серверах, и, насколько я понимаю, мне нужно, чтобы работал postfix mts, чтобы я мог использовать функцию mail () .

Я понятия не имею, почему мои формы не отправляются, и в файле /var/log/mail.log ничего не отображается, чтобы помочь мне понять, что происходит не так. Я проверил свою контактную форму и сам php на наличие ошибок (которые я получил из шаблона начальной загрузки, но с тех пор изменил) и не могу найти там никаких проблем.

Мне бы пригодилась помощь в поиске следующих шагов, которые я мог бы предпринять, чтобы выяснить, почему электронные письма не отправляются, и есть ли какие-либо журналы в другом месте, которые указывают на потенциальные ошибки.

Для удобства я включил свои функции и форму php:

<?php
    function send(){
        if(empty($_POST['name'])        ||
           empty($_POST['email'])       ||
           empty($_POST['phone'])       ||
           empty($_POST['message']) ||
           empty($_POST['company'])   ||
           !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
           {
            echo "No arguments Provided!";
            return false;
           }

        $name = $_POST['name'];
        $email_address = $_POST['email'];
        $phone = $_POST['phone'];
        $message = $_POST['message'];
        $company = $_POST['company'];

        // Create the email and send the message
        $to = 'my@email';
        $email_subject = "Website Contact Form:  $name";
        $email_body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email_address\n\nCompany: $company\n\nPhone: $phone\n\nMessage:\n$message";
        $headers = "From: noreply@nickborisenko.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
        $headers .= "Reply-To: $email_address"; 
        mail($to,$email_subject,$email_body,$headers);
        return true;
    }
    if(isset($_POST['send'])){
        send();
    }        
?>


<!-- Some html -->


<form name="sentMessage" method="post" id="contactForm" novalidate>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Name</label>
                            <input type="text" class="form-control" placeholder="Name" name="name" id="name" required data-validation-required-message="Please enter your name.">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Email Address</label>
                            <input type="email" class="form-control" placeholder="Email Address" name="email" id="email" required data-validation-required-message="Please enter your email address.">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Phone Number</label>
                            <input type="tel" class="form-control" placeholder="Phone Number" name="phone" id="phone" required data-validation-required-message="Please enter your phone number.">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Company</label>
                            <input type="text" class="form-control" placeholder="Company" name="company" id="company">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Message</label>
                            <textarea rows="5" class="form-control" placeholder="Message" name="message" id="message" required data-validation-required-message="Please enter a message."></textarea>
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <br>
                    <div id="success"></div>
                    <div class="row">
                        <div class="form-group col-xs-12">
                            <button type="submit" name="send" class="btn btn-default">Send</button>
                        </div>
                    </div>
                </form>

и мой файл конфигурации postfix в /etc/postfix/main.cf :

smtpd_banner = ESMTP $mail_name (Ubuntu)
biff = no

append_dot_mydomain = no

readme_directory = no

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = nickborisenko.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = nickborisenko.com, ubuntu-512mb-nyc3-01, localhost.localdomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
mydomain = nickborisenko.com
smtp_generic_maps = hash:/etc/postfix/generic

Редактировать: Эти журналы взяты из мой apache2 / access.log:

136.167.247.240 - - [28/Mar/2016:17:35:15 -0400] "GET /contact.php HTTP/1.1" 200 2592 "http://nickborisenko.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"
::1 - - [28/Mar/2016:17:35:23 -0400] "OPTIONS * HTTP/1.0" 200 125 "-" "Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.14 (internal dummy connection)"
136.167.247.240 - - [28/Mar/2016:17:35:28 -0400] "POST /mail/contact_me.php HTTP/1.1" 200 247 "http://nickborisenko.com/contact.php" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"

Это единственные журналы, в которых я могу найти это изменение, когда пытаюсь отправить контактную форму, и они, похоже, задействованы, хотя я не вижу никаких ошибок ...

0
задан 29 March 2016 в 00:44
1 ответ

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

<?php
    function validate(){
        if(empty($_POST['name'])        ||
           empty($_POST['email'])       ||
           empty($_POST['phone'])       ||
           empty($_POST['message']) ||
           empty($_POST['company'])   ||
           !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
           {
            echo "No arguments Provided!";
            return false;
           }else{
            return true;
           }
    }

    function send(){
        $name = $_POST['name'];
        $email_address = $_POST['email'];
        $phone = $_POST['phone'];
        $message = $_POST['message'];
        $company = $_POST['company'];

        // Create the email and send the message
        $to = 'my@email';
        $email_subject = "Website Contact Form:  $name";
        $email_body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email_address\n\nCompany: $company\n\nPhone: $phone\n\nMessage:\n$message";
        $headers = "From: noreply@nickborisenko.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
        $headers .= "Reply-To: $email_address"; 
        mail($to,$email_subject,$email_body,$headers);
        return true;
    }
    if(isset($_POST['send'])){
        send();
    }        
?>

<form name="sentMessage" onsubmit="return validate()" method="post" id="contactForm" novalidate>
1
ответ дан 4 December 2019 в 16:39

Теги

Похожие вопросы