1

I have to send weekly emails to all the user about the latest things happening. I am using ActionMailer to accomplish other mailing task however I have no clue how to automate the weekly emails.

Update

I found whenever gem which could be used to schedule cron jobs. I guess this could be used to send weekly emails which I intend to. Still looking how to make it work with ActionMailer will update once I find the solution

Update 2

This is what I have done so far using whenever gem:-

in schedule.rb

every 1.minute do
    runner "User.weekly_update", :environment => 'development'
end

in users_mailer.rb

def weekly_mail(email)
    mail(:to => email, :subject => "Weekly email from footyaddicts")
end

in users.rb

def self.weekly_update
    @user = User.all
    @user.each do |u|
      UsersMailer.weekly_mail(u.email).deliver
    end
end

If i try to run User.weekly_update from the console I am able to get the mails. I am testing in development mode and using rvm. I checked my crontab file and it has got the right stuff.

However I am not getting any mails automatically from the app. Any clue what might be wrong?

Thanks,

Dev R
  • 1,892
  • 1
  • 25
  • 38

2 Answers2

2

OK so it turns out to be a path issue with whenever gem, and the problem was created when I installed another version of ruby.

In my machine the new ruby version is installed in /usr/local/bin/ruby. In my rails app I had to go to the file script/rails and replace #!/usr/bin/env ruby with #!/usr/local/bin/ruby.

I found this out by visiting cron.log file which showed this error message :- /usr/bin/env: ruby: No such file or directory

I made a cron.log file to log the cron error this is what I did in my schedule.rb code written in the question :-

every 2.minutes do
    runner "User.weekly_update", :environment => 'development', :output => 'log/cron.log' 
end 

I am getting periodic mails now.

Dev R
  • 1,892
  • 1
  • 25
  • 38
0

It seems like you haven't configured ActionMailer settings. First check out the logs from console, whether the mailing process is working(paste your logs). If yes then do following steps.

add this in your gemfile.

gem 'tlsmail'

run

bundle install

write these configuration setting in your config/environments/development.rb file

  require 'tlsmail'
  Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
  ActionMailer::Base.delivery_method = :smtp
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.raise_delivery_errors = true
  ActionMailer::Base.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => "587",
      :domain => "gmail.com",
      :enable_starttls_auto => true,
      :authentication => :login,
      :user_name => "<address>@gmail.com",
      :password => "<password>"
  }

config.action_mailer.raise_delivery_errors = true

add your working password/email against user_name and password. Don't forget to restart server.

Muhammad Sannan Khalid
  • 3,127
  • 1
  • 22
  • 36
  • I am getting the mail otherwise its just that when I try to schedule the emails to be sent at some later point I do not receive any mail. I guess it is my bad implementation of whenever gem which I am using to deliver weekly mail – Dev R Dec 07 '11 at 10:52
  • this is the error which I am getting in the logs /usr/bin/env: ruby: No such file or directory – Dev R Dec 08 '11 at 20:02