当我尝试使用 PHP + Swiftmailer 发送电子邮件时出现错误:“501 5.5.4 域名无效”

Jos*_*hua 5 php email swiftmailer

我正在编写一个非常简单的联系表格,允许蓝领工人通过我们的内联网提交安全问题通知。联系表单以 HTML 格式显示,并要求输入姓名、发件人电子邮件以及要发送的消息。它总是发送到我们的安全电子邮件。

服务器和端口正确。它是一个 Exchange 2010 服务器,我们使用 TSL。服务器配置为能够“匿名”接收电子邮件。我可以通过 telnet 命令进行连接,但当我尝试通过评论框发送邮件时,收到“501 5.5.4 域名无效”错误。

define("EMAIL_SUBJECT", "Safety Concerns");     
    define("EMAIL_TO", "email");        

    // SMTP Configuration
    define("SMTP_SERVER", 'server');                
    define("SMTP_PORT", 25);                                

    // define("UPLOAD_DIR", '/var/www/tmp/');           // Default php upload dir

    // main method. It's the first method called
    function main($contactForm) {

        // Checks if something was sent to the contact form, if not, do nothing
        if (!$contactForm->isDataSent()) {
            return;
        }

        // validates the contact form and initialize the errors
        $contactForm->validate();

        $errors = array();

        // If the contact form is not valid:
        if (!$contactForm->isValid()) {
            // gets the error in the array $errors
            $errors = $contactForm->getErrors();

        } else {
            // If the contact form is valid:
            try {               
                // send the email created with the contact form
                $result = sendEmail($contactForm);              

                // after the email is sent, redirect and "die".
                // We redirect to prevent refreshing the page which would resend the form
                header("Location: ./success.php");
                die();
            } catch (Exception $e) {
                // an error occured while sending the email. 
                // Log the error and add an error message to display to the user.
                error_log('An error happened while sending email contact form: ' . $e->getMessage());
                $errors['oops'] = 'Ooops! an error occured while sending your email! Please try again later!';
            }

        }

        return $errors;
    }

    // Sends the email based on the information contained in the contact form
    function sendEmail($contactForm) {
        // Email part will create the email information needed to send an email based on 
        // what was inserted inside the contact form
        $emailParts = new EmailParts($contactForm);

        // This is the part where we initialize Swiftmailer with 
        // all the info initialized by the EmailParts class
        $emailMessage = Swift_Message::newInstance()
        ->setSubject($emailParts->getSubject())
        ->setFrom($emailParts->getFrom())
        ->setTo($emailParts->getTo())
        ->setBody($emailParts->getBodyMessage());

        // If an attachment was included, add it to the email
        // if ($contactForm->hasAttachment()) {
        //  $attachmentPath = $contactForm->getAttachmentPath();
        //  $emailMessage->attach(Swift_Attachment::fromPath($attachmentPath));
        //}

        // Another Swiftmailer configuration..
        $transport = Swift_SmtpTransport::newInstance(SMTP_SERVER, SMTP_PORT, 'tls');
        $mailer = Swift_Mailer::newInstance($transport);
        $result = $mailer->send($emailMessage);
        return $result;
    }

    // Initialize the ContactForm with the information of the form and the possible uploaded file.
    $contactForm = new ContactForm($_POST, $_FILES);

    // Call the "main" method. It will return a list of errors. 
    $errors = main($contactForm);

    require_once("./views/contactForm.php");
Run Code Online (Sandbox Code Playgroud)

小智 2

答案很简单,如果邮件主机字段定义了 FQDN(xx.yy.com)而不是 IP 地址,则服务器应该能够解析 FQDN。否则会触发名为无效域名的错误。

希望这可以帮助!