邮件里可以包含附件,用户收到邮件以后,可以下载邮件里的附件文件 .. 先在我们应用的文件页面上添加一个邮件小图标 .. 按一下它,可以把当前显示的文件作为附件发送到用户的邮箱里面 ..
回到项目 .. 先复制一下 post.show 里的这个邮件小图标的代码 .. 再找到 file 里的 show 这个视图 .. 把这个邮件小图标放在这个视图里面 .. 再修改一下 ..
给 share.email 路由的参数,这个 type 可以设置成 file ..
然后再打开 ShareController 控制器 .. 在 email 方法的这个 switch 里面,再添加一种情况 .. 如果类型是 file ..
添加一个 file .. await ... 用一下 File 模型的 find .. 资源 id 是 params.id ... 在文件的顶部可以再导入这个 File 模型 .. 添加一个 File ... 模型是 App/Models/File ..
组织文件路径的时候需要用到 Helpers,再添加一个 Helpers ..
继续编辑 email 方法 .. 得到文件以后可以再得到文件的路径 .. 添加一个 filePath .. 组织一下这个路径 .. 用一下 Helpers publicPath ... 上传的文件是在公开资源目录下面的 uploads 里面 .. 后面加上文件的名字 .. file.file_name ..
下面再去发送邮件 .. await .. 用一下 Mail 的 raw .. 邮件内容可以是一个简单的文件名 .. file.client_name ... 一个回调 .. 有个 message 参数 .. 再组织一下发送的邮件 .. to ,邮件的接收地址是 user.email ... from .. 发件人是 Env.get() SITE_MAIL ..
打开项目的 .env 文件,里面可以添加一个 SITE_MAIL .. 它的值就是发件人的邮件地址 ..
再把需要用的这个 Env 在文件顶部导入进来 ...
继续再编辑一下 message ... 添加一个 subject,邮件的主题可以用一个文件名 .. file 里的 client_name .. 在邮件上添加附件,可以使用 attach 方法 .. 先把文件的地址告诉这个方法 .. 这里就是 filePath ... 后面可以再添加一个配置选项 .. 里面添加一个 filename ,设置一下附件的名字 .. file 里的 client_name ...
试验
再回到浏览器试一下 ... 刷新一下这个文件页面 ... 这里会出现一个邮件小图标 ... 按一下它 ... 提示 id 需要是 string ...
这个是因为在 file.show 视图里面,我们给 share.email 路由传递的这个 id 参数有问题 .. 它的值应该是 file 的 id ...
回来再试一下 ... 按一下邮件小图标 ..
会把页面上显示的文件作为邮件的附件发送到当前登录的用户 ...
在 mailhog 里,可以找到应用发送的邮件 .. 邮件里面会包含一个文件附件 ..