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

问题描述 投票:0回答:10

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

预期响应代码为 354,但收到代码“503”,并显示消息“503-所有 RCPT 命令均因以下错误而被拒绝:503-“您的 IP:202.133.88.147:标头 503-From 中不允许使用您的域 gmail.com” 503 有效的 RCPT 命令必须先于 DATA "

以下是我的.ENV文件

MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=26
[email protected]
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=null

控制器

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

    public function sendContactMail(Request $request)
    {
        Mail::to('[email protected]')->send(new ContactUs($request));
        Session::flash('success','Message Sent Successfully!');
        return redirect()->back();
    }

联系我们.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');
    }
}

提前感谢您的帮助。

php laravel smtp
10个回答
13
投票

我通过将 mail.php 文件中的 Global“From”Address 替换为 .env 中

MAIL_USERNAME=
的相同输入解决了这个问题。


4
投票

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

您的

.env
应如下所示:

MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls

您还需要确保:

  1. 您的域

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

  2. 如果您的帐户启用了两步验证,您需要一个应用程序密码用于 SMTP 登录。


3
投票

在我的例子中,我通过分配 MAIL_FROM_ADDRESS 等于 MAIL_USERNAME 解决了这个问题。虽然我不知道解释。

MAIL_MAILER=smtp
MAIL_HOST=mail.domain.com
MAIL_PORT=465
[email protected]
MAIL_PASSWORD=password
MAIL_ENCRYPTION=ssl
[email protected]

2
投票

对我来说,解决方案是这个

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

我的 .env 文件有:

[email protected]

但是我的代码有:

public function build()
{
    return
      $this
        ->from('[email protected]')
        ->view('emails.clientNotification');
}

这解决了它:

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

0
投票

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


0
投票

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

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

并且 .env 中未定义

MAIL_FROM_ADDRESS
那么它可能会给出这样的错误


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.

0
投票

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

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

我的环境配置使用了

[email protected]
,并且正在尝试将邮件发送到不存在的
[email protected]

因此,当我从列表中删除带有

[email protected]
的用户时,错误得到修复


0
投票

我有同样的问题,我修复了错误。

  1. 您所要做的就是使用服务器设置的同一电子邮件。例如,您无法从 gmail 中使用用户,因为 gmail 不是您服务器上的域。
  • 你必须这样定义。

       public function build()
    
    
    {
      return $this->from('[email protected]')}
    

-或 2.您可以从您放置的任何地方删除它,然后将其([email protected])添加到您的.env文件中,然后像这样编辑您的config/mail.php

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

0
投票

如果您在 7.x Laravel 及更低版本上使用

MAIL_DRIVER=mailgun
,也会出现此错误。使用
MAIL_MAILER=mailgun
直到升级。

© www.soinside.com 2019 - 2024. All rights reserved.