php Laravel 不发送电子邮件也不报错
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23980979/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Laravel not sending email and not giving errors
提问by Daniel Barde
I've been on a project for the past four months now and I am really pissed at what am facing with Laravel right now. It's not sending emails; I set it up to use the mail driver and put in the right code, but it seems not to work at all. Besides not working, it doesn't even give me an error!
过去四个月我一直在做一个项目,我对 Laravel 现在面临的情况感到非常生气。它不是发送电子邮件;我将它设置为使用邮件驱动程序并输入正确的代码,但它似乎根本不起作用。除了不工作,它甚至不给我一个错误!
Here is my configuration:
这是我的配置:
return array(
/*
|--------------------------------------------------------------------------
| Mail Driver
|--------------------------------------------------------------------------
|
| Laravel supports both SMTP and PHP's "mail" function as drivers for the
| sending of e-mail. You may specify which one you're using throughout
| your application here. By default, Laravel is setup for SMTP mail.
|
| Supported: "smtp", "mail", "sendmail"
|
*/
'driver' => 'mail',
/*
|--------------------------------------------------------------------------
| SMTP Host Address
|--------------------------------------------------------------------------
|
| Here you may provide the host address of the SMTP server used by your
| applications. A default option is provided that is compatible with
| the Postmark mail service, which will provide reliable delivery.
|
*/
'host' => 'smtp.mailgun.org',
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to delivery e-mails to
| users of your application. Like the host we have set this value to
| stay compatible with the Postmark e-mail application by default.
|
*/
'port' => 587,
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => array('address' => null, 'name' => null),
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => 'tls',
/*
|--------------------------------------------------------------------------
| SMTP Server Username
|--------------------------------------------------------------------------
|
| If your SMTP server requires a username for authentication, you should
| set it here. This will get used to authenticate with your server on
| connection. You may also set the "password" value below this one.
|
*/
'username' => null,
/*
|--------------------------------------------------------------------------
| SMTP Server Password
|--------------------------------------------------------------------------
|
| Here you may set the password required by your SMTP server to send out
| messages from your application. This will be given to the server on
| connection so that the application will be able to send messages.
|
*/
'password' => null,
/*
|--------------------------------------------------------------------------
| Sendmail System Path
|--------------------------------------------------------------------------
|
| When using the "sendmail" driver to send e-mails, we will need to know
| the path to where Sendmail lives on this server. A default path has
| been provided here, which will work well on most of your systems.
|
*/
'sendmail' => '/usr/sbin/sendmail -bs',
/*
|--------------------------------------------------------------------------
| Mail "Pretend"
|--------------------------------------------------------------------------
|
| When this option is enabled, e-mail will not actually be sent over the
| web and will instead be written to your application's logs files so
| you may inspect the message. This is great for local development.
|
*/
'pretend' => false,
);
Here is my PHP code for sending email:
这是我发送电子邮件的 PHP 代码:
$data["mail_message"] = "Hello!";
Mail::send('emails.welcome', $data, function($message)
{
$message
->to('[email protected]')
->from('[email protected]')
->subject('TEST');
});
回答by Issam Ben Ameur
First and foremost, go to the app/config/mail.php and change the driver to “mail”. Also put the host as blank.
首先,转到 app/config/mail.php 并将驱动程序更改为“mail”。也把主机设为空白。
回答by Justin
In my scenario email was being queued so that is why I got no output. I had forgotten I set email to queue by default. I looked in the Jobs table I saw all my messages waiting in there. I ran php artisan queue:work
to get the queue running/sending them.
在我的场景中,电子邮件正在排队,这就是为什么我没有输出的原因。我忘记了我默认将电子邮件设置为队列。我查看了 Jobs 表,看到我所有的消息都在那里等待。我跑去php artisan queue:work
让队列运行/发送它们。
回答by B. R. N. Rajoriya
Go to .env file and set
转到 .env 文件并设置
MAIL_DRIVER=smtp
Or you can set driver from the config files. Go to file Laravel 4 : app/config/mail.php Laravel 5 : config/mail.php and set
或者您可以从配置文件中设置驱动程序。转到文件 Laravel 4 : app/config/mail.php Laravel 5 : config/mail.php 并设置
'driver' => 'smtp',
You may use SMTP. Hope It will help.
您可以使用 SMTP。希望它会有所帮助。
回答by Alex
It could be because you have a ".env" file, in the Laravel project root, with mail server configuration like this:
可能是因为您在 Laravel 项目根目录中有一个“.env”文件,邮件服务器配置如下:
...
MAIL_DRIVER=mail
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
It seems the ".env" file just overrides "config/mail.php" file. You can just remove same lines from the ".env" file for use "config/mail.php" configuration options.
似乎“.env”文件只是覆盖了“config/mail.php”文件。您可以从“.env”文件中删除相同的行以使用“config/mail.php”配置选项。
回答by Greggers
The Fix That Worked For Me
对我有用的修复
- In your
.env
file changeAPP_URL=127.0.01
toAPP_URL=http://localhost
- Set your SMTP details correctly, and do
config:cache
, then restart server.
- 在您的
.env
文件中更改APP_URL=127.0.01
为APP_URL=http://localhost
- 正确设置您的 SMTP 详细信息,然后执行
config:cache
,然后重新启动服务器。
After that my mail started sending!
之后我的邮件开始发送!
How I Arrived At That Fix
我是如何解决这个问题的
I had previously set my SMTP details up correctly, but even after doing config:cache config:clear and restarting my server, the emails were not sending. After that I compared it to my working Laravel App, and the only difference was the 127.0.0.1 -> http://localhost, so I changed that as a last ditch attempt, and it worked.
我之前已经正确设置了我的 SMTP 详细信息,但是即使在执行 config:cache config:clear 并重新启动我的服务器之后,电子邮件也没有发送。之后,我将它与我的工作 Laravel 应用程序进行了比较,唯一的区别是 127.0.0.1 -> http://localhost,所以我将其更改为最后一次尝试,并且它起作用了。
回答by Ramadanoski Julie
A solution for notifications not sent via 'mail'
不通过“邮件”发送通知的解决方案
https://laravel.com/docs/5.7/notifications#customizing-the-recipient
https://laravel.com/docs/5.7/notifications#customizing-the-recipient
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the mail channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForMail($notification)
{
return $this->email_address;
}
}
回答by user10731718
Configuration file:
配置文件:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=xxxxxxxxxx
MAIL_ENCRYPTION=tls
Then run the make:mail
command:
然后运行make:mail
命令:
public function build(Request $request)
{
return $this->view('mail['variable'=>$request->message])->to($request->to);
}
Routes:
路线:
Route::post('send', 'mailController@send');
Route::get('email', 'mailController@email');
Controller:
控制器:
public function send()
{
Mail::send(new name());
}
public function email()
{
return view('email');
}
View:
看法:
<body><br><h1>Send Mail</h1><form method="post" action="send">to:<input type="text" name="to">message: <input type="text" name="message" cols="30" rows="10"></input><input type="submit" name="submit" value="send"></form></body>
Mail:
邮件:
<body><h1>Welcome, to this mail system, </h1>{!! $variable !!}</body>
Thing to remember: The message
variable is a build-in variable and will generate error so use any other variable instead of message
.
要记住的事情:该message
变量是一个内置变量,会产生错误,因此请使用任何其他变量而不是message
.
More details:
更多细节:
回答by Suresh Bala
Change the driver in your config file to 'smtp' from 'mail'. I guess that should work.
将配置文件中的驱动程序从“mail”更改为“smtp”。我想这应该有效。
回答by Muhammad Ibnuh
I finally got it to work. If you're using mailgun, add this information below to your .env
file
我终于让它工作了。如果您使用的是 mailgun,请将以下信息添加到您的.env
文件中
MAILGUN_DOMAIN=your.mailgundomain.com
MAILGUN_SECRET=key-yourmailgunkey
and then run
然后运行
php artisan config:clear
回答by mart
For Laravel 6, if verification email is not send anymore:
对于 Laravel 6,如果不再发送验证邮件:
in user.php add
在 user.php 添加
use Illuminate\Foundation\Auth\User as Authenticatable;
and
和
class User extends Authenticatable implements MustVerifyEmail
and in routes/web.php
并在路由/ web.php
Auth::routes(['verify' => true]);