Class: Resend::Mailer
- Inherits:
-
Object
- Object
- Resend::Mailer
- Defined in:
- lib/resend/mailer.rb
Overview
Mailer class used by railtie
Constant Summary collapse
- IGNORED_HEADERS =
These are set as ‘headers` by the Rails API, but these will be filtered out when constructing the Resend API payload, since they’re are sent as post params. resend.com/docs/api-reference/emails/send-email
%w[ cc bcc from reply-to to subject mime-version html text content-type tags scheduled_at headers ].freeze
Instance Attribute Summary collapse
-
#config ⇒ Object
Returns the value of attribute config.
-
#settings ⇒ Object
Returns the value of attribute settings.
Instance Method Summary collapse
-
#build_resend_params(mail) ⇒ Object
Builds the payload for sending.
-
#cleanup_headers(headers) ⇒ Object
Remove nils from header values.
-
#deliver!(mail) ⇒ Object
Overwritten deliver! method.
-
#get_addons(mail) ⇒ Object
Add cc, bcc, reply_to fields.
-
#get_attachments(mail) ⇒ Object
Handle attachments when present.
-
#get_contents(mail) ⇒ Object
Gets the body of the email.
-
#get_from(input) ⇒ Object
Properly gets the ‘from` attr.
-
#get_headers(mail) ⇒ Object
Add custom headers fields.
-
#get_tags(mail) ⇒ Object
Add tags fields.
-
#headers_values(mail) ⇒ Object
Gets the values of the headers that are set through the ‘#headers` method.
-
#initialize(config) ⇒ Mailer
constructor
A new instance of Mailer.
-
#mail_headers_values(mail) ⇒ Object
Gets the values of the headers that are set through the ‘#mail` method.
-
#unignored_headers(mail) ⇒ Object
Get all headers that are not ignored.
Constructor Details
#initialize(config) ⇒ Mailer
Returns a new instance of Mailer.
21 22 23 24 25 26 27 |
# File 'lib/resend/mailer.rb', line 21 def initialize(config) @config = config raise Resend::Error.new("Make sure your API Key is set", @config) unless Resend.api_key # avoids NilError exception @settings = { return_response: true } end |
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
8 9 10 |
# File 'lib/resend/mailer.rb', line 8 def config @config end |
#settings ⇒ Object
Returns the value of attribute settings.
8 9 10 |
# File 'lib/resend/mailer.rb', line 8 def settings @settings end |
Instance Method Details
#build_resend_params(mail) ⇒ Object
Builds the payload for sending
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/resend/mailer.rb', line 50 def build_resend_params(mail) params = { from: get_from(mail), to: mail.to, subject: mail.subject } params.merge!(get_addons(mail)) params.merge!(get_headers(mail)) params.merge!((mail)) params[:attachments] = (mail) if mail..present? params.merge!(get_contents(mail)) params end |
#cleanup_headers(headers) ⇒ Object
Remove nils from header values
96 97 98 |
# File 'lib/resend/mailer.rb', line 96 def cleanup_headers(headers) headers.delete_if { |_k, v| v.nil? } end |
#deliver!(mail) ⇒ Object
Overwritten deliver! method
36 37 38 39 40 41 |
# File 'lib/resend/mailer.rb', line 36 def deliver!(mail) params = build_resend_params(mail) resp = Resend::Emails.send(params) mail. = resp[:id] if resp[:error].nil? resp end |
#get_addons(mail) ⇒ Object
Add cc, bcc, reply_to fields
146 147 148 149 150 151 152 |
# File 'lib/resend/mailer.rb', line 146 def get_addons(mail) params = {} params[:cc] = mail.cc if mail.cc.present? params[:bcc] = mail.bcc if mail.bcc.present? params[:reply_to] = mail.reply_to if mail.reply_to.present? params end |
#get_attachments(mail) ⇒ Object
Handle attachments when present
196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/resend/mailer.rb', line 196 def (mail) = [] mail..each do |part| = { filename: part.filename, content: part.body.decoded.bytes } .append() end end |
#get_contents(mail) ⇒ Object
Gets the body of the email
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/resend/mailer.rb', line 161 def get_contents(mail) params = {} case mail.mime_type when "text/plain" params[:text] = mail.body.decoded when "text/html" params[:html] = mail.body.decoded when "multipart/alternative", "multipart/mixed", "multipart/related" params[:text] = mail.text_part.decoded if mail.text_part params[:html] = mail.html_part.decoded if mail.html_part end params end |
#get_from(input) ⇒ Object
Properly gets the ‘from` attr
182 183 184 185 186 187 188 189 |
# File 'lib/resend/mailer.rb', line 182 def get_from(input) return input.from.first if input[:from].nil? from = input[:from].formatted return from.first if from.is_a? Array from.to_s end |
#get_headers(mail) ⇒ Object
Add custom headers fields.
Both ways are supported:
1. Through the `#mail()` method ie:
mail(headers: { "X-Custom-Header" => "value" })
2. Through the Rails `#headers` method ie:
headers["X-Custom-Header"] = "value"
setting the header values through the ‘#mail` method will overwrite values set through the `#headers` method using the same key.
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/resend/mailer.rb', line 83 def get_headers(mail) params = {} if mail[:headers].present? || unignored_headers(mail).present? params[:headers] = {} params[:headers].merge!(headers_values(mail)) if unignored_headers(mail).present? params[:headers].merge!(mail_headers_values(mail)) if mail[:headers].present? end params end |
#get_tags(mail) ⇒ Object
Add tags fields
133 134 135 136 137 |
# File 'lib/resend/mailer.rb', line 133 def (mail) params = {} params[:tags] = mail[:tags].unparsed_value if mail[:tags].present? params end |
#headers_values(mail) ⇒ Object
Gets the values of the headers that are set through the ‘#headers` method
117 118 119 120 121 122 123 124 |
# File 'lib/resend/mailer.rb', line 117 def headers_values(mail) params = {} unignored_headers(mail).each do |h| params[h.name.to_s] = h.unparsed_value end cleanup_headers(params) params end |
#mail_headers_values(mail) ⇒ Object
Gets the values of the headers that are set through the ‘#mail` method
104 105 106 107 108 109 110 111 |
# File 'lib/resend/mailer.rb', line 104 def mail_headers_values(mail) params = {} mail[:headers].unparsed_value.each do |k, v| params[k.to_s] = v end cleanup_headers(params) params end |
#unignored_headers(mail) ⇒ Object
Get all headers that are not ignored
215 216 217 |
# File 'lib/resend/mailer.rb', line 215 def unignored_headers(mail) @unignored_headers ||= mail.header_fields.reject { |h| IGNORED_HEADERS.include?(h.name.downcase) } end |