【问题标题】:Expected response code 354 but got code "503"预期响应代码 354,但得到代码“503”
【发布时间】:2020-01-20 23:23:18
【问题描述】:

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

预期的响应代码为 354,但得到代码“503”,消息为“503-所有 RCPT 命令均被拒绝,并出现以下错误:503-”您的 IP:202.133.88.147:标题 503-中不允许您的域 gmail.com从“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');
    }
}

提前感谢您的帮助。

【问题讨论】:

  • 您是否仔细检查了 smtp 端口?没有加密的默认是25
  • 您不能从@gmail 帐户从 gmail 以外的任何地方发送邮件。
  • @I.Antonov:错误“错误 503:有效的 RCPT 命令必须在 DATA 之前”通常发生在您的电子邮件服务器未正确验证您的 SMTP(外发邮件)连接时。正如@mdexp 所说,您可能设置错误的端口号。另外我认为你的MAIL_ENCRYPTION 设置应该是MAIL_ENCRYPTION= 而不是MAIL_ENCRYPTION=null
  • @mdexp 我试过 smtp 端口 25,结果还是一样。
  • @KoalaYeung 尝试 MAIL_ENCRYPTION=null,结果相同

标签: php laravel smtp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    根据错误消息,您可能正在通过 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 登录。

    【讨论】:

      【解决方案3】:

      对我来说,解决方案是this:

      正确设置您选择的 SMTP 或邮件驱动程序后。发送带有与您的主机名不同的“mail-from”的邮件,例如“no-reply@differenthost.com”并且您的主机名是 yourhost.com 邮件将始终通过,但是,发送带有“邮件”的邮件-from" as such: "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');
      }
      

      【讨论】:

        【解决方案4】:

        检查 config/mail.php 文件中的邮件地址。将其更改为 gmail 以外的其他内容。

        【讨论】:

          【解决方案5】:

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

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

          MAIL_FROM_ADDRESS 没有在.env 中定义,那么它可能会出现这样的错误

          【讨论】:

            【解决方案6】:

            在我的情况下,发生错误是因为 env 文件中的变量存在区分大小写的问题。

            The names of environment variables are case-sensitive.
            

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

            By convention, environment variables are in uppercase.
            

            【讨论】:

              【解决方案7】:

              在我的情况下,我通过将 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
              

              【讨论】:

                【解决方案8】:

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

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

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

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

                【讨论】:

                  猜你喜欢
                  • 2019-08-12
                  • 1970-01-01
                  • 2020-05-22
                  • 1970-01-01
                  • 2017-07-23
                  • 2017-08-03
                  • 2021-02-02
                  • 1970-01-01
                  • 2015-09-16
                  相关资源
                  最近更新 更多