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相关推荐

  1. 每日新闻 | 传旷视科技短期内将赴港上市最新估值30亿美元

    点击蓝字 关注我们 更多精彩,请点击上方蓝字关注我们! 每日新闻播报 第08-21期 1 趋势洞察 工信部苗圩:机器人仍是推动经济高质量发展重要动力 8月20日,工业和信息化部部长苗圩在2019世界机 ...

  2. 【Flink】Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型

    1.概述 转载:Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型 相似文章:[Flink]Flink 基于 MailBox 实现的 StreamTask 线程模型 Fl ...

  3. 【Flink】Flink 基于 MailBox 实现的 StreamTask 线程模型

    1.概述 转载:Flink 基于 MailBox 实现的 StreamTask 线程模型 先来给介绍一下目前 StreamTask 中基于 MailBox 实现的线程模型,这个模型从 1.9 开始实现 ...

  4. MAILBOX函数的使用

    TI雷达开发板的Mailbox的使用 DSS端的初始化内容 进入端口: dss_main.c Task_Params_init(&taskParams); taskParams.stackSi ...

  5. mailbox unavailable

    本文出自Simmy的个人blog:西米在线 http://simmyonline.com/archives/320.html 症状:发送邮件后收到退信,显示:mx1.hotmail.com #< ...

  6. java action dao_java中Action层、Service层和Dao层的功能区分

    一.Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DA ...

  7. Cocos Creator 的 动作(Action)系统:moveBy的使用

    Cocos Creator 快速上手:制作第一个游戏 可以在这里感受一下这款游戏的完成形态: http://fbdemos.leanapp.cn/star-catcher/ 准备项目和资源 我们已经为 ...

  8. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  9. [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分

    首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...

最新文章

  1. 实时监控用户输入--中文输入解决方案
  2. harris角点检测_角点检测(2) - harris算子 - 理论与Python代码
  3. 阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松
  4. Python 技术篇-pip安装提示:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,问题解决方法
  5. 强制修改mysql 中root的密码
  6. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...
  7. SSM整合时Maven项目的pom.xml版本兼容的代码备份
  8. win下python环境搭建以及安装pip、django
  9. stm8s003程序跑飞_微信小程序只玩跳一跳?OUT啦!带你玩更好玩的微信小游戏!...
  10. SAP Spartacus popover Component 的单元测试
  11. 数学--数论--POJ281(线性同余方程)
  12. [初级]Java命令学习系列(六)——jinfo
  13. 57张PPT彻底搞清楚区块链技术。。
  14. 生产替代物料_一种替代的多生产者方法
  15. 支持向量机(Support Vector Machines,SVM)
  16. svn unable to connect to a repository at url 执行上下文错误 不能访问SVN服务器问题
  17. 对java.lang.UnsupportedOperationException 异常的分析
  18. 如何由网址查找IP地址
  19. 判断2-100之间有多少个素数,并输出所有素数
  20. dayjs,当年月周日

热门文章

  1. 北京君正和博彦科技笔试体会及总结
  2. flex操作XML,强力总结帖
  3. 矛盾方程的最小二乘解
  4. Java—求某个范围内的所有素数
  5. 亚马逊测评,提示listing被限流了,问题出在哪里?
  6. 【python字符串】字符串的遍历分割以及常用函数【新手向】
  7. Arduino-Mixly-超声波测距仪-实现距离控制LED灯的开关
  8. 实战 | 基于 Serverless 技术的视频截帧架构如何实现?
  9. 《Dreamweaver CS6 完全自学教程》笔记 第十二章:框架的应用
  10. 一周技术学习笔记(第82期)-你要的理论、法则、定律、效应都在这里了