# 邮件发送
### [](https://octobercms.com/docs/services/mail#sending-mail)发送邮件
要发送消息,请使用外观`send`上的方法,该方法`Mail`接受三个参数。第一个参数是用于查找[邮件视图](https://octobercms.com/docs/services/mail#mail-views)或[邮件模板](https://octobercms.com/docs/services/mail#mail-templates)的唯一*邮件代码*。第二个参数是您希望传递给视图的数据数组。第三个参数是一个回调,它接收消息实例,使您可以自定义邮件的收件人,主题和其他方面:[](https://octobercms.com/docs/services/mail#mail-views)[](https://octobercms.com/docs/services/mail#mail-templates)`Closure`
~~~
// These variables are available inside the message as Twig
$vars = ['name' => 'Joe', 'user' => 'Mary'];
Mail::send('acme.blog::mail.message', $vars, function($message) {
$message->to('admin@domain.tld', 'Admin Person');
$message->subject('This is a reminder');
});
~~~
由于`name`在上面的示例中传递了包含键的数组,因此可以使用以下Twig标记在电子邮件视图中显示值:
~~~
{{ name }}
~~~
> **注意:**您应该避免`message`在邮件中传递变量,该变量始终会传递并允许[附件](https://octobercms.com/docs/services/mail#attachments)的[内联嵌入](https://octobercms.com/docs/services/mail#attachments)。
#### 快速发送
十月还包括一个称为的替代方法`sendTo`,可以简化邮件的发送:
~~~
// Send to address using no name
Mail::sendTo('admin@domain.tld', 'acme.blog::mail.message', $params);
// Send using an object's properties
Mail::sendTo($user, 'acme.blog::mail.message', $params);
// Send to multiple addresses
Mail::sendTo(['admin@domain.tld' => 'Admin Person'], 'acme.blog::mail.message', $params);
// Alternatively send a raw message without parameters
Mail::rawTo('admin@domain.tld', 'Hello friend');
~~~
中的第一个参数`sendTo`用于收件人可以采用不同的值类型:
| 类型 | 描述 |
| --- | --- |
| 串 | 单个收件人地址,未定义名称。 |
| 数组 | 多个收件人,其中数组键是地址,值是名称。 |
| 目的 | 单个收件人对象,其中*email*属性用于地址,*名称*可选用于名称。 |
| 采集 | 如上所述,收件人对象的集合。 |
的完整签名`sendTo`如下:
~~~
Mail::sendTo($recipient, $message, $params, $callback, $options);
~~~
* `$recipient`如上定义。
* `$message`是原始发送的模板名称或消息内容。
* `$params`模板内部提供的变量数组。
* `$callback`会使用一个参数`send`(方法描述的消息生成器)被调用(可选,默认为null)。如果不是可调用的值,则代替下一个options参数。
* `$options`作为数组传递的自定义发送选项(可选)
`$options`支持以下自定义发送
* **queue**指定是对消息进行排队还是直接发送(可选,默认为false)。
* **BCC**指定是否添加收件人作为密件抄送或经常要地址(默认为false)。
#### 建立讯息
如前所述,该`send`方法的第三个参数是`Closure`允许您在电子邮件本身上指定各种选项。使用此闭包,您可以指定消息的其他属性,例如复本,盲目复本等:
~~~
Mail::send('acme.blog::mail.welcome', $vars, function($message) {
$message->from('us@example.com', 'October');
$message->to('foo@example.com')->cc('bar@example.com');
});
~~~
这是`$message`消息生成器实例上可用方法的列表:
~~~
$message->from($address, $name = null);
$message->sender($address, $name = null);
$message->to($address, $name = null);
$message->cc($address, $name = null);
$message->bcc($address, $name = null);
$message->replyTo($address, $name = null);
$message->subject($subject);
$message->priority($level);
$message->attach($pathToFile, array $options = []);
// Attach a file from a raw $data string...
$message->attachData($data, $name, array $options = []);
// Get the underlying SwiftMailer message instance...
$message->getSwiftMessage();
~~~
> **注意:**传递给`Mail::send`Closure的消息实例扩展了[SwiftMailer](http://swiftmailer.org/)消息类,使您可以调用该类上的任何方法来构建电子邮件。
#### 邮寄纯文本
默认情况下,`send`假定提供给该方法的视图包含HTML。但是,通过将数组作为方法的第一个参数`send`传递,除了HTML视图外,您还可以指定要发送的纯文本视图:
~~~
Mail::send(['acme.blog::mail.html', 'acme.blog::mail.text'], $data, $callback);
~~~
或者,如果只需要发送纯文本电子邮件,则可以使用`text`数组中的键进行指定:
~~~
Mail::send(['text' => 'acme.blog::mail.text'], $data, $callback);
~~~
#### 邮寄已解析的原始字符串
`raw`如果您希望直接通过电子邮件发送原始字符串,则可以使用该方法。Markdown将解析此内容。
~~~
Mail::raw('Text to e-mail', function ($message) {
//
});
~~~
此外,Twig将解析此字符串,如果您希望将变量传递到此环境,请改用`send`方法,将内容作为`raw`键。
~~~
Mail::send(['raw' => 'Text to email'], $vars, function ($message) {
//
});
~~~
#### 邮寄原始字符串
如果传递包含`text`或`html`键的数组,这将是发送邮件的显式请求。不使用布局或降价解析。
~~~
Mail::raw([
'text' => 'This is plain text',
'html' => '<strong>This is HTML</strong>'
], function ($message) {
//
});
~~~
### [](https://octobercms.com/docs/services/mail#attachments)附件
要将附件添加到电子邮件中,请使用传递给Closure`attach`的`$message`对象上的方法。该`attach`方法接受文件的完整路径作为其第一个参数:
~~~
Mail::send('acme.blog::mail.welcome', $data, function ($message) {
//
$message->attach($pathToFile);
});
~~~
在将文件附加到消息时,您还可以通过将an`array`作为第二个参数传递给`attach`方法来指定显示名称和/或MIME类型:
~~~
$message->attach($pathToFile, ['as' => $display, 'mime' => $mime]);
~~~
### [](https://octobercms.com/docs/services/mail#inline-attachments)内联附件
#### 将图像嵌入邮件内容
将嵌入式图像嵌入到电子邮件中通常很麻烦;但是,有一种简便的方法可以将图像附加到电子邮件并检索适当的CID。若要嵌入嵌入式图像,请在电子邮件视图中`embed`的`message`变量上使用方法。请记住,该`message`变量可用于所有邮件视图:
~~~
<body>
Here is an image:
<img src="{{ message.embed(pathToFile) }}">
</body>
~~~
如果您打算使用排队的电子邮件,请确保文件的路径是绝对路径。为此,您可以简单地使用[应用过滤器](https://octobercms.com/docs/markup/filter-app):
~~~
<body>
Here is an image:
{% set pathToFile = 'storage/app/media/path/to/file.jpg' | app %}
<img src="{{ message.embed(pathToFile) }}">
</body>
~~~
#### 将原始数据嵌入邮件内容
如果您已经有想要嵌入到电子邮件中的原始数据字符串,则可以`embedData`对`message`变量使用方法:
~~~
<body>
Here is an image from raw data:
<img src="{{ message.embedData(data, name) }}">
</body>
~~~
### [](https://octobercms.com/docs/services/mail#queueing-mail)排队邮件
#### 排队邮件
由于发送邮件消息会大大延长应用程序的响应时间,因此许多开发人员选择将消息排队等待后台发送。使用内置的[统一队列API](https://octobercms.com/docs/services/queues)可以轻松实现。要使邮件排队,请使用外观`queue`上的方法`Mail`:
~~~
Mail::queue('acme.blog::mail.welcome', $data, function ($message) {
//
});
~~~
此方法将自动处理将作业推入队列以在后台发送邮件的情况。当然,在使用此功能之前,您将需要[配置队列](https://octobercms.com/docs/services/queues)。
#### 延迟的消息排队
如果您希望延迟发送排队的电子邮件,则可以使用该`later`方法。首先,只需将您希望延迟发送消息的秒数作为方法的第一个参数传递:
~~~
Mail::later(5, 'acme.blog::mail.welcome', $data, function ($message) {
//
});
~~~
#### 推送到特定队列
如果希望指定要在其上推送消息的特定队列,则可以使用`queueOn`和`laterOn`方法来这样做:
~~~
Mail::queueOn('queue-name', 'acme.blog::mail.welcome', $data, function ($message) {
//
});
Mail::laterOn('queue-name', 5, 'acme.blog::mail.welcome', $data, function ($message) {
//
});
~~~
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图