I work with Rails 4.2 application and I need to attach a PDF version of the mail to the mail itself. I found a way to render and convert rendered view into PDF, but adding an attachment to the mail causes not sending its content. The code for sending with attachment:
def failed_charge(bill) @monthly_bill = bill @organization = bill.organization @edit_account_url = edit_account_url(organization) I18n.with_locale(organization.locale) do @date = I18n.l Time.now.utc.to_date, format: :medium @display_period = [bill.period_start, bill.period_end] .map { |t| I18n.l(t.to_date, format: :medium).strip } .join(' – ') invoice_content = WickedPdf.new.pdf_from_string( render_to_string(template: 'billing_mailer/failed_charge'), { margin: {top: 0, bottom: 0, left: 0, right: 0} } ) File.open('invoice.pdf', 'wb') do |file| file.write invoice_content end attachments['invoice.pdf'] = invoice_content mail( to: bill.billing_email, bcc: [INVOICES_EMAIL_FULL, SUPPORT_EMAIL_FULL], subject: I18n.t('billing_mailer.subject_failed_charge'), ) end end
The resulted mail:
Date: Wed, 08 Sep 2021 19:13:16 0400 From: GlassFrog Billing To: [email protected] Message-ID: Subject: There was a problem charging your credit card for GlassFrog Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="--==_mimepart_6138d30c9a0db_7215116ac5527d"; charset=UTF-8 Content-Transfer-Encoding: 7bit
The code without sending an attachment:
def failed_charge(bill) @monthly_bill = bill @organization = bill.organization @edit_account_url = edit_account_url(organization) I18n.with_locale(organization.locale) do @date = I18n.l Time.now.utc.to_date, format: :medium @display_period = [bill.period_start, bill.period_end] .map { |t| I18n.l(t.to_date, format: :medium).strip } .join(' – ') invoice_content = WickedPdf.new.pdf_from_string( render_to_string(template: 'billing_mailer/failed_charge'), { margin: {top: 0, bottom: 0, left: 0, right: 0} } ) File.open('invoice.pdf', 'wb') do |file| file.write invoice_content end mail( to: bill.billing_email, bcc: [INVOICES_EMAIL_FULL, SUPPORT_EMAIL_FULL], subject: I18n.t('billing_mailer.subject_failed_charge'), ) end end
The resulted mail:
Date: Wed, 08 Sep 2021 19:22:18 0400 From: GlassFrog Billing To: [email protected] Message-ID: Subject: There was a problem charging your credit card for GlassFrog Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_6138d52a674b5_75fc116ac69560"; charset=UTF-8 Content-Transfer-Encoding: 7bit ----==_mimepart_6138d52a674b5_75fc116ac69560 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable GlassFrog Logo Sep 8, 2021 *********************************************************** There was a problem charging your credit card for GlassFrog *********************************************************** Dear Sally Payer, There was a problem charging your credit card for your GlassFrog account for last month (Feb 1, 2015 =E2=80=93 Feb 28, 2015). Please update your credit card information in GlassFrog by visiting your organization's Billing & Plans Administration Page ( http://app.glassfrog.local:16124/accounts/15570897/edit ). We will make a second attempt to charge your card on the 10th of the month. Note that accounts that are 10 days past due will be downgraded from Premium to Free, with limited features, until payment is current. If you have any questions or need any help, please don't hesitate to reply to this email or contact us ( http://glassfrog.com/contact ). Regards, GlassFrog Billing To: Billing Shell From: HolacracyOne, LLC 12333 Sowden Rd. Ste B #33583 Houston, Texas 77080-2059 USA ------- Details ------- Invoice # 104275561 Date Description Amount Feb 1, 2015 - Feb 28, 2015 Premium Plan 8 users @9/Month each $72.00 Total $72.00 ref. org/15570897 HolacracyOne, LLC 12333 Sowden Rd. Ste B #33583, Houston, Texas 77080-2059= ----==_mimepart_6138d52a674b5_75fc116ac69560 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable = = GlassFrog Sep 8, 2021 There was a problem charging your credit card for GlassFrog Dear Sally Payer, There was a problem charging your credit card for your GlassFrog account = for last month (Feb 1, 2015 =E2=80=93 Feb 28, 2015). Please update your c= redit card information in GlassFrog by visiting your organization's B= illing & Plans Administration Page. We will make a second attempt= to charge your card on the 10th of the month. Note that accounts that are 10 days past due will be downgraded from Prem= ium to Free, with limited features, until payment is current. If you have any questions or need any help, please don't hesitate to repl= y to this email or cont= act us. Regards,
GlassFrog Billing = To: Billing Shell From: HolacracyOne, LLC
12333 Sowden Rd.
Ste B #33583
Houston, Texas 77080-2059
USADetails
Invoice # 104275561 Date Description Amount Feb 1, 2015 -= Feb 28, 2015= Premium Plan 8 users @9/Month each
$72.00 Total $72.00 ref. org/15570897 HolacracyOne, LLC 12333 Sowden Rd. Ste B #33583, Houston, Texas 77080-2059 ----==_mimepart_6138d52a674b5_75fc116ac69560--
P.S. Writing to file is for debugging purposes
CodePudding user response:
The problem was in base class, where there was the line:
after_action :convert_ul_to_table
def convert_ul_to_table
body = message.body.to_s
message.body = to_table(Rinku.auto_link(body))
end
Adding check for attachments fixed the problem:
def convert_ul_to_table
return nil unless message.attachments.empty?
body = message.body.to_s
message.body = to_table(Rinku.auto_link(body))
end