2013-11-27 4 views
1

Я пытаюсь отправить запрос календаря ics через рельсовую почту. Я застрял в том, как вводить запрос календаря в электронное письмо, чтобы Outlook отображал приглашение accept/reduce/maybe. Это код для почтовой программы.Как установить тип содержимого в Action Mailer (Rails 4.0.1)?

class CalendarMailer < ActionMailer::Base 
    default from: "[email protected]", 
      content_type: "text/calendar" 

    def send_schedule_request(user, time_request) 
    body = File.open("#{Rails.root}/public/schedule_requests/{time_request.id}.ics","r").read 

    headers['Content-Type'] = "text/calendar" 

    mail(to: user.email, 
     body: body, 
     content_type: "text/calendar", 
     subject: "#{time_request.time_request_type ? time_request.time_request_type.name : ""} #{time_request.name}") 
    end 
end 

где файл генерируется следующий блок кода

def create_calendar_event(event, creator, approvers) 
    File.open("#{Rails.root}/public/schedule_requests/#{event.id}.ics", "w") do |file| 
    file.write "BEGIN:VCALENDAR\n" 
    file.write "METHOD:REQUEST\n" 
    file.write "PRODID:Microsoft Exchange Server 2010\n" 
    file.write "VERSION:2.0\n" 
    file.write "BEGIN:VTIMEZONE\n" 
    file.write "TZID:Eastern Standard Time\n" 
    file.write "BEGIN:STANDARD\n" 
    file.write "DTSTART:16010101T020000\n" 
    file.write "TZOFFSETFROM:-0400\n" 
    file.write "TZOFFSETTO:-0500\n" 
    file.write "RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11\n" 
    file.write "END:STANDARD\n" 
    file.write "BEGIN:DAYLIGHT\n" 
    file.write "DTSTART:16010101T020000\n" 
    file.write "TZOFFSETFROM:-0500\n" 
    file.write "TZOFFSETTO:-0400\n" 
    file.write "RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3\n" 
    file.write "END:DAYLIGHT\n" 
    file.write "END:VTIMEZONE\n" 
    file.write "BEGIN:VEVENT\n" 
    file.write "ORGANIZER;CN=#{creator.first_name} #{creator.last_name}:MAILTO:#{creator.email}\n" 
    approvers.each do |approver| 
     file.write "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=#{approver.first_name} #{approver.last_name}:MAILTO:#{approver.email}\n" 
    end 
    file.write "DESCRIPTION;LANGUAGE=en-US:#{event.comment}\n" 
    file.write "SUMMARY;LANGUAGE=en-US:#{event.time_request_type ? event.time_request_type.name : "Event"} #{event.name}\n" 
    file.write "DTSTART;TZID=Eastern Standard Time:#{event.from.strftime("%Y%m%dT%H%M%S")}\n" 
    file.write "DTEND;TZID=Eastern Standard Time:#{event.to.strftime("%Y%m%dT%H%M%S")}\n" 
    file.write "UID: time-tracker-generated-event-#{event.id}-#{creator.email}\n" 
    file.write "CLASS:PUBLIC\n" 
    file.write "PRIORITY:5\n" 
    file.write "DTSTAMP:#{DateTime.now.strftime("%Y%m%dT%H%M%SZ")}\n" 
    file.write "TRANSP:OPAQUE\n" 
    file.write "STATUS:CONFIRMED\n" 
    file.write "SEQUENCE:0\n" 
    file.write "LOCATION;LANGUAGE=en-US:\n" 
    file.write "X-MICROSOFT-CDO-APPT-SEQUENCE:0\n" 
    file.write "X-MICROSOFT-CDO-OWNERAPPTID:-1531201571\n" 
    file.write "X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE\n" 
    file.write "X-MICROSOFT-CDO-INTENDEDSTATUS:FREE\n" 
    file.write "X-MICROSOFT-CDO-ALLDAYEVENT:FALSE\n" 
    file.write "X-MICROSOFT-CDO-IMPORTANCE:1\n" 
    file.write "X-MICROSOFT-CDO-INSTTYPE:0\n" 
    file.write "X-MICROSOFT-DISALLOW-COUNTER:FALSE\n" 
    file.write "END:VEVENT\n" 
    file.write "END:VCALENDAR\n" 
    end 
end 

Мой первый вопрос, как я установить содержание/тип почтового объекта в Rails 4? Вы могли бы подумать, что между одним из трех методов, которые я использую, рельсы выяснят, что я хочу, чтобы это было «text/Calendar», а не «text/plain». Я не уверен, есть ли что-нибудь еще, что я должен спросить о моей конечной цели отправки приглашения на календарь, так как я не прошел мимо проблемы типа содержимого. Любая помощь приветствуется.

+0

стороне: Не используйте 'текст/Calendar' – Zabba

+0

@Zabba что я должен использовать вместо текста/календарь? Сгенерированный запрос события от Outlook использует этот тип MIME? – bulletshot60

+0

Мой плохой. Я не исследовал, был ли он действительным типом mime. – Zabba

ответ

2

Кажется, это ошибка в ActionMailer. Вот дрянное обходное решение, которое я сейчас использую.

Старый код:

headers['Content-Type'] = 'text/html' 
mail to: to, from: from, subject: subject, body: body 

Сейчас:

mail to: to, from: from, subject: subject do |format| 
    format.html { render html: body } 
end 
Смежные вопросы