С icalendar
Добавьте этот камень к вашему Gemfile
gem 'mail'
gem 'icalendar'
Вы должны настроить почтовый гем внутри config/enviroment.rb
, например, для RoR 4.2
# Load the Rails application.
require File.expand_path('../application', __FILE__)
# Initialize the Rails application.
Rails.application.initialize!
# Initialize sendgrid
ActionMailer::Base.smtp_settings = {
:user_name => 'username',
:password => 'password',
:domain => 'something.com',
:address => 'smtp.something.com',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
Модель пользователя
has_may :calendar_events
Поля
CalendarEvent модель
belongs_to :user
Поля
- название
- описание
- start_time
- end_time
приложение / отправители / mail_notifier.rb
class MailNotifier < ActionMailer::Base
default from: 'test@something.com'
def send_calendar_event(calendar_event, organizer)
@cal = Icalendar::Calendar.new
@cal.event do |e|
e.dtstart = calendar_event.start_time
e.dtend = calendar_event.end_time
e.summary = calendar_event.title
e.organizer = "mailto:#{organizer.mail}"
e.organizer = Icalendar::Values::CalAddress.new("mailto:#{organizer.mail}", cn: organizer.fullname)
e.description = calendar_event.description
end
mail.attachments['calendar_event.ics'] = { mime_type: 'text/calendar', content: @cal.to_ical }
mail(to: calendar_event.user.mail,
subject: "[SUB] #{calendar_event.description} from #{l(calendar_event.start_time, format: :default)}")
end
end
Теперь вы можете вызывать MailNotifier из контроллера со следующим кодом
MailNotifier.send_calendar_event(@calendar_event, organizer_user).deliver