action mailbox
Action Mailer Basics和Action Mailbox Basics:邮件系统。
https://edgeguides.rubyonrails.org/action_mailbox_basics.html#exim
https://edgeguides.rubyonrails.org/action_mailer_basics.html
案例:
//在rails6 app分支 10238 rails action_mailbox:install //会生成一个app/mailboxes/application_mailbox.rb//同时生成3个数据库table 10240 rails g scaffold User email name 10241 rails g scaffold Discussion title 10242 rails g scaffold Comment user:references discussion:references body:text 10243 rails db:migrate10245 rails g mailbox Replies
上面代码使用rails6的新特性:action mailbox。它用于导航接收的email给控制器mailboxes。
它可以使用Postmark等常见API库。也可以直接通过它内建的Exim等APi来处理接收的email。
接收的email,通过使用action job来异步导航到一个或多个指定的mailboxes。
使用方法
安装-》配置api-》生成一个mailbox-》使用。具体见
继续:
class ApplicationMailbox < ActionMailbox::Base# routing /something/i => :somewhererouting /reply\+.+@reply.github.com/i => :repliesrouting :all => :replies end
routing方法,指定不同的邮件到特定的mailbox中。本例所有的邮件都被RepliesMailbox类进行处理。
⚠️一个方便的转化ruby 正则表达式语法网站:https://rubular.com/
继续:
在replies_mailbox.rb内编写方法。
mailbox集成了mail这个model。一个Ruby Mail Library.https://github.com/mikel/mail/提供了生成,转化,发送的一系列方法。
在gemfile.lock中可见:
actionmailbox (6.0.0.rc1)
...
mail (>= 2.7.1)
class RepliesMailbox < ApplicationMailboxMATCHER = /reply-(.+)@reply.example.com/i# mail => Mail object# inbound_email => ActionMailbox::InboundEmail record#before_processing :ensure_userdef processreturn if user.nil?discussion.comments.create(user: user,# decoded方法返回对象的值(格式是string),即返回的是body,不是subject body: mail.decoded)enddef user@user ||= User.find_by(email: mail.from)enddef discussion@discussion ||= Discussion.find(discussion_id)end# recipients是mail的方法,find{}进行匹配找到第一个符合的data。# recipients可以用to方法代替。# recipient是一个string, 使用[Regexp, 1]得到捕捉到的字符。具体见正则表达式的捕捉()def discussion_idrecipient = mail.recipients.find{|r| MATCHER.match?(r) }recipient[MATCHER, 1]endprivatedef ensure_userif user.nil?bounce_with UserMailer.missing(inbound_email)end end
class ApplicationMailbox < ActionMailbox::Base# routing /something/i => :somewhere# routing /reply\+.+@reply.github.com/i => :replies# routing :all => :repliesrouting RepliesMailbox::MATCHER => :replies end
然后添加user和discussion2条记录。
在discussions/show.html.erb增加下面的代码:
... <h4>Comments</h4> <div> <% @discussions.comments.each do |comment| %><strong><%= comment.user.name%></strong> commented:<br/><%= simple_format comment.body%> <% end %> </div>
完成!
测试
进入http://localhost:3000/rails/conductor/action_mailbox/inbound_emails
点击Deliver new inbound email链接,选择发送一封
这是source:
Date: Fri, 24 May 2019 11:30:37 +0800 From: 1@1.com To: reply-1@reply.example.com Message-ID: <5ce7655da43ed_c653feae01b5b9c714c@chentianweideiMac.local.mail> In-Reply-To: Subject: congratulations Mime-Version: 1.0 Content-Type: text/plain;charset=UTF-8 Content-Transfer-Encoding: 7bithello boy!
转载于:https://www.cnblogs.com/chentianwei/p/10916964.html
action mailbox相关推荐
- 每日新闻 | 传旷视科技短期内将赴港上市最新估值30亿美元
点击蓝字 关注我们 更多精彩,请点击上方蓝字关注我们! 每日新闻播报 第08-21期 1 趋势洞察 工信部苗圩:机器人仍是推动经济高质量发展重要动力 8月20日,工业和信息化部部长苗圩在2019世界机 ...
- 【Flink】Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型
1.概述 转载:Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型 相似文章:[Flink]Flink 基于 MailBox 实现的 StreamTask 线程模型 Fl ...
- 【Flink】Flink 基于 MailBox 实现的 StreamTask 线程模型
1.概述 转载:Flink 基于 MailBox 实现的 StreamTask 线程模型 先来给介绍一下目前 StreamTask 中基于 MailBox 实现的线程模型,这个模型从 1.9 开始实现 ...
- MAILBOX函数的使用
TI雷达开发板的Mailbox的使用 DSS端的初始化内容 进入端口: dss_main.c Task_Params_init(&taskParams); taskParams.stackSi ...
- mailbox unavailable
本文出自Simmy的个人blog:西米在线 http://simmyonline.com/archives/320.html 症状:发送邮件后收到退信,显示:mx1.hotmail.com #< ...
- java action dao_java中Action层、Service层和Dao层的功能区分
一.Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DA ...
- Cocos Creator 的 动作(Action)系统:moveBy的使用
Cocos Creator 快速上手:制作第一个游戏 可以在这里感受一下这款游戏的完成形态: http://fbdemos.leanapp.cn/star-catcher/ 准备项目和资源 我们已经为 ...
- Struts2中Action接收参数
Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数: a.定义:在Action类中定义属 ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
最新文章
- 实时监控用户输入--中文输入解决方案
- harris角点检测_角点检测(2) - harris算子 - 理论与Python代码
- 阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松
- Python 技术篇-pip安装提示:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,问题解决方法
- 强制修改mysql 中root的密码
- php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...
- SSM整合时Maven项目的pom.xml版本兼容的代码备份
- win下python环境搭建以及安装pip、django
- stm8s003程序跑飞_微信小程序只玩跳一跳?OUT啦!带你玩更好玩的微信小游戏!...
- SAP Spartacus popover Component 的单元测试
- 数学--数论--POJ281(线性同余方程)
- [初级]Java命令学习系列(六)——jinfo
- 57张PPT彻底搞清楚区块链技术。。
- 生产替代物料_一种替代的多生产者方法
- 支持向量机(Support Vector Machines,SVM)
- svn unable to connect to a repository at url 执行上下文错误 不能访问SVN服务器问题
- 对java.lang.UnsupportedOperationException 异常的分析
- 如何由网址查找IP地址
- 判断2-100之间有多少个素数,并输出所有素数
- dayjs,当年月周日