Some fixes for mailer module.

This commit is contained in:
benni 2012-08-17 19:08:02 +02:00
parent 6f7682d6a0
commit c936813967
6 changed files with 41 additions and 40 deletions

View file

@ -15,7 +15,8 @@ class MessagesController < ApplicationController
@message = @current_user.send_messages.new(params[:message]) @message = @current_user.send_messages.new(params[:message])
if @message.save if @message.save
#FIXME: Send Mails wit ID instead of using message.state ... #FIXME: Send Mails wit ID instead of using message.state ...
call_rake :send_emails #call_rake :send_emails
@message.deliver
redirect_to messages_url, :notice => "Nachricht ist gespeichert und wird versendet." redirect_to messages_url, :notice => "Nachricht ist gespeichert und wird versendet."
else else
render :action => 'new' render :action => 'new'

View file

@ -2,24 +2,19 @@
# ActionMailer class that handles all emails for the FoodSoft. # ActionMailer class that handles all emails for the FoodSoft.
class Mailer < ActionMailer::Base class Mailer < ActionMailer::Base
layout 'email' # Use views/layouts/email.html.erb layout 'email' # Use views/layouts/email.txt.erb
default :from => "FoodSoft <#{Foodsoft.config[:email_sender]}>" default from: "FoodSoft <#{Foodsoft.config[:email_sender]}>"
# Sends an email copy of the given internal foodsoft message. # Sends an email copy of the given internal foodsoft message.
def foodsoft_message(message, recipient) def foodsoft_message(message, recipient)
@body = message.body @message = message
@sender = message.sender.nick
@recipients = recipient.nick
@reply = url_for(:controller => "messages", :action => "reply", :id => message.id)
@link = url_for(:controller => "messages", :action => "show", :id => message.id)
@profile = url_for(:controller => "home", :action => "profile")
mail :sender => Foodsoft.config[:email_sender], mail sender: Foodsoft.config[:email_sender],
:errors_to => Foodsoft.config[:email_sender], errors_to: Foodsoft.config[:email_sender],
:subject => "[#{Foodsoft.config[:name]}] " + message.subject, subject: "[#{Foodsoft.config[:name]}] " + message.subject,
:to => recipient.email, to: recipient.email,
:from => "#{message.sender.nick} <#{message.sender.email}>" from: "#{message.sender.nick} <#{message.sender.email}>"
end end
# Sends an email with instructions on how to reset the password. # Sends an email with instructions on how to reset the password.

View file

@ -43,15 +43,15 @@ class Message < ActiveRecord::Base
def reply_to=(message_id) def reply_to=(message_id)
message = Message.find(message_id) message = Message.find(message_id)
add_recipients(message.sender.to_a) add_recipients([message.sender])
self.subject = "Re: #{message.subject}" self.subject = "Re: #{message.subject}"
self.body = "#{message.sender.nick} schrieb am #{I18n.l(message.created_at.to_date)} um #{I18n.l(message.created_at, :format => :time)}:\n" self.body = "#{message.sender.nick} schrieb am #{I18n.l(message.created_at, :format => :short)}:\n"
message.body.each_line{ |l| self.body += "> #{l}" } message.body.each_line{ |l| self.body += "> #{l}" }
end end
def mail_to=(user_id) def mail_to=(user_id)
user = User.find(user_id) user = User.find(user_id)
add_recipients(user.to_a) add_recipients([user])
end end
# Returns true if this message is a system message, i.e. was sent automatically by the FoodSoft itself. # Returns true if this message is a system message, i.e. was sent automatically by the FoodSoft itself.
@ -67,20 +67,24 @@ class Message < ActiveRecord::Base
User.find(recipients_ids) User.find(recipients_ids)
end end
def deliver
for recipient in recipients
if recipient.settings['messages.sendAsEmail'] == "1" && !recipient.email.blank?
begin
Mailer.foodsoft_message(self, recipient).deliver
# rescue
# logger.warn "Deliver failed for #{recipient.nick}: #{recipient.email}"
end
end
end
update_attribute(:email_state, 1)
end
# Sends all pending messages that are to be send as emails. # Sends all pending messages that are to be send as emails.
def self.send_emails def self.send_emails
messages = Message.pending messages = Message.pending
for message in messages for message in messages
for recipient in message.recipients message.deliver
if recipient.settings['messages.sendAsEmail'] == "1" && !recipient.email.blank?
begin
Mailer.foodsoft_message(message, recipient).deliver
rescue
logger.warn "Deliver failed for #{recipient.nick}: #{recipient.email}"
end
end
end
message.update_attribute(:email_state, 1)
end end
end end
end end

View file

@ -1,6 +1,6 @@
<%= yield %> <%= yield %>
-- --
FoodSoft: <%= url_for(:controller => "home", :action => "index", :only_path => false) %> FoodSoft: <%= root_url %>
Foodcoop-Homepage: <%= Foodsoft.config[:homepage] %> Foodcoop-Homepage: <%= Foodsoft.config[:homepage] %>
Hilfe/Help: <%= Foodsoft.config[:help_url] %> Hilfe/Help: <%= Foodsoft.config[:help_url] %>

View file

@ -0,0 +1,13 @@
Foodsoft-Nachricht
Von: <%= @message.sender.nick %>
======================================================================
<%= @message.body %>
======================================================================
Antworten: <%= new_message_url('message[reply_to]' => @message.id) %>
Nachricht online einsehen: <%= message_url(@message) %>
Nachrichten-Einstellungen: <%= my_profile_url %>

View file

@ -1,12 +0,0 @@
Foodsoft-Nachricht
Von: <%= @sender %>
An: <%= @recipients %>
======================================================================
<%= @body %>
======================================================================
Antworten: <%= @reply %>
Nachricht online einsehen: <%= @link %>
Nachrichten-Einstellungen: <%= @profile %>