首页 > 解决方案 > /usr/libexec/postfix/smtp 在 macOS 上不使用 Laravel 发送邮件

问题描述

我有一个想要发送电子邮件的 Laravel 8 项目。我在 macOS 上开发它,我想测试它,但它不起作用,但不会给出任何错误。(我用 替换了敏感数据********

.env

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=********@gmail.com
MAIL_PASSWORD=********
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=********@gmail.com
MAIL_FROM_NAME="${APP_NAME}"

注意:我验证了这些设置,还测试了其他有效的 SMTP 设置。所以这不是这个文件中的配置问题

邮件.php

/// ...

    'default' => env('MAIL_MAILER', 'mail'),

/// ...

    'mailers' => [
        'smtp' => [
            'transport' => 'mail',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'auth_mode' => null,
        ],

/// ...

    ],

/// ...

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
            resource_path('views/emails'),
        ],
    ],

/// ...

邮件控制器.php

namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller as Controller;
use Illuminate\Support\Facades\Mail;

class MailController extends Controller
{

    public function testMail(Request $request)
    {
        $email = '********@live.com';
        $data = [
            'title' => 'Test mail'
        ];

        Mail::send(['html' => 'emails.testMail'], $data,
            function ($message) use ($email, $data) {
                $message->to($email)
                ->subject($data['title']);
        });

        $response = [
            'error' => 0,
            'to' => $email,
            'data' => $data,
        ];
        return response()->json($response, 200);
    }
}

注意:在resources/views/emails/testMail.blade.php有一个仅包含 HTML 的刀片模板,用于测试目的。我还添加了适当的 GET 路由。

当我在 Postman 中访问端点时,我得到

{
    "error": 0,
    "to": "********@live.com",
    "data": {
        "title": "Test mail"
    }
}

Little Snitch 突然出现,询问我是否要允许/usr/libexec/postfix/smtp访问smtp.gmail.com,所以我知道电话通过了。我授予该进程访问任何服务器的所有权限并重试,但邮件永远不会到达我的目的地。

是的,我检查了垃圾邮件文件夹。是的,我检查了其他凭据。是的,我测试了两个帐户之间的手动交付。是的,我在完全禁用 Little Snitch 的情况下进行了测试。是的,我检查了 laravel.log 并没有显示任何内容。

我注意到,当我在.env文件中输入错误信息时,我不会从 Laravel 收到任何错误(更改时除外MAIL_MAILER)。

如何从 SMTP 进程中获取输出以找出问题所在?我该如何解决这个问题?

标签: phplaravelmacossmtplaravel-8

解决方案


推荐阅读