`
hideto
  • 浏览: 2677917 次
  • 性别: 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实现消息队列的方法详解

    在现代的Web开发中,消息队列是一种广泛使用的架构模式,它可以在不同的系统组件之间异步传输消息。...本文将详细介绍如何使用PHP结合...开发者可以根据实际情况,结合业务需求,灵活设计和优化消息队列的实现方案。

    Laravel开发-lumen-queue-email-alert

    在本文中,我们将深入探讨如何在Laravel框架的微型版本——Lumen中,利用队列(Queue)功能来实现邮件警报系统。当队列任务执行失败时,系统能够自动发送电子邮件通知用户,确保及时发现并处理问题。Lumen是一个轻量...

    VC++ 实现电子邮件(Email)发送

    在VC++环境中实现电子邮件的发送,通常涉及到网络通信和邮件协议的理解。主要涉及的技术点包括SMTP(Simple Mail Transfer Protocol)协议、...此外,为了提高用户体验,你可能还需要实现邮件队列和定时发送等功能。

    通过 Apache 的 Jarkata Common Email 来发送email

    此外,由于`mail-1.3.3.jar`是JavaMail API的实现,它也是发送邮件所必需的,因为Common Email是建立在JavaMail之上的。 发送电子邮件的步骤通常包括以下部分: 1. 创建`Email`对象:这是所有邮件设置的起点。你...

    java实现发送email小案例

    在Java编程中,发送电子邮件是一项常见的任务,通常用于自动化通知、报表发送或用户通信。...这个案例适用于简单的邮件发送需求,但对于更复杂的应用,可能需要考虑更多因素,如邮件模板、多线程发送、邮件队列等。

    commons email 发送html邮件完整优化实例

    在提供的`comment_email`文件中,可能包含了示例代码或者测试数据,你可以参考它来进一步理解如何利用Apache Commons Email实现HTML邮件的发送和优化。 总的来说,Apache Commons Email为Java开发者提供了一套强大...

    Laravel 队列使用的实现

    Laravel队列实现知识点详解: 1. Laravel框架概述: Laravel是一个现代化的PHP Web应用框架,类似于ThinkPHP,它以优雅的语法和多样的功能受到开发者的喜爱。队列(Queue)是Laravel框架中提供的一个特性,它可以...

    ORACLE高级队列在地震前兆数据传输中的应用研究.pdf

    通过PL/SQL语言编程实现的ORACLE高级队列技术在地震前兆数据传输中的应用,可以有效地解决现有数据传输手段所存在的问题。 具体而言,ORACLE高级队列技术具有以下优势: 1. 可靠性:高级队列能够保证数据在传输...

    前端开源库-hoodie-plugin-email

    【前端开源库-hoodie-plugin-email】是一款专为前端开发者设计的开源库,它作为一个插件,主要用于在连帽衫(Hoodie)框架中实现电子邮件功能。连帽衫(Hoodie)是一个轻量级的JavaScript应用框架,旨在帮助开发者...

    commons-email-1.5-src.zip

    11. **邮件队列**:如果需要批量发送邮件,可以通过集成其他队列处理库,实现邮件的异步发送。 在源代码压缩包中,你可以看到以下主要组件和文件: - `src/main/java/org/apache/commons/mail/`:包含所有核心类,...

    我的django专栏029阶段Celery消息队列的配置和实现的源码

    在本篇内容中,我们将深入探讨Django框架与Celery消息队列的集成与实现,这是"我的django专栏029阶段"的重点话题。Celery是一个分布式任务队列,广泛用于处理异步任务,提高Web应用的响应速度和可扩展性。在Django...

    EmailDemo(RabbitMQ邮件发送).zip

    本教程以"EmailDemo"为例,详细介绍如何使用RabbitMQ来实现邮件发送功能,这对于初学者来说是一次很好的学习机会。 首先,我们需要理解RabbitMQ的基本概念。RabbitMQ是基于AMQP(Advanced Message Queuing Protocol...

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

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

    ms-email:微服务旨在根据队列发送电子邮件

    "ms-email"提及的“根据队列发送电子邮件”表明它采用了消息队列(Message Queue)机制。消息队列可以缓冲消息,确保即使在高并发或服务暂时不可用的情况下,也能可靠地处理和传递邮件。常见的消息队列服务有...

    冰翎email发送类 v1.0.rar

    冰翎Email发送类v1.0的核心功能就是封装了这些步骤,使得开发者无需深入了解SMTP协议的细节,就能便捷地实现邮件发送。这个类库的关键属性和方法可能包括: 1. **配置参数**:如SMTP服务器地址、端口号、用户名、...

    Laravel开发-email-template

    总之,“Laravel开发-email-template”项目旨在提供一种有效的方法来管理和发送基于数据库的电子邮件模板,结合Laravel的邮件系统和Blade模板,实现灵活、可扩展的邮件功能。通过这个项目,开发者可以更好地组织和...

    Laravel开发-laravel-elastic-email

    在本文中,我们将深入探讨如何在 Laravel 开发中使用 `laravel-elastic-email` 包,以便实现高效、可靠的电子邮件发送功能。`laravel-elastic-email` 是专门为 Laravel 框架设计的一个扩展,它利用了 Elastic Email ...

    AX3_Email-1.0.2-py3-none-any.whl.zip

    - 邮件队列:对于大量邮件发送,可能会实现邮件队列,以批量处理和优化发送速度。 总的来说,AX3 Email模块是一个针对Python 3开发的邮件处理工具,旨在帮助开发者简化电子邮件的发送、接收和管理任务。用户应遵循 ...

Global site tag (gtag.js) - Google Analytics