我正在尝试在 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');
}
}
提前感谢您的帮助。
我通过将 mail.php 文件中的 Global“From”Address 替换为 .env 中
MAIL_USERNAME=
的相同输入解决了这个问题。
从错误消息来看,您可能正在通过 Gmail 的 SMTP 服务发送电子邮件。
您的
.env
应如下所示:
MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls
您还需要确保:
在我的例子中,我通过分配 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]
对我来说,解决方案是这个:
正确设置您选择的 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');
}
检查 config/mail.php 文件中的邮件地址。将其更改为 Gmail 以外的其他内容。
检查 config/mail.php 并确保所有变量都在 .env 文件中正确定义。例如,如果您 mail.php 有代码:
'from' => [
'address' => env('MAIL_FROM_ADDRESS'),
'name' => env('MAIL_FROM_NAME'),
],
并且 .env 中未定义
MAIL_FROM_ADDRESS
那么它可能会给出这样的错误
在我的例子中,发生错误是因为 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.
TL:DR - 将邮件发送到您的域中不存在的电子邮件可能会导致错误。
以上均与我本人的情况无关。我的问题的原因是我向不存在的内部帐户发送了一封电子邮件。
我的环境配置使用了
[email protected]
,并且正在尝试将邮件发送到不存在的 [email protected]
。
因此,当我从列表中删除带有
[email protected]
的用户时,错误得到修复
我有同样的问题,我修复了错误。
你必须这样定义。
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'),
],
如果您在 7.x Laravel 及更低版本上使用
MAIL_DRIVER=mailgun
,也会出现此错误。使用 MAIL_MAILER=mailgun
直到升级。