邮件
配置
Laravel 提供了一个干净、简单的 API,封装了流行的 SwiftMailer 库。邮件配置文件是 app/config/mail.php,包含选项,允许您更改 SMTP 主机、端口和凭据,以及为通过该库发送的所有消息设置全局 from 地址。您可以使用任何您希望的 SMTP 服务器。如果您希望使用 PHP 的 mail 函数发送邮件,可以在配置文件中将 driver 更改为 mail。还可以使用 sendmail 驱动。
API 驱动
Laravel 还包括 Mailgun 和 Mandrill HTTP API 的驱动。这些 API 通常比 SMTP 服务器更简单、更快速。这两个驱动都需要将 Guzzle 4 HTTP 库安装到您的应用程序中。您可以通过在 composer.json 文件中添加以下行来将 Guzzle 4 添加到您的项目中:
"guzzlehttp/guzzle": "~4.0"Mailgun 驱动
要使用 Mailgun 驱动,请在 app/config/mail.php 配置文件中将 driver 选项设置为 mailgun。接下来,如果您的项目中尚不存在 app/config/services.php 配置文件,请创建一个。确保它包含以下选项:
'mailgun' => array(
'domain' => 'your-mailgun-domain',
'secret' => 'your-mailgun-key',
),Mandrill 驱动
要使用 Mandrill 驱动,请在 app/config/mail.php 配置文件中将 driver 选项设置为 mandrill。接下来,如果您的项目中尚不存在 app/config/services.php 配置文件,请创建一个。确保它包含以下选项:
'mandrill' => array(
'secret' => 'your-mandrill-key',
),日志驱动
如果您的 app/config/mail.php 配置文件的 driver 选项设置为 log,所有电子邮件将被写入您的日志文件,而不会实际发送给任何收件人。这主要用于快速、本地调试和内容验证。
基本用法
可以使用 Mail::send 方法发送电子邮件消息:
Mail::send('emails.welcome', array('key' => 'value'), function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('欢迎!');
});传递给 send 方法的第一个参数是应作为电子邮件正文使用的视图名称。第二个是要传递给视图的数据,通常作为关联数组,其中数据项可以通过 $key 在视图中使用。第三个是一个闭包,允许您指定电子邮件消息的各种选项。
NOTE
一个 $message 变量始终会传递给电子邮件视图,并允许内联嵌入附件。因此,最好避免在视图负载中传递 message 变量。
您还可以指定一个纯文本视图以补充 HTML 视图:
Mail::send(array('html.view', 'text.view'), $data, $callback);或者,您可以使用 html 或 text 键仅指定一种类型的视图:
Mail::send(array('text' => 'view'), $data, $callback);您还可以在电子邮件消息上指定其他选项,例如任何抄送或附件:
Mail::send('emails.welcome', $data, function($message)
{
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
$message->attach($pathToFile);
});在向消息附加文件时,您还可以指定 MIME 类型和/或显示名称:
$message->attach($pathToFile, array('as' => $display, 'mime' => $mime));NOTE
传递给 Mail::send 闭包的消息实例扩展了 SwiftMailer 消息类,允许您调用该类上的任何方法来构建您的电子邮件消息。
嵌入内联附件
将内联图像嵌入到电子邮件中通常很麻烦;然而,Laravel 提供了一种方便的方法来将图像附加到电子邮件中并检索适当的 CID。
在电子邮件视图中嵌入图像
<body>
这里是一张图片:
<img src="<?php echo $message->embed($pathToFile); ?>">
</body>在电子邮件视图中嵌入原始数据
<body>
这里是一张来自原始数据的图片:
<img src="<?php echo $message->embedData($data, $name); ?>">
</body>请注意,$message 变量始终由 Mail 类传递给电子邮件视图。
队列邮件
队列邮件消息
由于发送电子邮件消息可能会大幅延长应用程序的响应时间,许多开发人员选择将电子邮件消息排队以进行后台发送。Laravel 通过其内置的 统一队列 API 使这变得简单。要排队邮件消息,只需在 Mail 类上使用 queue 方法:
Mail::queue('emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('欢迎!');
});您还可以使用 later 方法指定希望延迟发送邮件消息的秒数:
Mail::later(5, 'emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('欢迎!');
});如果您希望指定要推送消息的特定队列或“管道”,可以使用 queueOn 和 laterOn 方法:
Mail::queueOn('queue-name', 'emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('欢迎!');
});邮件与本地开发
在开发发送电子邮件的应用程序时,通常希望禁用来自本地或开发环境的消息发送。为此,您可以调用 Mail::pretend 方法,或在 app/config/mail.php 配置文件中将 pretend 选项设置为 true。当邮件发送器处于 pretend 模式时,消息将被写入应用程序的日志文件,而不是发送给收件人。
启用假邮件模式
Mail::pretend();