Class: Mailer
- Inherits:
-
ActionMailer::Base
- Object
- ActionMailer::Base
- Mailer
- Includes:
- Redmine::I18n, Roadie::Rails::Automatic
- Defined in:
- app/models/mailer.rb
Overview
Class Method Summary collapse
-
.default_url_options ⇒ Object
Default URL options for generating URLs in emails based on host_name and protocol defined in application settings.
-
.deliver_account_activated(user) ⇒ Object
Notifies user that his account was activated.
-
.deliver_account_activation_request(new_user) ⇒ Object
Notifies admin users that an account activation request needs their approval.
-
.deliver_account_information(user, password) ⇒ Object
Notifies user about his account information.
-
.deliver_attachments_added(attachments) ⇒ Object
Notifies users about new attachments.
-
.deliver_document_added(document, author) ⇒ Object
Notifies users that document was created by author.
-
.deliver_issue_add(issue) ⇒ Object
Notifies users about a new issue.
-
.deliver_issue_edit(journal) ⇒ Object
Notifies users about an issue update.
-
.deliver_lost_password(user, token, recipient = nil) ⇒ Object
Sends an email to user with a password recovery link.
- .deliver_mail(mail) ⇒ Object
-
.deliver_message_posted(message) ⇒ Object
Notifies users about a new forum message.
-
.deliver_news_added(news) ⇒ Object
Notifies users about new news.
-
.deliver_news_comment_added(comment) ⇒ Object
Notifies users about a new comment on a news.
-
.deliver_password_updated(user, sender) ⇒ Object
Notifies user that his password was updated by sender.
-
.deliver_register(user, token) ⇒ Object
Sends an mail to user with his account activation link.
-
.deliver_security_notification(users, sender, options = {}) ⇒ Object
Notifies the given users about a security related event made by sender.
-
.deliver_settings_updated(sender, changes, options = {}) ⇒ Object
Notifies admins about application settings changes made by sender, where changes is an array of settings names.
-
.deliver_test_email(user) ⇒ Object
Send a test email to user.
-
.deliver_wiki_content_added(wiki_content) ⇒ Object
Notifies users about a new wiki content (wiki page added).
-
.deliver_wiki_content_updated(wiki_content) ⇒ Object
Notifies users about the update of the specified wiki content.
-
.email_addresses(arg) ⇒ Object
Returns an array of email addresses to notify by replacing users in arg with their notified email addresses.
-
.reminders(options = {}) ⇒ Object
Sends reminders to issue assignees Available options: * :days => how many days in the future to remind about (defaults to 7) * :tracker => id of tracker for filtering issues (defaults to all trackers) * :project => id or identifier of project to process (defaults to all projects) * :users => array of user/group ids who should be reminded * :version => name of target version for filtering issues (defaults to none).
-
.with_deliveries(enabled = true, &block) ⇒ Object
Activates/desactivates email deliveries during
block
. -
.with_synched_deliveries(&block) ⇒ Object
Execute the given block with inline sending of emails if the default Async queue is used for the mailer.
Instance Method Summary collapse
-
#account_activated(user) ⇒ Object
Builds a mail to notify user that his account was activated.
-
#account_activation_request(user, new_user) ⇒ Object
Builds a mail to user about an account activation request.
-
#account_information(user, password) ⇒ Object
Builds a mail to user about his account information.
-
#attachments_added(user, attachments) ⇒ Object
Builds a mail to user about new attachements.
-
#document_added(user, document, author) ⇒ Object
Builds a mail to user about a new document.
-
#issue_add(user, issue) ⇒ Object
Builds a mail for notifying user about a new issue.
-
#issue_edit(user, journal) ⇒ Object
Builds a mail for notifying user about an issue update.
-
#lost_password(user, token, recipient = nil) ⇒ Object
Builds a mail with the password recovery link.
- #mail(headers = {}, &block) ⇒ Object
-
#message_posted(user, message) ⇒ Object
Builds a mail to user about a new message.
-
#news_added(user, news) ⇒ Object
Builds a mail to user about a new news.
-
#news_comment_added(user, comment) ⇒ Object
Builds a mail to user about a new news comment.
-
#process(action, *args) ⇒ Object
Overrides ActionMailer::Base#process in order to set the recipient as the current user and his language as the default locale.
-
#register(user, token) ⇒ Object
Builds a mail to user with his account activation link.
-
#reminder(user, issues, days) ⇒ Object
Builds a reminder mail to user about issues that are due in the next days.
-
#security_notification(user, sender, options = {}) ⇒ Object
Build a mail to user and the additional recipients given in options about a security related event made by sender.
-
#settings_updated(user, sender, changes, options = {}) ⇒ Object
Build a mail to user about application settings changes made by sender.
-
#test_email(user) ⇒ Object
Build a test email to user.
-
#wiki_content_added(user, wiki_content) ⇒ Object
Builds a mail to user about a new wiki content.
-
#wiki_content_updated(user, wiki_content) ⇒ Object
Builds a mail to user about an update of the specified wiki content.
Methods included from Redmine::I18n
#current_language, #day_letter, #day_name, #find_language, #format_date, #format_hours, #format_time, #l, #l_hours, #l_hours_short, #l_or_humanize, #languages_options, #ll, #lu, #month_name, #set_language_if_valid, #valid_languages
Class Method Details
.default_url_options ⇒ Object
Default URL options for generating URLs in emails based on host_name and protocol defined in application settings.
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'app/models/mailer.rb', line 55 def self. = {:protocol => Setting.protocol} if Setting.host_name.to_s =~ /\A(https?\:\/\/)?(.+?)(\:(\d+))?(\/.+)?\z/i host, port, prefix = $2, $4, $5 .merge!({ :host => host, :port => port, :script_name => prefix }) else [:host] = Setting.host_name end end |
.deliver_account_activated(user) ⇒ Object
377 378 379 |
# File 'app/models/mailer.rb', line 377 def self.deliver_account_activated(user) account_activated(user).deliver_later end |
.deliver_account_activation_request(new_user) ⇒ Object
Notifies admin users that an account activation request needs their approval.
Exemple:
Mailer.deliver_account_activation_request(new_user)
357 358 359 360 361 362 363 |
# File 'app/models/mailer.rb', line 357 def self.deliver_account_activation_request(new_user) # Send the email to all active administrators users = User.active.where(:admin => true) users.each do |user| account_activation_request(user, new_user).deliver_later end end |
.deliver_account_information(user, password) ⇒ Object
Notifies user about his account information.
338 339 340 |
# File 'app/models/mailer.rb', line 338 def self.deliver_account_information(user, password) account_information(user, password).deliver_later end |
.deliver_attachments_added(attachments) ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'app/models/mailer.rb', line 182 def self.() container = .first.container case container.class.name when 'Project', 'Version' users = container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)} when 'Document' users = container.notified_users end users.each do |user| (user, ).deliver_later end end |
.deliver_document_added(document, author) ⇒ Object
Notifies users that document was created by author
Example:
Mailer.deliver_document_added(document, )
146 147 148 149 150 151 |
# File 'app/models/mailer.rb', line 146 def self.deliver_document_added(document, ) users = document.notified_users users.each do |user| document_added(user, document, ).deliver_later end end |
.deliver_issue_add(issue) ⇒ Object
88 89 90 91 92 93 |
# File 'app/models/mailer.rb', line 88 def self.deliver_issue_add(issue) users = issue.notified_users | issue.notified_watchers users.each do |user| issue_add(user, issue).deliver_later end end |
.deliver_issue_edit(journal) ⇒ Object
122 123 124 125 126 127 128 129 130 |
# File 'app/models/mailer.rb', line 122 def self.deliver_issue_edit(journal) users = journal.notified_users | journal.notified_watchers users.select! do |user| journal.notes? || journal.visible_details(user).any? end users.each do |user| issue_edit(user, journal).deliver_later end end |
.deliver_lost_password(user, token, recipient = nil) ⇒ Object
Sends an email to user with a password recovery link. The email will be sent to the email address specifiedby recipient if provided.
Exemple:
Mailer.deliver_account_activated(user, token)
Mailer.deliver_account_activated(user, token, 'foo@example.net')
396 397 398 |
# File 'app/models/mailer.rb', line 396 def self.deliver_lost_password(user, token, recipient=nil) lost_password(user, token, recipient).deliver_later end |
.deliver_mail(mail) ⇒ Object
670 671 672 673 674 675 676 677 678 679 680 681 682 683 |
# File 'app/models/mailer.rb', line 670 def self.deliver_mail(mail) return false if mail.to.blank? && mail.cc.blank? && mail.bcc.blank? begin # Log errors when raise_delivery_errors is set to false, Rails does not mail.raise_delivery_errors = true super rescue Exception => e if ActionMailer::Base.raise_delivery_errors raise e else Rails.logger.error "Email delivery error: #{e.}" end end end |
.deliver_message_posted(message) ⇒ Object
262 263 264 265 266 267 268 269 270 |
# File 'app/models/mailer.rb', line 262 def self.() users = .notified_users users |= .root.notified_watchers users |= .board.notified_watchers users.each do |user| (user, ).deliver_later end end |
.deliver_news_added(news) ⇒ Object
212 213 214 215 216 217 |
# File 'app/models/mailer.rb', line 212 def self.deliver_news_added(news) users = news.notified_users | news.notified_watchers_for_added_news users.each do |user| news_added(user, news).deliver_later end end |
.deliver_news_comment_added(comment) ⇒ Object
237 238 239 240 241 242 243 |
# File 'app/models/mailer.rb', line 237 def self.deliver_news_comment_added(comment) news = comment.commented users = news.notified_users | news.notified_watchers users.each do |user| news_comment_added(user, comment).deliver_later end end |
.deliver_password_updated(user, sender) ⇒ Object
Notifies user that his password was updated by sender.
Exemple:
Mailer.deliver_password_updated(user, sender)
404 405 406 407 408 409 410 411 412 413 414 415 416 |
# File 'app/models/mailer.rb', line 404 def self.deliver_password_updated(user, sender) # Don't send a notification to the dummy email address when changing the password # of the default admin account which is required after the first login # TODO: maybe not the best way to handle this return if user.admin? && user.login == 'admin' && user.mail == 'admin@example.net' deliver_security_notification(user, sender, message: :mail_body_password_updated, title: :button_change_password, url: {controller: 'my', action: 'password'} ) end |
.deliver_register(user, token) ⇒ Object
Sends an mail to user with his account activation link.
Exemple:
Mailer.deliver_register(user, token)
430 431 432 |
# File 'app/models/mailer.rb', line 430 def self.deliver_register(user, token) register(user, token).deliver_later end |
.deliver_security_notification(users, sender, options = {}) ⇒ Object
Notifies the given users about a security related event made by sender.
You can specify additional recipients in options. These will be added to all generated mails for all given users. Usually, you'll want to give only a single user when setting the additional recipients.
Example:
Mailer.deliver_security_notification(users,
sender,
message: :mail_body_security_notification_add,
field: :field_mail,
value: address
)
472 473 474 475 476 477 478 479 480 481 482 483 |
# File 'app/models/mailer.rb', line 472 def self.deliver_security_notification(users, sender, ={}) # Symbols cannot be serialized: # ActiveJob::SerializationError: Unsupported argument type: Symbol = .transform_values {|v| v.is_a?(Symbol) ? v.to_s : v } # sender's remote_ip would be lost on serialization/deserialization # we have to pass it with options [:remote_ip] ||= sender.remote_ip Array.wrap(users).each do |user| security_notification(user, sender, ).deliver_later end end |
.deliver_settings_updated(sender, changes, options = {}) ⇒ Object
Notifies admins about application settings changes made by sender, where changes is an array of settings names.
Exemple:
Mailer.deliver_settings_updated(sender, [:login_required, :self_registration])
501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 |
# File 'app/models/mailer.rb', line 501 def self.deliver_settings_updated(sender, changes, ={}) return unless changes.present? # Symbols cannot be serialized: # ActiveJob::SerializationError: Unsupported argument type: Symbol changes = changes.map(&:to_s) # sender's remote_ip would be lost on serialization/deserialization # we have to pass it with options [:remote_ip] ||= sender.remote_ip users = User.active.where(admin: true).to_a users.each do |user| settings_updated(user, sender, changes, ).deliver_later end end |
.deliver_test_email(user) ⇒ Object
Send a test email to user. Will raise error that may occur during delivery.
Exemple:
Mailer.deliver_test_email(user)
528 529 530 531 532 533 534 535 |
# File 'app/models/mailer.rb', line 528 def self.deliver_test_email(user) raise_delivery_errors_was = self.raise_delivery_errors self.raise_delivery_errors = true # Email must be delivered synchronously so we can catch errors test_email(user).deliver_now ensure self.raise_delivery_errors = raise_delivery_errors_was end |
.deliver_wiki_content_added(wiki_content) ⇒ Object
Notifies users about a new wiki content (wiki page added).
Example:
Mailer.deliver_wiki_content_added(wiki_content)
290 291 292 293 294 295 |
# File 'app/models/mailer.rb', line 290 def self.deliver_wiki_content_added(wiki_content) users = wiki_content.notified_users | wiki_content.page.wiki.notified_watchers users.each do |user| wiki_content_added(user, wiki_content).deliver_later end end |
.deliver_wiki_content_updated(wiki_content) ⇒ Object
Notifies users about the update of the specified wiki content
Example:
Mailer.deliver_wiki_content_updated(wiki_content)
318 319 320 321 322 323 324 325 326 |
# File 'app/models/mailer.rb', line 318 def self.deliver_wiki_content_updated(wiki_content) users = wiki_content.notified_users users |= wiki_content.page.notified_watchers users |= wiki_content.page.wiki.notified_watchers users.each do |user| wiki_content_updated(user, wiki_content).deliver_later end end |
.email_addresses(arg) ⇒ Object
Returns an array of email addresses to notify by replacing users in arg with their notified email addresses
Example:
Mailer.email_addresses(users)
=> ["foo@example.net", "bar@example.net"]
691 692 693 694 695 696 697 698 699 700 701 702 |
# File 'app/models/mailer.rb', line 691 def self.email_addresses(arg) arr = Array.wrap(arg) mails = arr.reject {|a| a.is_a? Principal} users = arr - mails if users.any? mails += EmailAddress. where(:user_id => users.map(&:id)). where("is_default = ? OR notify = ?", true, true). pluck(:address) end mails end |
.reminders(options = {}) ⇒ Object
Sends reminders to issue assignees Available options:
-
:days => how many days in the future to remind about (defaults to 7)
-
:tracker => id of tracker for filtering issues (defaults to all trackers)
-
:project => id or identifier of project to process (defaults to all projects)
-
:users => array of user/group ids who should be reminded
-
:version => name of target version for filtering issues (defaults to none)
555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 |
# File 'app/models/mailer.rb', line 555 def self.reminders(={}) days = [:days] || 7 project = [:project] ? Project.find([:project]) : nil tracker = [:tracker] ? Tracker.find([:tracker]) : nil target_version_id = [:version] ? Version.named([:version]).pluck(:id) : nil if [:version] && target_version_id.blank? raise ActiveRecord::RecordNotFound.new("Couldn't find Version named #{[:version]}") end user_ids = [:users] scope = Issue.open.where("#{Issue.table_name}.assigned_to_id IS NOT NULL" + " AND #{Project.table_name}.status = #{Project::STATUS_ACTIVE}" + " AND #{Issue.table_name}.due_date <= ?", days.day.from_now.to_date ) scope = scope.where(:assigned_to_id => user_ids) if user_ids.present? scope = scope.where(:project_id => project.id) if project scope = scope.where(:fixed_version_id => target_version_id) if target_version_id.present? scope = scope.where(:tracker_id => tracker.id) if tracker issues_by_assignee = scope.includes(:status, :assigned_to, :project, :tracker). group_by(&:assigned_to) issues_by_assignee.keys.each do |assignee| if assignee.is_a?(Group) assignee.users.each do |user| issues_by_assignee[user] ||= [] issues_by_assignee[user] += issues_by_assignee[assignee] end end end issues_by_assignee.each do |assignee, issues| if assignee.is_a?(User) && assignee.active? && issues.present? visible_issues = issues.select {|i| i.visible?(assignee)} visible_issues.sort!{|a, b| (a.due_date <=> b.due_date).nonzero? || (a.id <=> b.id)} reminder(assignee, visible_issues, days).deliver_later if visible_issues.present? end end end |
.with_deliveries(enabled = true, &block) ⇒ Object
Activates/desactivates email deliveries during block
594 595 596 597 598 599 600 |
# File 'app/models/mailer.rb', line 594 def self.with_deliveries(enabled = true, &block) was_enabled = ActionMailer::Base.perform_deliveries ActionMailer::Base.perform_deliveries = !!enabled yield ensure ActionMailer::Base.perform_deliveries = was_enabled end |
.with_synched_deliveries(&block) ⇒ Object
Execute the given block with inline sending of emails if the default Async queue is used for the mailer. See the Rails guide: Using the asynchronous queue from a Rake task will generally not work because Rake will likely end, causing the in-process thread pool to be deleted, before any/all of the .deliver_later emails are processed
607 608 609 610 611 612 613 614 615 |
# File 'app/models/mailer.rb', line 607 def self.with_synched_deliveries(&block) adapter = ActionMailer::DeliveryJob.queue_adapter if adapter.is_a?(ActiveJob::QueueAdapters::AsyncAdapter) ActionMailer::DeliveryJob.queue_adapter = ActiveJob::QueueAdapters::InlineAdapter.new end yield ensure ActionMailer::DeliveryJob.queue_adapter = adapter end |
Instance Method Details
#account_activated(user) ⇒ Object
Builds a mail to notify user that his account was activated.
366 367 368 369 370 371 |
# File 'app/models/mailer.rb', line 366 def account_activated(user) @user = user @login_url = url_for(:controller => 'account', :action => 'login') mail :to => user.mail, :subject => l(:mail_subject_register, Setting.app_title) end |
#account_activation_request(user, new_user) ⇒ Object
Builds a mail to user about an account activation request.
343 344 345 346 347 348 349 350 |
# File 'app/models/mailer.rb', line 343 def account_activation_request(user, new_user) @new_user = new_user @url = url_for(:controller => 'users', :action => 'index', :status => User::STATUS_REGISTERED, :sort_key => 'created_on', :sort_order => 'desc') mail :to => user, :subject => l(:mail_subject_account_activation_request, Setting.app_title) end |
#account_information(user, password) ⇒ Object
Builds a mail to user about his account information.
329 330 331 332 333 334 335 |
# File 'app/models/mailer.rb', line 329 def account_information(user, password) @user = user @password = password @login_url = url_for(:controller => 'account', :action => 'login') mail :to => user.mail, :subject => l(:mail_subject_register, Setting.app_title) end |
#attachments_added(user, attachments) ⇒ Object
Builds a mail to user about new attachements.
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'app/models/mailer.rb', line 154 def (user, ) container = .first.container added_to = '' added_to_url = '' @author = .first. case container.class.name when 'Project' added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) added_to = "#{l(:label_project)}: #{container}" when 'Version' added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) added_to = "#{l(:label_version)}: #{container.name}" when 'Document' added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id) added_to = "#{l(:label_document)}: #{container.title}" end redmine_headers 'Project' => container.project.identifier @attachments = @added_to = added_to @added_to_url = added_to_url mail :to => user, :subject => "[#{container.project.name}] #{l(:label_attachment_new)}" end |
#document_added(user, document, author) ⇒ Object
Builds a mail to user about a new document.
133 134 135 136 137 138 139 140 |
# File 'app/models/mailer.rb', line 133 def document_added(user, document, ) redmine_headers 'Project' => document.project.identifier @author = @document = document @document_url = url_for(:controller => 'documents', :action => 'show', :id => document) mail :to => user, :subject => "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}" end |
#issue_add(user, issue) ⇒ Object
Builds a mail for notifying user about a new issue
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'app/models/mailer.rb', line 69 def issue_add(user, issue) redmine_headers 'Project' => issue.project.identifier, 'Issue-Id' => issue.id, 'Issue-Author' => issue..login redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to issue references issue @author = issue. @issue = issue @user = user @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue) mail :to => user, :subject => "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}" end |
#issue_edit(user, journal) ⇒ Object
Builds a mail for notifying user about an issue update
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'app/models/mailer.rb', line 96 def issue_edit(user, journal) issue = journal.journalized redmine_headers 'Project' => issue.project.identifier, 'Issue-Id' => issue.id, 'Issue-Author' => issue..login redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to journal references issue @author = journal.user s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] " s << "(#{issue.status.name}) " if journal.new_value_for('status_id') s << issue.subject @issue = issue @user = user @journal = journal @journal_details = journal.visible_details @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}") mail :to => user, :subject => s end |
#lost_password(user, token, recipient = nil) ⇒ Object
Builds a mail with the password recovery link.
382 383 384 385 386 387 388 |
# File 'app/models/mailer.rb', line 382 def lost_password(user, token, recipient=nil) recipient ||= user.mail @token = token @url = url_for(:controller => 'account', :action => 'lost_password', :token => token.value) mail :to => recipient, :subject => l(:mail_subject_lost_password, Setting.app_title) end |
#mail(headers = {}, &block) ⇒ Object
617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 |
# File 'app/models/mailer.rb', line 617 def mail(headers={}, &block) headers.reverse_merge! 'X-Mailer' => 'Redmine', 'X-Redmine-Host' => Setting.host_name, 'X-Redmine-Site' => Setting.app_title, 'X-Auto-Response-Suppress' => 'All', 'Auto-Submitted' => 'auto-generated', 'From' => Setting.mail_from, 'List-Id' => "<#{Setting.mail_from.to_s.tr('@', '.')}>" # Replaces users with their email addresses [:to, :cc, :bcc].each do |key| if headers[key].present? headers[key] = self.class.email_addresses(headers[key]) end end # Removes the author from the recipients and cc # if the author does not want to receive notifications # about what the author do if @author && @author.logged? && @author.pref.no_self_notified addresses = @author.mails headers[:to] -= addresses if headers[:to].is_a?(Array) headers[:cc] -= addresses if headers[:cc].is_a?(Array) end if @author && @author.logged? redmine_headers 'Sender' => @author.login end # Blind carbon copy recipients if Setting.bcc_recipients? headers[:bcc] = [headers[:to], headers[:cc]].flatten.uniq.reject(&:blank?) headers[:to] = nil headers[:cc] = nil end if @message_id_object headers[:message_id] = "<#{self.class.(@message_id_object)}>" end if @references_objects headers[:references] = @references_objects.collect {|o| "<#{self.class.references_for(o)}>"}.join(' ') end if block_given? super headers, &block else super headers do |format| format.text format.html unless Setting.plain_text_mail? end end end |
#message_posted(user, message) ⇒ Object
Builds a mail to user about a new message.
246 247 248 249 250 251 252 253 254 255 256 |
# File 'app/models/mailer.rb', line 246 def (user, ) redmine_headers 'Project' => .project.identifier, 'Topic-Id' => (.parent_id || .id) @author = . references .root @message = @message_url = url_for(.event_url) mail :to => user, :subject => "[#{.board.project.name} - #{.board.name} - msg#{.root.id}] #{.subject}" end |
#news_added(user, news) ⇒ Object
Builds a mail to user about a new news.
197 198 199 200 201 202 203 204 205 206 |
# File 'app/models/mailer.rb', line 197 def news_added(user, news) redmine_headers 'Project' => news.project.identifier @author = news. news references news @news = news @news_url = url_for(:controller => 'news', :action => 'show', :id => news) mail :to => user, :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}" end |
#news_comment_added(user, comment) ⇒ Object
Builds a mail to user about a new news comment.
220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'app/models/mailer.rb', line 220 def news_comment_added(user, comment) news = comment.commented redmine_headers 'Project' => news.project.identifier @author = comment. comment references news @news = news @comment = comment @news_url = url_for(:controller => 'news', :action => 'show', :id => news) mail :to => user, :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}" end |
#process(action, *args) ⇒ Object
Overrides ActionMailer::Base#process in order to set the recipient as the current user and his language as the default locale. The first argument of all actions of this Mailer must be a User (the recipient), otherwise an ArgumentError is raised.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/models/mailer.rb', line 33 def process(action, *args) user = args.first raise ArgumentError, "First argument has to be a user, was #{user.inspect}" unless user.is_a?(User) initial_user = User.current initial_language = ::I18n.locale begin User.current = user lang = find_language(user.language) if user.logged? lang ||= Setting.default_language set_language_if_valid(lang) super(action, *args) ensure User.current = initial_user ::I18n.locale = initial_language end end |
#register(user, token) ⇒ Object
Builds a mail to user with his account activation link.
419 420 421 422 423 424 |
# File 'app/models/mailer.rb', line 419 def register(user, token) @token = token @url = url_for(:controller => 'account', :action => 'activate', :token => token.value) mail :to => user.mail, :subject => l(:mail_subject_register, Setting.app_title) end |
#reminder(user, issues, days) ⇒ Object
Builds a reminder mail to user about issues that are due in the next days.
538 539 540 541 542 543 544 545 546 |
# File 'app/models/mailer.rb', line 538 def reminder(user, issues, days) @issues = issues @days = days @issues_url = url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort => 'due_date:asc') mail :to => user, :subject => l(:mail_subject_reminder, :count => issues.size, :days => days) end |
#security_notification(user, sender, options = {}) ⇒ Object
Build a mail to user and the additional recipients given in options about a security related event made by sender.
Example:
security_notification(user,
sender,
message: :mail_body_security_notification_add,
field: :field_mail,
value: address
) => Mail::Message object
444 445 446 447 448 449 450 451 452 453 454 455 456 457 |
# File 'app/models/mailer.rb', line 444 def security_notification(user, sender, ={}) @sender = sender redmine_headers 'Sender' => sender.login @message = l([:message], field: ([:field] && l([:field])), value: [:value] ) @title = [:title] && l([:title]) @remote_ip = [:remote_ip] || @sender.remote_ip @url = [:url] && ([:url].is_a?(Hash) ? url_for([:url]) : [:url]) redmine_headers 'Url' => @url mail :to => [user, *[:recipients]].uniq, :subject => "[#{Setting.app_title}] #{l(:mail_subject_security_notification)}" end |
#settings_updated(user, sender, changes, options = {}) ⇒ Object
Build a mail to user about application settings changes made by sender.
486 487 488 489 490 491 492 493 494 |
# File 'app/models/mailer.rb', line 486 def settings_updated(user, sender, changes, ={}) @sender = sender redmine_headers 'Sender' => sender.login @changes = changes @remote_ip = [:remote_ip] || @sender.remote_ip @url = url_for(controller: 'settings', action: 'index') mail :to => user, :subject => "[#{Setting.app_title}] #{l(:mail_subject_security_notification)}" end |
#test_email(user) ⇒ Object
Build a test email to user.
518 519 520 521 522 |
# File 'app/models/mailer.rb', line 518 def test_email(user) @url = url_for(:controller => 'welcome') mail :to => user, :subject => 'Redmine test' end |
#wiki_content_added(user, wiki_content) ⇒ Object
Builds a mail to user about a new wiki content.
273 274 275 276 277 278 279 280 281 282 283 284 |
# File 'app/models/mailer.rb', line 273 def wiki_content_added(user, wiki_content) redmine_headers 'Project' => wiki_content.project.identifier, 'Wiki-Page-Id' => wiki_content.page.id @author = wiki_content. wiki_content @wiki_content = wiki_content @wiki_content_url = url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title) mail :to => user, :subject => "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}" end |
#wiki_content_updated(user, wiki_content) ⇒ Object
Builds a mail to user about an update of the specified wiki content.
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
# File 'app/models/mailer.rb', line 298 def wiki_content_updated(user, wiki_content) redmine_headers 'Project' => wiki_content.project.identifier, 'Wiki-Page-Id' => wiki_content.page.id @author = wiki_content. wiki_content @wiki_content = wiki_content @wiki_content_url = url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title) @wiki_diff_url = url_for(:controller => 'wiki', :action => 'diff', :project_id => wiki_content.project, :id => wiki_content.page.title, :version => wiki_content.version) mail :to => user, :subject => "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}" end |