预期的响应代码为354,但代码为“ 503”

时间:2019-09-19 21:41:09

标签: php laravel smtp

我正在尝试在Laravel项目中创建“联系我们”表单,但遇到以下错误,想知道如何解决。

  

预期的响应代码354,但是得到的代码为“ 503”,并显示消息“ 503-拒绝所有RCPT命令,并出现以下错误:503-”您的IP:202.133.88.147:标头503-中不允许您的域gmail.com From“ 503有效RCPT命令必须位于DATA”

之前

以下是我的 .ENV 文件

MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=26
MAIL_USERNAME=support@mydomain.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=null

控制器

  public function contactus()
    {
        return view('contactus');
    }

    public function sendContactMail(Request $request)
    {
        Mail::to('support@mydomain.com')->send(new ContactUs($request));
        Session::flash('success','Message Sent Successfully!');
        return redirect()->back();
    }

ContactUs.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class ContactUs extends Mailable
{
    protected $contactdata;
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(\Illuminate\Http\Request $request)
    {
        $this->contactdata = $request;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from($this->contactdata->email)
                    ->subject($this->contactdata->subject)
                    ->with([
                        'message'   =>  $this->contactdata->message,
                        'fullname'  =>  $this->contactdata->first_name.' '.$this->contactdata->last_name
                    ])
                    ->markdown('emails.contactus');
    }
}

预先感谢您的帮助。

8 个答案:

答案 0 :(得分:3)

从错误消息中,您可能正在通过Gmail的SMTP服务发送电子邮件。

您的.env应该如下所示:

MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=587
MAIL_USERNAME=support@mydomain.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls

还需要确保:

  1. 您的域mydomain.com已正确设置为使用GSuite的Gmail。您无法设置Gmail的SMTP来发送不在GSuite或Gmail帐户之外的域的电子邮件。

  2. 如果您的帐户已启用2-step-verificaton,则需要App Password进行SMTP登录。

答案 1 :(得分:2)

我通过将mail.php文件中的全局“发件人”地址替换为MAIL_USERNAME=在.env处的相同输入来解决了这个问题。

答案 2 :(得分:0)

检查config / mail.php文件中的邮件地址。将其更改为除gmail之外的其他名称。

答案 3 :(得分:0)

检查 config / mail.php 并确保在.env文件中正确定义了所有变量。例如,如果您 mail.php 具有以下代码:

    'from' => [
         'address' => env('MAIL_FROM_ADDRESS'),
         'name' => env('MAIL_FROM_NAME'),
    ],

并且{.env中没有定义MAIL_FROM_ADDRESS,则可能会给出这样的错误

答案 4 :(得分:0)

对我来说,解决方案是this

正确设置您选择的SMTP或邮件驱动程序之后。发送带有不同于您的主机名的“邮件发件人”的邮件,例如“ no-reply@differenthost.com”,而您的主机名是yourhost.com。该邮件将始终通过,但是,发送带有“邮件”的邮件-from”,例如:“ no-reply@yourhost.com”,可能与您的.env邮件身份验证不同,即“ MAIL_USERNAME”:如果尚未在托管服务器上设置该邮件帐户,则将抛出错误c-面板。

我的.env文件具有:

MAIL_FROM_ADDRESS=foo@bar.com

但是我的代码有:

public function build()
{
    return
      $this
        ->from('myaddress@sometherdomain.com')
        ->view('emails.clientNotification');
}

此问题已解决:

public function build()
{
    return
      $this
        ->from(env('MAIL_FROM_ADDRESS'))
        ->view('emails.clientNotification');
}

答案 5 :(得分:0)

就我而言,发生此错误是由于 env 文件中的变量区分大小写。

The names of environment variables are case-sensitive.

在我的.env文件中,我有一个变量mail_username=*******,但在mail.php中访问的mail_username文件uppercase变量中,像这样'username' => env('MAIL_USERNAME') 。这就是发生此错误的原因。

By convention, environment variables are in uppercase.

答案 6 :(得分:0)

就我而言,我通过将 MAIL_FROM_ADDRESS 分配为 MAIL_USERNAME 来解决该问题。虽然我不知道解释。

MAIL_MAILER=smtp
MAIL_HOST=mail.domain.com
MAIL_PORT=465
MAIL_USERNAME=hello@domain.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=hello@domain.com

答案 7 :(得分:0)

TL:DR - 将邮件发送到您的域中不存在的电子邮件可能会导致错误。

以上都与我自己的情况无关。我的问题的原因是我向内部帐户发送了一封电子邮件,该帐户不存在。

我的 env 配置使用了 MAIL_FROM_ADDRESS=hello@domain.com,我正在尝试向不存在的 user@domain.com 发送邮件。

所以当我从列表中删除带有 user@domain.com 的用户时,错误得到修复