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分支
rails action_mailbox:install
//会生成一个app/mailboxes/application_mailbox.rb
//同时生成3个数据库table
rails g scaffold User email name
rails g scaffold Discussion title
rails g scaffold Comment user:references discussion:references body:text
rails db:migrate 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 => :somewhere
routing /reply\+.+@reply.github.com/i => :replies
routing :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 < ApplicationMailbox
MATCHER = /reply-(.+)@reply.example.com/i # mail => Mail object
# inbound_email => ActionMailbox::InboundEmail record #before_processing :ensure_user def process
return if user.nil? discussion.comments.create(
user: user,
# decoded方法返回对象的值(格式是string),即返回的是body,不是subject
body: mail.decoded
) end def user
@user ||= User.find_by(email: mail.from)
end def discussion
@discussion ||= Discussion.find(discussion_id)
end # recipients是mail的方法,find{}进行匹配找到第一个符合的data。
# recipients可以用to方法代替。
# recipient是一个string, 使用[Regexp, 1]得到捕捉到的字符。具体见正则表达式的捕捉()
def discussion_id
recipient = mail.recipients.find{|r| MATCHER.match?(r) }
recipient[MATCHER, 1]
end private def ensure_user
if 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 => :replies
routing 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: 7bit hello boy!
action mailbox的更多相关文章
- RabbitMQ in Action (1): Understanding messaging
1. Consumers and producers Producers create messages and publish (send) them to a broker server (Rab ...
- Rails6.0 Beta版本1: Action Text的简单使用
主要功能是新增2个主要的框架Mailbox和action Text. 和2个重要的可扩展的升级: multiple databases support和parallel testing. Action ...
- Flink整合oozie shell Action 提交任务 带kerberos认证
最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题 还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少,手动滑稽 集 ...
- redux-amrc:用更少的代码发起异步 action
很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results
原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...
- java中Action层、Service层和Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...
- SpringMVC的Action在同一时间里只允许同一个浏览器的单次进入?
最近用SpringMVC写了一个很简单的测试程序,代码如下: @Controller public class LongTimeTaskController { @RequestMapping(val ...
- No result defined for action com.lk.IndexAction and result success
意图访问一个 /es/index.action 竟然出现: [SAE ] ERROR [05-11 13:54:32] [http-80-5] com.opensymphony.xwork2.util ...
随机推荐
- Linux下ping: unknown host www.baidu.com的解决办法
如果ping域名的时候出现ping:unknown host xxx.xxx 但是ping IP地址的时候可以通的话 可知是dns服务器没有配置好, 查看一下配置文件/etc/resolv.conf ...
- day33 网络编程之UDP与进程了解
UDP 什么是UDP协议 在上节课的练习中,使用TCP进行网络编程时,我们会遇到粘包问题,这是因为TCP是流式协议,而今天学习的UDP协议不是流式协议,其发送的数据是数据报格式的,在进行数据发送时该协 ...
- new与malloc有什么区别
转自http://www.cnblogs.com/QG-whz/p/5140930.html 前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老 ...
- Shell脚本中计算字符串长度的5种方法
有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令wc -L可以获取到当前行 ...
- 关于 resultType 与 parameterType 的基本使用的区别
以下关于 resultType 与 parameterType 的基本使用的区别 : 1.使用 resultType : 主要针对于从数据库中提取相应的数据出来 2.使 ...
- ES简介及特点
1.ES是什么? ES是一个高度可伸缩的开源的全文检索和分析引擎,它允许你以近实时的方式快速存储.搜索.分析大量数据,ES是基于Lucence开发,隐藏其复杂性,提供了简单易用的restful api ...
- CSS:盒子的定位与浮动
CSS--盒子定位.浮动与居中 HTML中的每个元素都是一个盒子 浏览器对HTML文档进行解析,根据盒子的属性对其进行排列. 每个元素默认使用标准文档流定位 标准文档流:是指浏览器读取HTML ...
- # Python 3 & 爬虫一些记录
目录 Python 3 & 爬虫一些记录 交互模式和命令行模式 函数积累 语法积累 列表和元组 输入 交互模式下输入多行 爬虫 HTTP报文请求头User-Agent信息 解析库pyquery ...
- Linux中设置系统时间和时区
之前公司里有需求要做机器与服务器做时间同步,服务器发送时间戳和时区过来,机器这边根据接收到的时间戳和时区来改时间. 其实很简单,百度上应该也有很多博客有类似的教程,但是这里强调一点,百度上的博客里写的 ...
- .Net面试题三
1..Net中类和结构的区别? 2.死锁地必要条件?怎么克服? 3.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类? 4.构造器COnstructor是否可以被继承?是否可以被 ...