在本地服务器上,我可以轻松地使用mailgun发送邮件....
一切正常....
但是,在将Laravel应用程序带到Web服务器之后,邮件系统不再起作用了。出现此错误。
我的.env文件
APP_ENV=production
APP_KEY=base64:8K9zZjAKdpoBIpMeW53K24FxrKi38dX/EnUe9+5cMKk=
APP_DEBUG=true APP_LOG_LEVEL=debug
APP_URL=http://pathofmywebsite.com
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=username
DB_PASSWORD=password
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=mailgun
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
MAILGUN_DOMAIN=my.mailgundomain.com
MAILGUN_SECRET=key-9cebd121c16c037597c004c67fd9d0a3
PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
在我的控制器中 -
function send(Request $request) {
$value = 'value';
Mail::send('path.to.mail.template', ['value' => $value], function ($message) use ($request)
{
$message->from('jakariablaine120@gmail.com', 'JakariaBlaine');
$message->to($request->email);
});
}
答案 0 :(得分:1)
此错误通常是由于服务器问题。重新启动Apache可能会解决您的问题。在我的情况下,数字海洋是一个问题,因为我的服务器意外下降。当您的服务器启动并正常运行时,它会从本地系统发送电子邮件。
答案 1 :(得分:0)
对于确保此功能有效的其他要点...
确保在.env中定义以下所有内容
MAIL_FROM_NAME="Company Name"
MAIL_FROM_ADDRESS=enquiries@company.com
MAILGUN_DOMAIN=mg.company.com
MAILGUN_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxx-yyyyyyyy-zzzzzzz"
MAILGUN_ENDPOINT="api.eu.mailgun.net"
请注意,如果MailGun建议您设置一个子域来使用其系统(即mg.yourcompany.co),那么即使您实际上不会以以下方式发送电子邮件,也需要将其定义为Mailgun域变量:来自子域。
一些至关重要的事情很可能是造成您问题的原因;确保不要将端点配置为MailGun网站提供的URL。在MailGun网站中,他们将“基本API网址”称为:
https://api.mailgun.net/v3/mg.company.com(您的Mailgun定义的域后缀到其api URL的末尾)
但是,Laravel正在根据您定义的端点和域变量来编译API URL本身。如果将端点定义为它们提供的URL,则最终将导致一个完全无效的URL,这将导致Guzzle错误。
确保使用正确的端点。如果您在mailgun中将域定义为EU内部,请确保在端点设置中正确定义了该域。
如果仍然存在问题,请通过运行确保当前的Guzzle已安装到您的项目中
composer require guzzlehttp/guzzle
即使我遇到此错误并且在一定程度上仍在工作,但实际上并没有在composer.json文件中定义它,而且是最新的。
我还澄清了config / services.php文件中的设置,并确保那里的设置正确。请注意,我个人安装的文件带有与Laravel手册不同的语法。默认情况下,它们写为:
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
],
但是我重写了ENV(),使其格式如下:
'mailgun' => [
'domain' => 'MAILGUN_DOMAIN',
'secret' => 'MAILGUN_SECRET',
'endpoint' => 'api.eu.mailgun.net',
],