尝试使用PHP发送邮件时出现Laravel 5.5错误';s mail():预期响应代码为250,但收到代码为“;550“;

尝试使用PHP发送邮件时出现Laravel 5.5错误';s mail():预期响应代码为250,但收到代码为“;550“;,php,laravel,email,Php,Laravel,Email,我已将一个站点升级到Laravel 5.5,突然我无法再发送邮件,因为它会给我以下错误: production.ERROR:预期响应代码为250,但得到代码“550”,带有 消息“550未通过身份验证,请在中启用SMTP身份验证 电子邮件软件和550检查登录凭据 当我在.env中指定了邮件时,我不知道它为什么尝试使用SMTP,它似乎忽略了这一点: MAIL_DRIVER=mail MAIL_HOST= MAIL_PORT=25 MAIL_USERNAME=null MAIL_PASSWORD=n

我已将一个站点升级到Laravel 5.5,突然我无法再发送邮件,因为它会给我以下错误:

production.ERROR:预期响应代码为250,但得到代码“550”,带有 消息“550未通过身份验证,请在中启用SMTP身份验证 电子邮件软件和550检查登录凭据

当我在
.env
中指定了邮件时,我不知道它为什么尝试使用SMTP,它似乎忽略了这一点:

MAIL_DRIVER=mail
MAIL_HOST=
MAIL_PORT=25
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
这是全新安装的Laravel 5.5。我已经运行了
composer dumpautoload
artisan cache:clear

帮忙

编辑:

包含以下代码的简单PHP文件可以正常工作:

$to      = 'my_email_address@hotmail.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

exit();

最后,几天前我遇到了这个错误,这是一个身份验证错误的问题。这个错误本身就解决了这个问题。这是一个在凭据无效时出现的错误,在您的情况下,您还没有指定凭据,您还指定了您的
MAIL\u DRIVER=MAIL
MAIL
使用的凭据p的邮件功能,而laravel本身带有自己的邮件机制,我真的建议您使用它

邮件的geniune
.env
将如下所示(我使用了gmail的邮件功能)

应用程序密码访问

如果您查看了默认的
.env
文件,您可以看到类似于此的内容,建议您专门针对本地环境进行测试

MAIL_DRIVER=smtp
MAIL_HOST= smtp@mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=dfj233ddfk3 // you will get this as you signup for mailtrap
MAIL_PASSWORD=your_mailtrap_password
MAIL_ENCRYPTION=tls
更新1


如果您需要继续使用
PHP的mail()
您需要安装postfix或sendbox来发送邮件,或者我想检查一下,我认为这可能会帮助您Swiftmailer 6.0不再支持邮件驱动程序

使用laravel,您还更新了swiftmailer,因此邮件驱动程序不再工作

在哪里 他说:

PHP的
mail()
函数不安全

可以利用第五个参数在大多数Linux系统上执行任意代码。这主要是因为PHP错误地转义了shell参数。您可以在中阅读完整的解释

一些应用程序因此出现了安全问题,包括Roundcube webmailer、MediaWiki、PHPMailer、ZendFramework、SquirrelMail和Swiftmailer。以及您的应用程序。因此,请感谢它被删除并改用SMTP。您通常可以使用以下方式使用本地邮件服务器:

MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=25
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null
(如果您的服务器不接受本地未加密邮件,则可能需要使用
tls
加密。)

Laravel


Laravel的主要问题是,其文档中仍然提到了邮件驱动程序,并且只在文档中提到了swiftmailer 6.0是必需的,但这并不意味着您不能再使用邮件驱动程序。

2021更新


对于Laravel 7及以上版本,使用
MAIL\u MAILER=sendmail

什么是您的邮件驱动程序?邮件使用SMTP。这是应该的,因为这是发送邮件传输协议,在端口25上。唯一的区别是
MAIL
驱动程序使用PHP的
MAIL()
函数。确保它正在连接到本地主机(如果您正试图通过本地主机发送),并确保
config/mail.php
正在获取您的环境变量。删除用户名和密码的null不执行原始
mail()
如果您在测试PHP文件或
PHP artisan tinker
中使用该命令,则该命令可以工作?@ceejayoz是的,它可以-请参见编辑。我不明白。我在运行Laravel 5.2的其他网站上使用了与我的OP完全相同的.env配置,它工作正常。为什么说
MAIL\u DRIVER=MAIL
错误?MAIL使用PHP的MAIL。如果您完全使用laravel我真的建议laravel使用smtp的方法试试我的解决方案你会摆脱这个错误的,所以我现在被迫通过gmail或其他电子邮件提供商、帐户发送电子邮件?好的,谢谢你的输入,谢谢你的时间。可以。我也对你链接到的帖子上接受的答案发表了评论,那么我们来看看这是否带来了智慧!:)你明白了。这是当时我想不出来的答案。遗憾的是去年我问这个问题时你不在,我似乎记得这是一个特别令人沮丧的日子:D
MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=25
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null