2016-12-01 1 views
0

내 앱이 .ics 첨부 파일을 사용하여 이메일을 보내야합니다. 현재.ics 파일을 만들지 않고 이메일로 보낼 수 있습니까?

내가 가진 사용자가 웹 페이지의 링크를 클릭을 .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