class Griddler::Email
Attributes
attachments[R]
bcc[R]
body[R]
cc[R]
charsets[R]
from[R]
headers[R]
original_recipient[R]
params[R]
raw_body[R]
raw_headers[R]
raw_html[R]
raw_text[R]
reply_to[R]
spam_report[R]
subject[R]
to[R]
vendor_specific[R]
Public Class Methods
new(params)
click to toggle source
# File lib/griddler/email.rb, line 25 def initialize(params) @params = params @to = recipients(:to) @from = extract_address(params[:from]) @subject = extract_subject @body = extract_body @raw_text = params[:text] @raw_html = params[:html] @raw_body = @raw_text.presence || @raw_html @headers = extract_headers @cc = recipients(:cc) @bcc = recipients(:bcc) @original_recipient = extract_address(params[:original_recipient]) @reply_to = extract_address(params[:reply_to]) @raw_headers = params[:headers] @attachments = params[:attachments] @vendor_specific = params.fetch(:vendor_specific, {}) @spam_report = params[:spam_report] @charsets = params[:charsets] end
Public Instance Methods
spam_score()
click to toggle source
# File lib/griddler/email.rb, line 76 def spam_score @spam_report[:score] if @spam_report end
to_h()
click to toggle source
# File lib/griddler/email.rb, line 55 def to_h @to_h ||= { to: to, from: from, cc: cc, bcc: bcc, subject: subject, body: body, raw_body: raw_body, raw_text: raw_text, raw_html: raw_html, headers: headers, raw_headers: raw_headers, attachments: attachments, vendor_specific: vendor_specific, spam_score: spam_score, spam_report: spam_report, charsets: charsets, } end
Private Instance Methods
clean_html(html)
click to toggle source
# File lib/griddler/email.rb, line 130 def clean_html(html) cleaned_html = clean_invalid_utf8_bytes(html) cleaned_html = strip_tags(cleaned_html) cleaned_html = HTMLEntities.new.decode(cleaned_html) cleaned_html end
clean_invalid_utf8_bytes(text)
click to toggle source
# File lib/griddler/email.rb, line 153 def clean_invalid_utf8_bytes(text) if text && !text.valid_encoding? text.force_encoding('ISO-8859-1').encode('UTF-8') else text end end
clean_text(text)
click to toggle source
# File lib/griddler/email.rb, line 126 def clean_text(text) clean_invalid_utf8_bytes(text) end
config()
click to toggle source
# File lib/griddler/email.rb, line 84 def config @config ||= Griddler.configuration end
deep_clean_invalid_utf8_bytes(object)
click to toggle source
# File lib/griddler/email.rb, line 137 def deep_clean_invalid_utf8_bytes(object) case object when Hash object.inject({}) do |clean_hash, (key, dirty_value)| clean_hash[key] = deep_clean_invalid_utf8_bytes(dirty_value) clean_hash end when Array object.map { |element| deep_clean_invalid_utf8_bytes(element) } when String clean_invalid_utf8_bytes(object) else object end end
extract_address(address)
click to toggle source
# File lib/griddler/email.rb, line 94 def extract_address(address) clean_address = clean_text(address) EmailParser.parse_address(clean_address) if clean_address =~ /@/ end
extract_body()
click to toggle source
# File lib/griddler/email.rb, line 103 def extract_body EmailParser.extract_reply_body(text_or_sanitized_html) end
extract_cc_from_headers(headers)
click to toggle source
# File lib/griddler/email.rb, line 117 def extract_cc_from_headers(headers) EmailParser.extract_cc(headers) end
extract_headers()
click to toggle source
# File lib/griddler/email.rb, line 107 def extract_headers if params[:headers].is_a?(Hash) deep_clean_invalid_utf8_bytes(params[:headers]) elsif params[:headers].is_a?(Array) deep_clean_invalid_utf8_bytes(params[:headers]) else EmailParser.extract_headers(clean_invalid_utf8_bytes(params[:headers])) end end
extract_subject()
click to toggle source
# File lib/griddler/email.rb, line 99 def extract_subject clean_text(params[:subject]) end
recipients(type)
click to toggle source
# File lib/griddler/email.rb, line 88 def recipients(type) params[type].to_a.reject(&:empty?).map do |recipient| extract_address(recipient) end.compact end
text_or_sanitized_html()
click to toggle source
# File lib/griddler/email.rb, line 121 def text_or_sanitized_html text = clean_text(params.fetch(:text, '')) text.presence || clean_html(params.fetch(:html, '')).presence end