class Howitzer::MailAdapters::Mailgun
This class represents Mailgun
mail adapter
Public Class Methods
find(recipient, subject, wait:)
click to toggle source
Finds an email in storage @note emails are stored for 3 days only! @param recipient [String] an email @param subject [String] @param wait [Integer] how much time is required to wait an email @raise [EmailNotFoundError] if blank message
# File lib/howitzer/mail_adapters/mailgun.rb, line 16 def self.find(recipient, subject, wait:) message = {} retryable(find_retry_params(wait)) { message = retrieve_message(recipient, subject) } return new(message) if message.present? raise Howitzer::EmailNotFoundError, "Message with subject '#{subject}' for recipient '#{recipient}' was not found." end
Private Class Methods
event_by(recipient, subject)
click to toggle source
# File lib/howitzer/mail_adapters/mailgun.rb, line 90 def self.event_by(recipient, subject) events.to_h['items'].find do |hash| hash['message']['recipients'].first == recipient && subject === hash['message']['headers']['subject'] end end
events()
click to toggle source
# File lib/howitzer/mail_adapters/mailgun.rb, line 83 def self.events MailgunApi::Connector.instance.client.get( "#{MailgunApi::Connector.instance.domain}/events", params: { event: 'stored' } ) end
find_retry_params(wait)
click to toggle source
# File lib/howitzer/mail_adapters/mailgun.rb, line 97 def self.find_retry_params(wait) { timeout: wait || Howitzer.try(:mailgun_idle_timeout), sleep: Howitzer.mail_sleep_time || Howitzer.mailgun_sleep_time, silent: true, logger: Howitzer::Log, on: Howitzer::EmailNotFoundError } end
retrieve_message(recipient, subject)
click to toggle source
# File lib/howitzer/mail_adapters/mailgun.rb, line 108 def self.retrieve_message(recipient, subject) event = event_by(recipient, subject) raise Howitzer::EmailNotFoundError, 'Message not received yet, retry...' unless event message_url = event['storage']['url'] MailgunApi::Connector.instance.client.get_url(message_url).to_h end
Public Instance Methods
html_body()
click to toggle source
@return [String] html body of the email message
# File lib/howitzer/mail_adapters/mailgun.rb, line 33 def html_body message['stripped-html'] end
mail_from()
click to toggle source
@return [String] an email address specified in ‘From` field
# File lib/howitzer/mail_adapters/mailgun.rb, line 45 def mail_from message['From'] end
mime_part()
click to toggle source
@return [Array] attachments
# File lib/howitzer/mail_adapters/mailgun.rb, line 69 def mime_part message['attachments'] end
mime_part!()
click to toggle source
@raise [NoAttachmentsError] if no attachments present @return [Array] attachments
# File lib/howitzer/mail_adapters/mailgun.rb, line 76 def mime_part! files = mime_part return files if files.present? raise Howitzer::NoAttachmentsError, 'No attachments were found.' end
plain_text_body()
click to toggle source
@return [String] plain text body of the email message
# File lib/howitzer/mail_adapters/mailgun.rb, line 27 def plain_text_body message['body-plain'] end
received_time()
click to toggle source
@return [String] when email was received
# File lib/howitzer/mail_adapters/mailgun.rb, line 57 def received_time message['Received'][/\w+, \d+ \w+ \d+ \d+:\d+:\d+ -\d+ \(\w+\)$/] end
recipients()
click to toggle source
@return [String] recipient emails separated with ‘, `
# File lib/howitzer/mail_adapters/mailgun.rb, line 51 def recipients message['To'].split ', ' end
sender_email()
click to toggle source
@return [String] a real sender email address
# File lib/howitzer/mail_adapters/mailgun.rb, line 63 def sender_email message['sender'] end
text()
click to toggle source
@return [String] stripped text
# File lib/howitzer/mail_adapters/mailgun.rb, line 39 def text message['stripped-text'] end