mail () неправильно отправляет письма на учетную запись cPanel по умолчанию - PullRequest
0 голосов
/ 04 января 2019

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

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

  • sales@mydomain.com
  • contact @ mydomain.com
  • matt@mydomain.com

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


Мой веб-сайт размещен на базовом веб-хостинге сУстановка cPanel, что означает, что мне дали учетную запись электронной почты «по умолчанию».Например: default@mydomain.com.Я написал скрипт PHP на своем веб-сайте (контактную форму), который отправляет электронные письма через mail() на contact@mydomain.com.

Однако все электронные письма отправляются на учетную запись cPanel по умолчанию default@mydomain.com вместо учетной записи Outlook contact@mydomain.com.

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

Почему мой веб-сайт неправильно отправляет письма в учетные записи 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 = "contact@mydomain.com";//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.";
        }
    }

?>

1 Ответ

0 голосов
/ 04 января 2019

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

enter image description here

...