邮件
配置
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
在视图中使用。第三个是一个闭包,允许您指定电子邮件消息的各种选项。
一个 $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));
传递给 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();