问题包括Mandrill Mailer和Rails中的日历附件

我目前正在使用icalendar gem创建一个新的日历,然后通过mandrill_mailer gem作为附件发送它。 我尝试了各种不同的方法 – 到目前为止我相信我最接近:

Event.rb

require 'base64' def self.export_events(user) @event = Event.last @calendar = Icalendar::Calendar.new event = Icalendar::Event.new event.summary = @event.title event.dtstart = @event.start_time.strftime("%Y%m%dT%H%M%S") event.dtend = @event.end_time.strftime("%Y%m%dT%H%M%S") event.description = @event.desc event.location = @event.location @calendar.add_event(event) encoded_cal = Base64.encode64(@calendar.to_ical) CalendarMailer.send_to_ical(user, encoded_cal).deliver end 

calendar_mailer.rb

 class CalendarMailer < MandrillMailer::TemplateMailer default from: "blah@blah.com" # iCal def send_to_ical(user, encoded_cal) mandrill_mail template: "ical-file", subject: "Your iCal file", to: { email: user.email, name: user.name }, inline_css: true, async: true, track_clicks: true, attachments: [ { type: "text/calendar", content: encoded_cal, name: "calendar.ics", } ] end end 

我知道我的邮件设置正确,因为我能够成功发送其他类型的交易电子邮件。 另外,根据这篇SOpost,我无法直接将其作为.ics文件发送,这就是为什么我要发送它的base64编码版本。 以下是我不断做的错误(无论是上面的内容还是创建tmp文件并打开/读取calendar_mailer.rb中新创建的tmp文件):

TypeError:没有pack' from /usr/local/rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/base64.rb:38:in从/usr/local/rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/base64.rb:38:in pack' from /usr/local/rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/base64.rb:38:in中将nil隐式转换为String pack' from /usr/local/rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/base64.rb:38:in encode64’来自/usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0 .2 / gems / mandrill_mailer-0.4.13 / lib / mandrill_mailer / core_mailer.rb:263: block in mandrill_attachment_args' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/core_mailer.rb:258:in mandrill_attachment_args block in mandrill_attachment_args' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/core_mailer.rb:258:in中的block in mandrill_attachment_args' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/core_mailer.rb:258:in /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4 .13 / lib / mandrill_mailer / core_mailer.rb:258: mandrill_attachment_args' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/template_mailer.rb:191:in mandrill_attachment_args mandrill_attachment_args' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/template_mailer.rb:191:in来自/Users/alansalganik/projects/glyfe/app/mailers/calendar_mailer.rb:8:in send_to_ical' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/core_mailer.rb:283:in send_to_ical' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/core_mailer.rb:283:in来自/usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/mandrill_mailer-0.4.13/lib/mandrill_mailer/core_mailer.rb:283:in method_missing' from (irb):763 from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands/console.rb:90:in开始’来自/usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands/console.rb:9:in start' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:69:in来自/ usr start' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:69:in / usr /local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:in run_command!' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands.rb:17:in run_command!' from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/railties-4.1.1/lib/rails/commands.rb:17:in ‘来自bin / rails:4 :在’要求’

提前致谢。

可能不是世界上最好的代码,而是一个例子:

 class Outlook def self.create_cal @calendar = Icalendar::Calendar.new event = Icalendar::Event.new event.summary = "SUMMARY" event.dtstart = Time.now.strftime("%Y%m%dT%H%M%S") event.dtend = (Time.now + 1.hour).strftime("%Y%m%dT%H%M%S") event.description = "DESC" event.location = "Holborn, London WC1V" @calendar.add_event(event) return @calendar.to_ical end end 

 ics_file = Outlook.create_cal mandrill_mail( (...) attachments: [ { content: ics_file, name: 'ical.ics', type: 'text/calendar' } ] ) 
Interesting Posts