Class: MicrosoftGraphMailer::Delivery

Inherits:
Object
  • Object
show all
Defined in:
lib/microsoft_graph_mailer/delivery.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(microsoft_graph_settings) ⇒ Delivery

Returns a new instance of Delivery.



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/microsoft_graph_mailer/delivery.rb', line 9

def initialize(microsoft_graph_settings)
  @microsoft_graph_settings = microsoft_graph_settings

  [:user_id, :tenant, :client_id, :client_secret].each do |setting|
    unless microsoft_graph_settings[setting]
      raise MicrosoftGraphMailer::ConfigurationError, "'#{setting}' is missing"
    end
  end

  @microsoft_graph_settings[:azure_ad_endpoint] ||= "https://login.microsoftonline.com"
  @microsoft_graph_settings[:graph_endpoint] ||= "https://graph.microsoft.com"
end

Instance Attribute Details

#microsoft_graph_settingsObject (readonly)

Returns the value of attribute microsoft_graph_settings.



7
8
9
# File 'lib/microsoft_graph_mailer/delivery.rb', line 7

def microsoft_graph_settings
  @microsoft_graph_settings
end

Instance Method Details

#deliver!(message) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/microsoft_graph_mailer/delivery.rb', line 22

def deliver!(message)
  # https://github.com/mikel/mail/pull/872
  if message[:bcc]
    previous_message_bcc_include_in_headers = message[:bcc].include_in_headers
    message[:bcc].include_in_headers = true
  end

  message_in_mime_format = message.encoded

  client = MicrosoftGraphMailer::Client.new(
    user_id: microsoft_graph_settings[:user_id],
    tenant: microsoft_graph_settings[:tenant],
    client_id: microsoft_graph_settings[:client_id],
    client_secret: microsoft_graph_settings[:client_secret],
    azure_ad_endpoint: microsoft_graph_settings[:azure_ad_endpoint],
    graph_endpoint: microsoft_graph_settings[:graph_endpoint]
  )

  response = client.send_mail(message_in_mime_format)

  raise MicrosoftGraphMailer::DeliveryError unless response.status == 202

  response
ensure
  message[:bcc].include_in_headers = previous_message_bcc_include_in_headers if message[:bcc]
end