2016-12-01 18 views
0

私のアプリは.ics添付ファイルを持つユーザーに電子メールを送信する必要があります。作成しないで.icsファイルを電子メールで送信できますか?

現在、私は、ユーザーがWebページ上のリンクをクリックしたときの.icsファイルをレンダリングするアクションがあります。

def invite 
    cal = Icalendar::Calendar.new 
    cal.event do |e| 
    e.dtstart  = Icalendar::Values::Date.new('20050428') 
    e.dtend  = Icalendar::Values::Date.new('20050429') 
    e.summary  = "Meeting with the man." 
    e.description = "Have a long lunch meeting and decide nothing..." 
    e.ip_class = "PRIVATE" 
    end 
    cal.publish 
    render text: cal.to_ical 
end 

リンク:に

<%= link_to 'Download .ics file with right click', invite_path(format: :ics) %> 

が、それはすべてでは可能ですが同じ方法で、最初にファイルを作成したり保存したりせずに電子メールに添付ファイルを添付することができますか?

もしそうなら、私はこれをどうやってやりますか?

答えて

1

メーラ添付ファイルを使用してファイルを送信できるはずです。ファイルの内容には、MIMEタイプをtext/calendarに設定し、.to_icalを使用します。

cal変数をメーラーに渡します。

def invite 
    cal = Icalendar::Calendar.new 
    cal.event do |e| 
    e.dtstart  = Icalendar::Values::Date.new('20050428') 
    e.dtend  = Icalendar::Values::Date.new('20050429') 
    e.summary  = "Meeting with the man." 
    e.description = "Have a long lunch meeting and decide nothing..." 
    e.ip_class = "PRIVATE" 
    end 
    cal.publish 
    InviteMailer.invite(current_user.email, cal).deliver_later # or .deliver_now 
    render text: cal.to_ical 
end 

添付ファイルを設定します。

class InviteMailer < ApplicationMailer 
    def invite(recipient, cal) 
    mail.attachments['invite.ics'] = { mime_type: 'text/calendar', content: cal.to_ical } 
    mail(to: recipient, subject: 'Invite') 
    end 
end 

(私はこれをテストしていない。)

http://api.rubyonrails.org/classes/ActionMailer/Base.html#class-ActionMailer%3a%3aBase-label-Attachments
http://guides.rubyonrails.org/action_mailer_basics.html

関連する問題