`
hideto
  • 浏览: 2651739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现Email队列

阅读更多
Rails部署环境下使用lighttpd进程实时发送email比较耗时间,对于要求不太紧急的email,可以暂存在Email队列里,利用linux的crontab定时读取发送

1,加一张表email_queue:
class CreateEmailQueues < ActiveRecord::Migration
  def self.up
    create_table :email_queues do |t|
      t.string :subject
      t.text :content
      t.string :recipient
      t.timestamps
    end
  end

  def self.down
    drop_table :email_queues
  end
end

需要发送Email时就向该表插数据即可

2,EmailQueue
class EmailQueue < ActiveRecord::Base
  def self.send_all_email_in_queue
    EmailQueue.find(:all, :order => "created_at asc").each do |email|
      ExceptionNotifier.deliver_sys_email(email.recipient, email.subject, email.content)
      email.destroy
    end
  end
end


3,写一个send_sys_email_job.rb文件
ENV['RAILS_ENV'] = 'production'
require File.dirname(__FILE__)+'/config/environment'
EmailQueue.send_all_email_in_queue


4,写一个send_sys_email.sh文件
#!/bin/bash
S=`ps aux|grep send_sys_email_job|grep -v grep`
if ["$RS" = ""]; then
  echo "No send_sys_email instance, start a new one!"
  /usr/bin/ruby /var/www/vhosts/hideto/html/www.beyondrails.com/send_sys_email_job.rb
else
  echo "Already exists a send_sys_email_job instance, exit!"
  exit
fi

这里有陷阱,调用send_sys_email_job.rb文件时必须写全绝对路径,因为crontab里没有环境变量

5,crontab -e
*/10 * * * * /var/www/vhosts/hideto/html/www.beyondrails.com/send_sys_email.sh


这样就会每间隔10分钟检查一遍Email队列里有没有邮件并发送
分享到:
评论
2 楼 hideto 2008-06-21  
thanks,要是自己独立服务器的话我一定用qmail
1 楼 QuakeWang 2008-06-21  
引用

Rails部署环境下使用lighttpd进程实时发送email比较耗时间

你发送邮件是用什么方式?
一般在linux上都是用qmail,它自己有邮件队列,rails发送邮件其实就是往这个队列里面丢消息,速度很快,我觉得没有必要再在数据库里面实现一个email queue

相关推荐

    PHP使用ActiveMQ实现消息队列的方法详解

    本文实例讲述了PHP使用ActiveMQ实现消息队列的方法。分享给大家供大家参考,具体如下: 前面我们已经学了如何部署ActiveMQ, 我们知道通过ActiveMQ的一个管理后台可以查看任务队列。 今天 用PHP来操作ActiveMQ,...

    Java多线程调用BlockingDeque跑批量数据的例子

    对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送促销邮件用的,欢迎提意见和建议。 运行DispatcherMain可以测试,库结构自己可以...

    Java的循环单链表及其测试程序

    Java语言的循环单链表实现,包含测试程序,原创,有问题可联系本人,email:jsczczd@yahoo.com.cn;QQ:7821531932;菜鸟起飞中~~~

    rabbitmq-email:用于RabbitMQ的SMTP网关插件

    用于RabbitMQ的SMTP网关插件 该插件使SMTP和AMQP 0-9-1可以互操作。 它可以 ...适配器使用一组AMQP队列(例如, email-out )。 每个队列都链接有一个“默认”域名。 使用邮件时,将检查其AMQP路由

    Serve:Redis逐步消息级别,基于swoole实现的多进程消费端

    服务基于Swoole Udp服务器编写的消息模块化消费系统 已支持功能: 支持数据库操作 仅支持Redis作为消息本身 每个人数,可以开启多个TaskWorker + Worker模式的消费数量 环境要求: ...通过Swoole Server实现

    JerryQuu:使用Typescript编写的Node.js的快速,可靠的基于Redis的电子邮件队列

    在Redis的帮助下实现FIFO排队机制。 使用您选择的任何Redis客户端,直到它支持 如果Nodemailer无法发送任何消息,JerryQuu会将消息添加回队列,以便可以再次处理。 默认情况下,JerryQuu的最大重试限制为4。 您...

    阿里云java短信验证码源码-bio:曾是

    管理员用户功能部分实现,包括手动输入用户信息+上传Excel文件后下载队列成员信息表 实现ssh连接远程数据库 utils/DBUtils week 2 实现管理员用户登陆 实现管理员登陆认证(authentication)并在研究用户权限...

    商人过河问题的MATLAB程序

    数学建模中经典问题商人过河问题的MATLAB源代码,绝对是自己想出来的算法,比枚举算法的时间复杂度要小得多,算法中运用了队列作为存储结构,自己感觉非常的巧妙,前天用C语言实现后,一直想着用MATLAB实现,现在将...

    email-queue:Tryton模块可确保交易安全,不阻塞电子邮件发送

    该模块实现了一个电子邮件队列,该队列充当tryton模块发送电子邮件的事务安全缓冲区。 源代码: : 为什么要使用此模块? 您是否从tryton模块发送电子邮件? 然后,您很可能需要此模块。 原因如下: 交易安全 考虑...

    spring-boot-demo_xkcoding.tar.gz

    plus(快速操作Mybatis)、BeetlSQL(强大的ORM框架)、upload(本地文件上传和七牛云文件上传)、redis(缓存)、ehcache(缓存)、email(发送各种类型邮件)、task(基础定时任务)、quartz(动态管理定时任务)、xxl-job(分布式...

    网站自动操作系统

    花了一天的时间写的一个可以自动模拟人操作浏览器的小软件,可以自己添加操作命令队列来执行自己的需要,可以设置每一次队列操作完成后的间隔时间循环执行命令队列。 &lt;br&gt;(注:使用这个东东所造成的任何后果,...

    Linux邮件服务器软件比较.docx

    UCE控制 (UCE,unsolicited mercial email): Postfix能限制哪个主机允许通过自身转发,并且 支持限定什么允许接进。Postfix实现通常的控制功能:黑列表、RBL查 找、HELO/发送者DNS核实。基于内容过滤当前没有实现。 ...

    网站自动操作(2007-8-9 19:25更新)

    花了一天的时间写的一个可以自动模拟人操作浏览器的小软件,可以自己添加操作命令队列来执行自己的需要,可以设置每一次队列操作完成后的间隔时间循环执行命令队列。 &lt;br&gt;软件下载(注:使用这个东东所造成的任何...

    商人过河问题的C语言程序

    数学建模中经典问题商人过河问题的C语言源代码,绝对是自己想出来的算法,比枚举算法的时间复杂度要小得多,算法中运用了队列作为存储结构,自己感觉非常的巧妙,我很快就会将该算法用MATLAB进行实现,并将其功能在...

    spring boot集成demo大全.zip

    job(`分布式定时任务`)、swagger(`API接口管理测试`)、security(`基于RBAC的动态权限认证`)、SpringSession(`Session共享`)、Zookeeper(`结合AOP实现分布式锁`)、RabbitMQ(`消息队列`)、Kafka(`消息队列`)、...

    Python Cookbook

    13.9 修复Python 2.4的email.FeedParser 解析的消息 477 13.10 交互式地检查POP3邮箱 479 13.11 探测不活动的计算机 482 13.12 用HTTP监视网络 487 13.13 网络端口的转发和重定向 489 13.14 通过代理建立SSL...

    团购网站源码:天天团购系统 v1.3.6 Build 20110328.rar

    43、邮件订阅:邮件均保存在发送队列中由计划任务控制发送,避免造成服务器堵塞; 44、计划任务:可添加计划任务,并自由设置计划任务的执行时间; 45、站长工具:可开启蜘蛛网页爬行统计,有效掌控搜索引擎对网站...

Global site tag (gtag.js) - Google Analytics