# `GraphApi.Mail`
[🔗](https://github.com/keenmate/microsoft_graph/blob/v1.0.0-rc.1/lib/graph_api/resources/mail.ex#L1)

Operations on mail resources (`/users/{id}/messages`, `/users/{id}/sendMail`, etc.).

## Examples

    # List messages
    {:ok, %{"value" => messages}} = GraphApi.Mail.list_messages("user-id")

    # Send mail
    GraphApi.Mail.send_mail("user-id", %{
      subject: "Hello",
      body: %{contentType: "Text", content: "Hi there"},
      toRecipients: [%{emailAddress: %{address: "bob@contoso.com"}}]
    })

# `create_draft`

```elixir
@spec create_draft(String.t(), map(), keyword()) :: {:ok, map()} | {:error, term()}
```

Creates a draft message in the user's Drafts folder.

# `create_draft_query`

```elixir
@spec create_draft_query(String.t(), map(), keyword()) :: GraphApi.Batch.Request.t()
```

Batch query variant of `create_draft/3`.

# `delete_message`

```elixir
@spec delete_message(String.t(), String.t(), keyword()) :: :ok | {:error, term()}
```

Deletes a message.

# `delete_message_query`

```elixir
@spec delete_message_query(String.t(), String.t(), keyword()) ::
  GraphApi.Batch.Request.t()
```

Batch query variant of `delete_message/3`.

# `folder_messages_delta`

```elixir
@spec folder_messages_delta(String.t(), String.t(), keyword()) ::
  {:ok, GraphApi.Delta.delta_page()} | {:error, term()}
```

Delta query for messages in a specific mail folder.

# `folder_messages_delta_query`

```elixir
@spec folder_messages_delta_query(String.t(), String.t(), keyword()) ::
  GraphApi.Batch.Request.t()
```

Batch query variant of `folder_messages_delta/3`.

# `get_message`

```elixir
@spec get_message(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, term()}
```

Gets a specific message.

# `get_message_query`

```elixir
@spec get_message_query(String.t(), String.t(), keyword()) ::
  GraphApi.Batch.Request.t()
```

Batch query variant of `get_message/3`.

# `list_folder_messages`

```elixir
@spec list_folder_messages(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, term()}
```

Lists messages in a specific mail folder.

# `list_folder_messages_query`

```elixir
@spec list_folder_messages_query(String.t(), String.t(), keyword()) ::
  GraphApi.Batch.Request.t()
```

Batch query variant of `list_folder_messages/3`.

# `list_mail_folders`

```elixir
@spec list_mail_folders(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, term()}
```

Lists mail folders for a user.

# `list_mail_folders_query`

```elixir
@spec list_mail_folders_query(
  String.t(),
  keyword()
) :: GraphApi.Batch.Request.t()
```

Batch query variant of `list_mail_folders/2`.

# `list_messages`

```elixir
@spec list_messages(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, term()}
```

Lists messages in a user's mailbox.

# `list_messages_query`

```elixir
@spec list_messages_query(
  String.t(),
  keyword()
) :: GraphApi.Batch.Request.t()
```

Batch query variant of `list_messages/2`.

# `messages_delta`

```elixir
@spec messages_delta(
  String.t(),
  keyword()
) :: {:ok, GraphApi.Delta.delta_page()} | {:error, term()}
```

Delta query for a user's messages. Returns message changes since the last sync.

# `messages_delta_query`

```elixir
@spec messages_delta_query(
  String.t(),
  keyword()
) :: GraphApi.Batch.Request.t()
```

Batch query variant of `messages_delta/2`.

# `send_mail`

```elixir
@spec send_mail(String.t(), map(), keyword()) :: :ok | {:error, term()}
```

Sends a mail on behalf of a user.

The `message` map should include `:subject`, `:body`, and `:toRecipients`.
An optional `save_to_sent_items` boolean can be passed (default: true).

# `send_mail_query`

```elixir
@spec send_mail_query(String.t(), map(), keyword()) :: GraphApi.Batch.Request.t()
```

Batch query variant of `send_mail/3`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
