Class: Mailosaur::Files

Inherits:
Object
  • Object
show all
Defined in:
lib/Mailosaur/files.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(conn, handle_http_error) ⇒ Files

Creates and initializes a new instance of the Files class.

Parameters:

  • client

    connection.



7
8
9
10
# File 'lib/Mailosaur/files.rb', line 7

def initialize(conn, handle_http_error)
  @conn = conn
  @handle_http_error = handle_http_error
end

Instance Attribute Details

#connConnection (readonly)

Returns the client connection.

Returns:

  • (Connection)

    the client connection.



13
14
15
# File 'lib/Mailosaur/files.rb', line 13

def conn
  @conn
end

Instance Method Details

#get_attachment(id) ⇒ NOT_IMPLEMENTED

Download an attachment

Downloads a single attachment. Simply supply the unique identifier for the required attachment.

Parameters:

  • id

    The identifier of the attachment to be downloaded.

Returns:

  • (NOT_IMPLEMENTED)

    operation results.



25
26
27
28
29
# File 'lib/Mailosaur/files.rb', line 25

def get_attachment(id)
  response = conn.get "api/files/attachments/#{id}"
  @handle_http_error.call(response) unless response.status == 200
  response.body
end

#get_email(id) ⇒ NOT_IMPLEMENTED

Download EML

Downloads an EML file representing the specified email. Simply supply the unique identifier for the required email.

Parameters:

  • id

    The identifier of the email to be downloaded.

Returns:

  • (NOT_IMPLEMENTED)

    operation results.



41
42
43
44
45
# File 'lib/Mailosaur/files.rb', line 41

def get_email(id)
  response = conn.get "api/files/email/#{id}"
  @handle_http_error.call(response) unless response.status == 200
  response.body
end

#get_preview(id) ⇒ NOT_IMPLEMENTED

Download an email preview

Downloads a screenshot of your email rendered in a real email client. Simply supply the unique identifier for the required preview.

Parameters:

  • id

    The identifier of the email preview to be downloaded.

Returns:

  • (NOT_IMPLEMENTED)

    operation results.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/Mailosaur/files.rb', line 57

def get_preview(id)
  timeout = 120_000
  poll_count = 0
  start_time = Time.now.to_f

  loop do
    response = conn.get "api/files/screenshots/#{id}"

    return response.body if response.status == 200

    @handle_http_error.call(response) unless response.status == 202

    delay_pattern = (response.headers['x-ms-delay'] || '1000').split(',').map(&:to_i)

    delay = poll_count >= delay_pattern.length ? delay_pattern[delay_pattern.length - 1] : delay_pattern[poll_count]

    poll_count += 1

    ## Stop if timeout will be exceeded
    if ((1000 * (Time.now.to_f - start_time).to_i) + delay) > timeout
      msg = format('An email preview was not generated in time. The email client may not be available, or the preview ID [%s] may be incorrect.', id)
      raise Mailosaur::MailosaurError.new(msg, 'preview_timeout')
    end

    sleep(delay / 1000.0)
  end
end