mail () неправильно отправляет электронные письма в учетную запись cPanel по умолчанию

Я купил домен у GoDaddy и связал его с Office 365 (через записи MX). Это означает, что в Outlook у меня есть несколько учетных записей электронной почты @ mydomain.com.

Примеры учетных записей Outlook:

Я могу отправлять / получать электронные письма через эти учетные записи.


Мой веб-сайт размещен на базовом веб-хостинге с установкой cPanel, что означает, что мне была предоставлена ​​учетная запись электронной почты «по умолчанию». Например: [email protected]. Я написал PHP-скрипт на своем веб-сайте (контактная форма), который отправляет электронные письма через mail() на [email protected].

Однако все электронные письма отправляются в учетную запись cPanel по умолчанию [email protected] вместо учетной записи Outlook [email protected].

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

Почему мой веб-сайт неправильно отправляет электронные письма в учетные записи Outlook? Спасибо за ваше время.


РЕДАКТИРОВАТЬ:

Запрошен сценарий:

<?php

    $uploadedFile = $statusMsg = '';

    if (isset($_POST['submit']))
    {
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $email = $_POST['email'];
        $phone = $_POST['phone'];
        $message = $_POST['message'];

        if(!empty($first_name) && !empty($last_name) && !empty($message))
        {
            if(filter_var($email, FILTER_VALIDATE_EMAIL))
            {
                $uploadStatus = 1;

                if(!empty($_FILES["attach"]["name"]))
                {
                    $targetDir = "uploads/";
                    $fileName = basename($_FILES["attach"]["name"]);
                    $targetFilePath = $targetDir . $fileName;
                    $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

                    if(move_uploaded_file($_FILES["attach"]["tmp_name"], $targetFilePath))
                    {
                        $uploadedFile = $targetFilePath;
                    }
                    else
                    {
                        $uploadStatus = 0;
                        $statusMsg = "Sorry, there was an error uploading your file.";
                    }
                }

                if($uploadStatus == 1)
                {
                    $name = $first_name.' '.$last_name;

                    $mailTo = "[email protected]";//changed to my real outlook account

                    $htmlContent = '<h2>Contact Request Submitted</h2>
                    <p><b>Name:</b> '.$name.'</p>
                    <p><b>Email:</b> '.$email.'</p>
                    <p><b>Phone:</b> '.$phone.'</p>
                    <p><b>Message:</b><br/>'.$message.'</p>';

                    // Header for sender info
                    $headers = "From: $name"." <".$email.">";


                    if(!empty($uploadedFile) && file_exists($uploadedFile))
                    {
                        // Boundary 
                        $semi_rand = md5(time()); 
                        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

                        // Headers for attachment 
                        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

                        // Multipart boundary 
                        $message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
                        "Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 

                        // Preparing attachment
                        if(is_file($uploadedFile)){
                            $message .= "--{$mime_boundary}\n";
                            $fp =    @fopen($uploadedFile,"rb");
                            $data =  @fread($fp,filesize($uploadedFile));
                            @fclose($fp);
                            $data = chunk_split(base64_encode($data));
                            $message .= "Content-Type: application/octet-stream; name=\"".basename($uploadedFile)."\"\n" . 
                            "Content-Description: ".basename($uploadedFile)."\n" .
                            "Content-Disposition: attachment;\n" . " filename=\"".basename($uploadedFile)."\"; size=".filesize($uploadedFile).";\n" . 
                            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                        }

                        $message .= "--{$mime_boundary}--";
                        $returnpath = "-f" . $email;

                        // Send email
                        $mail = mail($mailTo, "Contact Form Submission from ".$name, $message, $headers, $returnpath);

                        // Delete attachment file from the server
                        @unlink($uploadedFile);
                    }
                    else
                    {
                         // Set content-type header for sending HTML email
                        $headers .= "\r\n". "MIME-Version: 1.0";
                        $headers .= "\r\n". "Content-type:text/html;charset=UTF-8";

                        // Send email
                        $mail = mail($mailTo, 'Contact Form Submission from '.$name, $htmlContent, $headers); 
                    }

                    // If mail sent
                    if($mail)
                    {
                        $statusMsg = "Your message has been sent. Thanks!";
                    }
                    else
                    {
                        $statusMsg = 'Your contact request submission failed, please try again.';
                    }
                }

            }
            else
            {
                $statusMsg = 'Please enter a valid email address.';
            }
        }
        else
        {
            $statusMsg = "Please fill out the required information.";
        }
    }

?>

person mrg95    schedule 04.01.2019    source источник
comment
Нам нужны подробности, начиная с кода с отправкой почты.   -  person Oen44    schedule 04.01.2019
comment
Это большой скрипт с поддержкой вложений электронной почты, и он работает с любыми адресами, которые я ему даю. но обязательно отредактирую.   -  person mrg95    schedule 04.01.2019
comment
Поговорите со своим хозяином. Скорее всего, они настроили ваш домен для почты на том же сервере. Большинство MTA никогда даже не будут смотреть на DNS, если домен существует локально.   -  person Sammitch    schedule 04.01.2019
comment
Просто убедитесь, что сценарий правильный, чтобы исключить возможную причину проблемы.   -  person Oen44    schedule 04.01.2019
comment
PHP сам по себе не изменит место назначения, это должно происходить где-то в почтовой программе.   -  person Barmar    schedule 04.01.2019
comment
@ Sammitch А я этого не знал! Значит, он понимает, что пытается отправить в тот же домен, и сразу переходит к cPanel? Интересно.   -  person mrg95    schedule 04.01.2019
comment
В любом случае избегайте использования mail() в PHP по многим причинам. В идеале вы должны использовать шлюз электронной почты коммерческого уровня, такой как (и это не одобрение) SendGrid, у которого есть веб-служба для отправки электронной почты, которая более надежна, чем PHP mail(), или попытки использовать SMTP непосредственно из PHP. Например: sendgrid.com/docs/for- разработчикам / отправка-электронная почта /   -  person Dai    schedule 04.01.2019
comment
@ Дай Я планирую, но я хотел сначала научиться основам работать, понимаешь? И мой веб-хостинг блокирует порт 25, поэтому мои возможности ограничены.   -  person mrg95    schedule 04.01.2019
comment
@ mrg95 Если ваш хост блокирует порт 25, вы все равно не можете использовать mail(), если только он не использует что-то вроде каталога раскладки.   -  person Dai    schedule 04.01.2019
comment
Ваш веб-хост, вероятно, блокирует входящий порт 25. Это не должно мешать вам подключаться к удаленному хосту на 25 (или, что еще лучше, безопасный транспортный порт почты).   -  person Phil    schedule 04.01.2019
comment
@Dai Вызов mail() работает, когда электронные письма отправляются на другой адрес. Но они не позволяют отправлять почту из своего пакета веб-хостинга, как если бы это был почтовый сервер. Для этого мне понадобится их пакет VPS. По крайней мере, так они мне сказали.   -  person mrg95    schedule 04.01.2019


Ответы (1)


Решением было изменить параметр «Маршрутизация электронной почты» в cPanel на «Удаленный», чтобы все локальные электронные письма сначала проверяли записи MX.

введите здесь описание изображения

person mrg95    schedule 04.01.2019