如何配置 Laravel mail.php 以使用内置邮件功能?

Posted

技术标签:

【中文标题】如何配置 Laravel mail.php 以使用内置邮件功能?【英文标题】:How to configure Laravel mail.php to use built-in mail function? 【发布时间】:2017-09-17 10:39:24 【问题描述】:

我需要通过mail() php 函数发送电子邮件。 我在某处读到我必须将config/mail.php 中的driver 参数更改为sendmail

默认情况下是这样的:

'driver' => env('MAIL_DRIVER', 'smtp'),

现在,它看起来像这样:

'driver' => 'sendmail',

也试过这个:

'driver' => 'mail',

但是,mail() 函数仍然不起作用。我需要改变什么?

【问题讨论】:

【参考方案1】:

您必须在 .env 文件中设置您的邮件配置。在这里,您必须设置所有邮件驱动程序和所有详细信息。请参阅此文档https://laravel.com/docs/5.0/mail

【讨论】:

您发布的链接解释了如何配置一堆 API 驱动程序,但没有解释如何配置 sendmail,这可能是 OP 发布此问题的原因。【参考方案2】:

你可以设置你的邮件配置.env文件,比如

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=youremail@gmail.com
MAIL_PASSWORD="password"
MAIL_ENCRYPTION=tls

还在 config/mail.php 中设置配置,例如:

'from' => ['address' => 'youremail@gmail.com', 'name' => 'Test'],

然后你可以清除缓存:

php artisan cache:clear
php artisan config:cache
php artisan cache:clear

【讨论】:

这些不是使用 PHP 的 mail() 函数的正确设置。该功能不需要用户名和电子邮件。如果您想从其他服务器(如 Gmail)发送电子邮件,则使用这些设置。 @wmacYes- 谢谢!我的问题与 OP 完全相同,令人难以置信的是,我现在浪费了多少时间,而这方面的信息却很少。 如何在 Laravel 5.5 中使用 PHP 的 mail() 函数?可能吗? 是问题。我一直被告知要更改为 MAIL_DRIVER=smtp 并输入我的 gmail 帐户凭据,但我不希望这样!我对此投了反对票,因为它没有回答问题。 链接到我基本上在问同样事情的线程:***.com/a/46550390/521392 我用自己的邮件服务器(使用 smtp)设置了所有内容,但它无法正常工作。直到我将MAIL_ENCRYPTION 的值设置为tls 而不是默认值null... 这不适用于 php 的 sendmail 配置。这是一个 SMTP。【参考方案3】:

要使用在localhost 上运行的电子邮件服务器,您的.env 文件应如下所示(PHP 的mail 函数不需要用户名或密码)

MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=25
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null

然后,更新配置缓存:

php artisan config:cache

【讨论】:

非常感谢朋友!!!我已经搜索这个答案很长时间了,这很糟糕,laravel 官方文档没有提供这个信息。你是最棒的,@lbel! 谢谢,就像@Vaha 我在任何地方都找不到这个。我已经搜索了几个小时,但没有任何地方说你应该像这样使用它。 php artisan config:cache 部分至关重要,不要像我一样忘记它! php artisan config:clear 是我认为应该运行的实际命令 对于本地主机,您可以像这样设置MAIL_DRIVER=log,它将打印日志文件中的所有邮件。很有用!【参考方案4】:

要和 mail() PHP 函数一样,在大多数情况下,你应该按照以下方式配置 Laravel:

使用 sendmail,在 .env:

MAIL_DRIVER=sendmail

如果您使用的是 Larvel 7 或更高版本

MAIL_MAILER=sendmail

Laravel 7 将 MAIL_DRIVER 替换为 MAIL_MAILER

不需要主机、用户、密码、端口和加密。

此时,您可能会检查它是否已经工作,但有时还需要下一步。

在 config/mail.php 中设置一个新的 .env 选项:

'sendmail' => env('MAIL_SENDMAIL', '/usr/sbin/sendmail -bs')

在 .env 中设置 sendmail 路径。您可以在 phpinfo() 中查看sendmail_path,但通常是这个:

MAIL_SENDMAIL='/usr/sbin/sendmail -t -i'

【讨论】:

这是正确的答案。特别是关于在我的情况下将选项设置为“sendmail -t -i”的花絮。我讨厌必须使用这个基本的 php 邮件功能,但在我的一个项目中,我不得不......谢谢。 如果您要在那里进行编辑,则需要在config/mail.php 中为'sendmail' => env('MAIL_SENDMAIL', '/usr/sbin/sendmail -bs'),。不要忘记引号和最后的逗号 哦!谢谢克里斯,我刚刚在我的回答中修复了它。 请注意,sendmaildriver 要求 PHP 的 proc_open() 函数出于安全原因在“php.ini”中使用 disabled_functions 时未被禁用。 对于 Laravel 7 及更高版本,请使用 MAIL_MAILER=sendmail

以上是关于如何配置 Laravel mail.php 以使用内置邮件功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何将邮件数据从服务提供商传递到 laravel 4 中的 config/mail.php

Laravel 邮件配置

Laravel5使用QQ邮箱发送邮件配置

如何在使用 Laravel 在控制器中发送邮件之前更改邮件配置?

Laravel 5 中的配置

使用Laravel框架发送邮件