From 55f56495f4f1fc1975e4e0f30e1fe6cf2cb8bf0d Mon Sep 17 00:00:00 2001 From: Jimmy Date: Fri, 19 Feb 2021 17:01:24 +0800 Subject: [PATCH 1/5] [feat] Allow embedding user-defined logo and user-defined text in email template --- app/mailers/mailbot.rb | 160 +++++++++++++++------------ app/views/mailbot/email_template.erb | 73 ++++++++++++ config/environments/development.rb | 2 +- 3 files changed, 165 insertions(+), 70 deletions(-) create mode 100644 app/views/mailbot/email_template.erb diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index 15c5846f..93eb450d 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -1,17 +1,19 @@ # frozen_string_literal: true SNAPCON_BCC_ADDRESS = 'messages@snap.berkeley.edu' +EMAIL_TEMPLATE = 'email_template' YTLF_TICKET_ID = 50 class Mailbot < ActionMailer::Base def registration_mail(conference, user) - mail(to: user.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.registration_subject, - body: conference.email_settings.generate_email_on_conf_updates(conference, - user, - conference.email_settings.registration_body)) + @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.registration_body) + @logo = conference.picture.thumb.url + + mail(to: user.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.registration_subject, + template_name: EMAIL_TEMPLATE) end def ticket_confirmation_mail(ticket_purchase) @@ -39,108 +41,128 @@ class Mailbot < ActionMailer::Base def acceptance_mail(event) conference = event.program.conference - mail(to: event.submitter.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.accepted_subject, - body: conference.email_settings.generate_event_mail(event, conference.email_settings.accepted_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.accepted_body) + + mail(to: event.submitter.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.accepted_subject, + template_name: EMAIL_TEMPLATE) end def submitted_proposal_mail(event) conference = event.program.conference - mail(to: event.submitter.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.submitted_proposal_subject, - body: conference.email_settings.generate_event_mail(event, conference.email_settings.submitted_proposal_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.submitted_proposal_body) + + mail(to: event.submitter.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.submitted_proposal_subject, + template_name: EMAIL_TEMPLATE) end def rejection_mail(event) conference = event.program.conference - mail(to: event.submitter.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.rejected_subject, - body: conference.email_settings.generate_event_mail(event, conference.email_settings.rejected_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.rejected_body) + + mail(to: event.submitter.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.rejected_subject, + template_name: EMAIL_TEMPLATE) end def confirm_reminder_mail(event) conference = event.program.conference - mail(to: event.submitter.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.confirmed_without_registration_subject, - body: conference.email_settings.generate_event_mail(event, - conference.email_settings.confirmed_without_registration_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_event_mail(event, conference.email_settings.confirmed_without_registration_body) + + mail(to: event.submitter.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.confirmed_without_registration_subject, + template_name: EMAIL_TEMPLATE) end def conference_date_update_mail(conference, user) - mail(to: user.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.conference_dates_updated_subject, - body: conference.email_settings.generate_email_on_conf_updates(conference, - user, - conference.email_settings.conference_dates_updated_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.conference_dates_updated_body) + + mail(to: user.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.conference_dates_updated_subject, + template_name: EMAIL_TEMPLATE) end def conference_registration_date_update_mail(conference, user) - mail(to: user.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.conference_registration_dates_updated_subject, - body: conference.email_settings.generate_email_on_conf_updates(conference, - user, - conference.email_settings.conference_registration_dates_updated_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.conference_registration_dates_updated_body) + + mail(to: user.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.conference_registration_dates_updated_subject, + template_name: EMAIL_TEMPLATE) end def conference_venue_update_mail(conference, user) - mail(to: user.email, - bcc: SNAPCON_BCC_ADDRESS, - from: conference.contact.email, - subject: conference.email_settings.venue_updated_subject, - body: conference.email_settings.generate_email_on_conf_updates(conference, - user, - conference.email_settings.venue_updated_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.venue_updated_body) + + mail(to: user.email, + bcc: SNAPCON_BCC_ADDRESS, + from: conference.contact.email, + subject: conference.email_settings.venue_updated_subject, + template_name: EMAIL_TEMPLATE) end def conference_schedule_update_mail(conference, user) - mail(to: user.email, - from: conference.contact.email, - subject: conference.email_settings.program_schedule_public_subject, - body: conference.email_settings.generate_email_on_conf_updates(conference, - user, - conference.email_settings.program_schedule_public_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.program_schedule_public_body) + + mail(to: user.email, + from: conference.contact.email, + subject: conference.email_settings.program_schedule_public_subject, + template_name: EMAIL_TEMPLATE) end def conference_cfp_update_mail(conference, user) - mail(to: user.email, - from: conference.contact.email, - subject: conference.email_settings.cfp_dates_updated_subject, - body: conference.email_settings.generate_email_on_conf_updates(conference, - user, - conference.email_settings.cfp_dates_updated_body)) + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.cfp_dates_updated_body) + + mail(to: user.email, + from: conference.contact.email, + subject: conference.email_settings.cfp_dates_updated_subject, + template_name: EMAIL_TEMPLATE) end def conference_booths_acceptance_mail(booth) conference = booth.conference + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_acceptance_body) - mail(to: booth.submitter.email, - from: conference.contact.email, - subject: conference.email_settings.booths_acceptance_subject, - body: conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_acceptance_body)) + mail(to: booth.submitter.email, + from: conference.contact.email, + subject: conference.email_settings.booths_acceptance_subject, + template_name: EMAIL_TEMPLATE) end def conference_booths_rejection_mail(booth) conference = booth.conference + @logo = conference.picture.thumb.url + @email_body = conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_rejection_body) - mail(to: booth.submitter.email, - from: conference.contact.email, - subject: conference.email_settings.booths_rejection_subject, - body: conference.email_settings.generate_booth_mail(booth, conference.email_settings.booths_rejection_body)) + mail(to: booth.submitter.email, + from: conference.contact.email, + subject: conference.email_settings.booths_rejection_subject, + template_name: EMAIL_TEMPLATE) end def event_comment_mail(comment, user) diff --git a/app/views/mailbot/email_template.erb b/app/views/mailbot/email_template.erb new file mode 100644 index 00000000..5c64cf11 --- /dev/null +++ b/app/views/mailbot/email_template.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + Email + + +
+
+ +
<%= image_tag(@logo, style: "display:block") %>
+

+
+
+
+ + <%= @email_body %> + +
+
+

+
+ + diff --git a/config/environments/development.rb b/config/environments/development.rb index c3dcac54..6f2a1042 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,7 +1,7 @@ Osem::Application.configure do # Settings specified here will take precedence over those in config/application.rb - config.action_mailer.delivery_method = :letter_opener + config.action_mailer.delivery_method = :letter_opener_web # In the development environment your application's code is reloaded on # every request. This slows down response time but is perfect for development From e7eca161c7434aca0377690641f543849a741ead Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 23 Feb 2021 16:02:49 -0800 Subject: [PATCH 2/5] [fix] Email will not error out when logo is nil --- app/views/mailbot/email_template.erb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/views/mailbot/email_template.erb b/app/views/mailbot/email_template.erb index 5c64cf11..429553be 100644 --- a/app/views/mailbot/email_template.erb +++ b/app/views/mailbot/email_template.erb @@ -57,7 +57,11 @@
-
<%= image_tag(@logo, style: "display:block") %>
+
+ <% if !@logo.nil? %> + <%= image_tag(@logo, style: "display:block") %> + <% end %> +

From 57f4079d03fa9df23763150c6d61d8ecb535a53e Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 23 Feb 2021 16:31:07 -0800 Subject: [PATCH 3/5] [fix] Fix mailbot rspec test --- spec/mailers/mailbot_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/mailers/mailbot_spec.rb b/spec/mailers/mailbot_spec.rb index 1cbdd8e7..1f739997 100644 --- a/spec/mailers/mailbot_spec.rb +++ b/spec/mailers/mailbot_spec.rb @@ -23,7 +23,7 @@ describe Mailbot do end it 'assigns the email body' do - expect(mail.body).to eq 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' + expect(mail.body).to include 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' end it 'delivers the email' do From e127007c678652b0f8803621d12ef4cb4c8b1b79 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 23 Feb 2021 23:03:33 -0800 Subject: [PATCH 4/5] [feat] Add design elements to all provided templates --- app/views/mailbot/comment_template.text.erb | 85 +++++++++++++++++-- .../ticket_confirmation_template.text.erb | 83 ++++++++++++++++-- ...kers_ticket_confirmation_template.text.erb | 85 +++++++++++++++++-- 3 files changed, 236 insertions(+), 17 deletions(-) diff --git a/app/views/mailbot/comment_template.text.erb b/app/views/mailbot/comment_template.text.erb index 0e7a8c35..d162d710 100644 --- a/app/views/mailbot/comment_template.text.erb +++ b/app/views/mailbot/comment_template.text.erb @@ -1,10 +1,83 @@ -Dear <%= @user.name %>, + + + + + + + + + + + + + + Email + + +
+
+ +
+
+

+
+
+
+ + Dear <%= @user.name %>, + + User <%= @comment.user.name %> posted a new comment for event <%= @event.title %> of <%= @conference.short_title %> . + + "<%= @comment.body %>" + + To reply to this comment, please go to <%= h(admin_conference_program_event_url(@conference.short_title, @event, only_path: false)) %> + + Best wishes, + <%= @conference.title %> Team + +
+
+

+
+ + diff --git a/app/views/mailbot/ticket_confirmation_template.text.erb b/app/views/mailbot/ticket_confirmation_template.text.erb index 08f5175a..0e4e54f8 100644 --- a/app/views/mailbot/ticket_confirmation_template.text.erb +++ b/app/views/mailbot/ticket_confirmation_template.text.erb @@ -1,8 +1,81 @@ -Dear <%= @user.name %>, + + + + + + + + + + + + + + Email + + +
+
+ +
+
+

+
+
+
+ + Dear <%= @user.name %>, + + Thanks! You have successfully booked <%= @ticket_purchase.quantity %> <%= @ticket_purchase.ticket.title %> ticket(s) for the event <%= @conference.title %>. Your transaction id is <%= @ticket_purchase.id %>. + + Please, find the ticket(s) pdf attached. + + Best wishes, + <%= @conference.title %> Team + +
+
+

+
+ + diff --git a/app/views/mailbot/young_thinkers_ticket_confirmation_template.text.erb b/app/views/mailbot/young_thinkers_ticket_confirmation_template.text.erb index e3e52c1f..6a4c7fb5 100644 --- a/app/views/mailbot/young_thinkers_ticket_confirmation_template.text.erb +++ b/app/views/mailbot/young_thinkers_ticket_confirmation_template.text.erb @@ -1,10 +1,83 @@ -Dear <%= @user.name %>, + + + + + + + + + + + + + + Email + + +
+
+ +
+
+

+
+
+
+ + Dear <%= @user.name %>, + + Thanks! You have successfully booked <%= @ticket_purchase.quantity %> <%= @ticket_purchase.ticket.title %> ticket(s) for the event <%= @conference.title %>. Your transaction id is <%= @ticket_purchase.id %>. + + Please, find the ticket(s) pdf attached. + + The SAP Young Thinkers team will reach out to you with information on how to participate in the event soon. In the meantime, you can check the event page (https://events.sap.com/yt-learning-festival-at-snapcon-2020/en/home) or send an email with your questions to youngthinkers@sap.com. + + Best wishes, + <%= @conference.title %> Team + +
+
+

+
+ + From 4ee70899f5783f61714779f41aae88287955efb3 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 24 Feb 2021 22:17:47 -0800 Subject: [PATCH 5/5] [fix] Fix style --- app/mailers/mailbot.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index 93eb450d..c055ec84 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -136,7 +136,7 @@ class Mailbot < ActionMailer::Base def conference_cfp_update_mail(conference, user) @logo = conference.picture.thumb.url @email_body = conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.cfp_dates_updated_body) - + mail(to: user.email, from: conference.contact.email, subject: conference.email_settings.cfp_dates_updated_subject,