我正在尝试在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');
}
}
预先感谢您的帮助。
答案 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
还需要确保:
您的域mydomain.com
已正确设置为使用GSuite的Gmail。您无法设置Gmail的SMTP来发送不在GSuite或Gmail帐户之外的域的电子邮件。
如果您的帐户已启用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
的用户时,错误得到修复