Sending mails automatically through action mailer Rails 3.1

纵饮孤独 提交于 2019-12-06 13:06:09

问题


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,


回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/8401642/sending-mails-automatically-through-action-mailer-rails-3-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!