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

时间:2017-10-03 17:13:18

标签: php laravel email

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

  

production.ERROR:预期的响应代码250,但代码为“550”,带有   消息“550-Not authenticated,请启用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 dumpautoloadartisan 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();

3 个答案:

答案 0 :(得分:2)

Swiftmailer 6.0不再支持邮件驱动程序

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

Here is the swiftmailer commit that removed the mail driver in 6.0.

It was deprecated since Swiftmailer 5.4.5 with this commit.

Here is a long discussion about why it was removed,其中 the most useful comment说:

PHP的mail()函数不安全

可以利用第五个参数在大多数Linux系统上执行任意代码。这主要是因为PHP错误地转义了shell参数。您可以在"Why mail() is dangerous in PHP" by RIPS中阅读完整的说明。

因此,一些应用程序存在安全问题,包括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的主要问题是它的文档仍然提到了邮件驱动程序in the Laravel 5.7 documentation,并且只在他们的upgrade notes for 5.5中提到需要swiftmailer 6.0,但这并不意味着您不能使用邮件驱动程序不再。

答案 1 :(得分:0)

最后,几天前我遇到了这个错误,结果证明是身份验证错误的问题。这个错误本身就清除了一个问题,即当凭据无效时会出现错误,在您的情况下,您还没有指定凭据,而您指定的MAIL_DRIVER = mail mail使用了php&# 39;邮件功能,而laravel本身附带自己的邮件机制我真的建议你使用它。

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

MAIL_DRIVER=smtp
MAIL_HOST= smtp@gmail.com
MAIL_PORT=25/587/465/2525 (any one)
MAIL_USERNAME=youremail@gmail.com
MAIL_PASSWORD=your app password
MAIL_ENCRYPTION=tls

对于应用密码,请访问here

如果您查看了默认.env文件,则可以看到类似这样的内容,它会与mailtrap.io一起提供,建议您专门针对本地环境进行测试。

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's mail(),则需要安装postfix或sendbox才能为此follow these instructions发送邮件,或者我想检查this SO post我认为这可能会对您有所帮助

答案 2 :(得分:0)

2021 年更新

对于 Laravel 7 及更高版本,使用 MAIL_MAILER=sendmail