如何使用“数组”邮件驱动程序发送邮件?

时间:2018-09-05 04:11:24

标签: php laravel laravel-5

从5.7版开始,Laravel建议在测试过程中使用array驱动程序进行邮件处理:

不幸的是,the documentation对此驱动程序一无所知。根据{{​​3}},驱动程序将所有消息存储在内存中,而没有实际发送它们。在单元测试期间如何获取已存储的“已发送”消息(以便对其进行检查)?

3 个答案:

答案 0 :(得分:2)

致电app()->make('swift.transport')->driver()->messages()。返回值是Swift_Mime_SimpleMessage个对象的集合。

完整的PHPUnit测试示例:

public function testEmail()
{
    Mail::to('user@example.com')->send(new MyMail);

    $emails = app()->make('swift.transport')->driver()->messages();
    $this->assertCount(1, $emails);
    $this->assertEquals(['user@example.com'], array_keys($emails[0]->getTo()));
}

答案 1 :(得分:1)

我基于Finesse的答案的自定义断言。

protected function assertMailSentTo($user, $expected = 1)
{
    $messages = app('swift.transport')->messages();

    $filtered = $messages->filter(function ($message) use ($user) {
        return array_key_exists($user->email, $message->getTo());
    });

    $actual = $filtered->count();

    $this->assertTrue(
        $expected === $actual,
        "Sent {$actual} messages instead of {$expected}."
    );
}

答案 2 :(得分:1)

使用Laravel 7+或出现错误CREATE TABLE `simzsy`.`membership` ( `memberid` INT NOT NULL , `name` TEXT NOT NULL , `surname` TEXT NOT NULL , `dateofbirth` DATE NOT NULL , `id` LONGTEXT NOT NULL , `contact` LONGTEXT NOT NULL , `datejoined` DATE NOT NULL , `membertype` ENUM NOT NULL , PRIMARY KEY ( `memberid` ) ) ENGINE = MYISAM 时,可使用此命令获取通过阵列驱动程序发送的电子邮件列表:

memberid