[英]Laravel not sending email and not giving errors
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.过去四个月我一直在做一个项目,我对 Laravel 现在所面临的事情感到非常生气。 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!
除了不工作,它甚至不给我一个错误!
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:这是我发送 email 的 PHP 代码:
$data["mail_message"] = "Hello!";
Mail::send('emails.welcome', $data, function($message)
{
$message
->to('me@mydomain.com')
->from('info@otherdomain.com')
->subject('TEST');
});
First and foremost, go to the app/config/mail.php and change the driver to “mail”.首先,转到 app/config/mail.php 并将驱动程序更改为“mail”。 Also put the host as blank.
也把主机设为空白。
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.
我查看了 Jobs 表,我看到我所有的消息都在那里等待。 I ran
php artisan queue:work
to get the queue running/sending them.我运行
php artisan queue:work
让队列运行/发送它们。
You can check general E-Mail delivery by typing:您可以通过键入以下内容来检查一般电子邮件传送:
php artisan tinker
Mail::getSwiftMailer()->registerPlugin (
new Swift_Plugins_LoggerPlugin(new Swift_Plugins_Loggers_EchoLogger(false))
);
$to = 'youraddress@example.com';
Mail::raw('Testmail', function ($message) use($to) {
$message->to($to)->subject('Testmail');
});
And you will get even the output of the SMTP dialog.你甚至会得到 SMTP 对话框的输出。
Make sure to replace
$to
with your mail address to check if it arrives.确保将
$to
to 替换$to
您的邮件地址以检查它是否到达。
EDIT If this works and you still have problems with email delivery, you might have a queuing issue.编辑如果这有效并且您仍然遇到电子邮件传递问题,则您可能遇到排队问题。
The Fix That Worked For Me对我有用的修复
.env
file change APP_URL=127.0.01
to APP_URL=http://localhost
.env
文件中,将APP_URL=127.0.01
更改为APP_URL=http://localhost
config:cache
, then restart server.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.我之前已经正确设置了我的 SMTP 详细信息,但是即使在执行 config:cache config:clear 并重新启动我的服务器之后,电子邮件也没有发送。 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.
之后,我将它与我的工作 Laravel 应用程序进行了比较,唯一的区别是 127.0.0.1 -> http://localhost ,所以我将其更改为最后一次尝试,并且它起作用了。
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;
}
}
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.您可以使用 SMTP。 Hope It will help.
希望它会有所帮助。
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.似乎“.env”文件只是覆盖了“config/mail.php”文件。 You can just remove same lines from the ".env" file for use "config/mail.php" configuration options.
您可以从“.env”文件中删除相同的行以使用“config/mail.php”配置选项。
Configuration file:配置文件:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=abc@gmail.com
MAIL_PASSWORD=xxxxxxxxxx
MAIL_ENCRYPTION=tls
Then run themake: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:更多细节:
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
Use Mail::to instead of Mail::send使用 Mail::to 而不是 Mail::send
Check my answer below在下面检查我的答案
Change the driver in your config file to 'smtp' from 'mail'.将配置文件中的驱动程序从“mail”更改为“smtp”。 I guess that should work.
我想这应该有效。
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]);
Firstle go to your project root on cmd and run this cmd -首先在 cmd 上转到您的项目根目录并运行此 cmd -
php artisan route:cache (clear your routes cache)
php artisan cache:clear (clear your application cache)
php artisan config:cache (clear your config cache)
php artisan view:clear (clear your view (blade) cache)
Go to .env file转到 .env 文件
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=YourUserName
MAIL_PASSWORD=YourPassword
MAIL_ENCRYPTION=tls
Go to project root and use this cmd转到项目根目录并使用此 cmd
php artisan make:mail WelcomeUserVerifyMail
after that goto App\\mail\\WelcomeUserVerifyMail add these line -之后转到 App\\mail\\WelcomeUserVerifyMail 添加这些行 -
use Illuminate\Mail\Mailable;
public $mailData;
public function __construct(array $mailData)
{
$this->mailData = $mailData;
}
public function build()
{
return $this->from(env('MAIL_FROM'))->subject('Test')->view('email-template.email'); //view load
}
In your controller where you use mail functionality -在您使用邮件功能的控制器中 -
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeUserVerifyMail;
// Send Verify email
$mailData = ['name' => "Shubham Gupta", 'verifyButtonUrl' => $verifyButtonUrl];
Mail::to('shubham@yopmail.com')->send(new WelcomeUserVerifyMail($mailData));
I got same problem.我遇到了同样的问题。
Mail was no sending because I didn't set the recipient for email.邮件没有发送,因为我没有设置电子邮件的收件人。
Do not forget to set it.不要忘记设置它。
$mail->to('example@example.com');
i had the same issue !我遇到过同样的问题 ! and then i noticed that my boss made changes to config/mail.php.
然后我注意到我的老板对 config/mail.php 进行了更改。 Here is what you need :
这是你需要的:
set Mail variables in your .env file :在 .env 文件中设置邮件变量:
MAIL_DRIVER=smtp
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
in config/mail.php, make sure you have something => env('ENV_VARIABLE_NAME', 'default_value')
在 config/mail.php 中,确保你有
something => env('ENV_VARIABLE_NAME', 'default_value')
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
'log_channel' => env('MAIL_LOG_CHANNEL'),
If you have ssl issues, add to config/mail.php :如果您有 ssl 问题,请添加到 config/mail.php :
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
]
Good luck everyone.大家好运。
Not a technical answer but it fixed my issue.不是技术答案,但它解决了我的问题。
If your using GMAIL to check the incoming mail just make sure you check your SPAM folder.如果您使用 GMAIL 检查收到的邮件,请确保检查您的垃圾邮件文件夹。
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.我过去四个月来一直在做一个项目,对Laravel现在面临的事情我感到非常生气。 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!
除了不工作外,它甚至都不会给我一个错误!
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('me@mydomain.com')
->from('info@otherdomain.com')
->subject('TEST');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.