如何使用gem时在ruby上发送自动电子邮件

时间:2016-04-09 05:59:38

标签: ruby-on-rails

我在rails中制作了一个项目,我希望添加自动电子邮件功能。我选择每当宝石用于此目的。我单独创建了rake任务以发送电子邮件。

email_tasks.rake

desc 'send digest email'
task send_digest_email: :environment do
  # ... set options if any
   InterviewScheduleMailer.sample_email(@interview_schedule).deliver!
end

安排文件

set :environment, :development
# Example:
#
# set :output, "/path/to/my/cron_log.log"
#
 every :friday, :at => '3:52 am' do  
  rake 'send_digest_email'
end

every :friday, :at => '4:01 pm' do  
   runner "InterviewSchedule.sample_email"
 end

我的电子邮件仅在我运行bundle exec send_digest_email时才会发送。

我希望根据日期将电子邮件发送给所有员工。例如谁有生日。所以电子邮件应该在上午12点自动发送。

2 个答案:

答案 0 :(得分:0)

假设您使用的是* nix-type操作系统,您是否更新了cron选项卡以便在作业发生变化时使用?

您可以运行以下命令来查看crontab的内容

crontab -l 

你可能会看到你的crontab内容类似于下面的

30 23 * * * /bin/bash -l -c 'cd /Users/xyz/myproject/Nov-02/myproject && myproject_bundle exec rake RAILS_ENV=development send_email'

您可以按照时间表

更新您的crontab
whenever -w

此处有更多详情crontab with rails

答案 1 :(得分:0)

以下是我如何使用调度程序,它在开发中不起作用但在生产中起作用

# add ,roles: [:app] if you are using capistrano for deployment
every 1.day, :at => '7:06 am' do
  command "some linux commands"
end

# add ,roles: [:app] if you are using capistrano for deployment
every 1.day, at: '07:00 am' do
  runner "DailyMailer.log_export_email.deliver_later"
end
# Learn more: http://github.com/javan/whenever

您也可以尝试直接触发邮件程序,但我建议您检查config / application.rb中的activejob队列适配器集

我使用sidekiq用于activejob队列和deliver_later方法来发送电子邮件。这种方式在后台运行。

您可能需要根据队列适配器为邮件程序使用不同的方法。

希望有所帮助