---
title: "Exchange 讀取電子郵件"
description: "EMILY.RPA Exchange 讀取電子郵件模組：以 IMAP 讀取 Exchange Online 電子郵件，需使用支援 Exchange Online 的帳號。"
source: https://docs.emily.tips/wap/imap2csv-exchange
---

# Exchange 讀取電子郵件

以 IMAP 讀取 Exchange Online 電子郵件，必須使用支援 Exchange Online 的帳號，填寫的資訊可以參考 [Exchange Online 存取設定](/faq/config-exchange-online)。

![](https://docs.emily.tips/img/zh/wap-161.png)

## 參數

**`TENANT ID`** - 使用者郵件帳號在 Azure Portal 開的 Azure Active Directory 租用戶識別碼。

**`CLIENT ID`** - 上述的「**租用戶**」中新增註冊的「**企業應用程式**」用戶端識別碼。

**`CLIENT SECRET`** - 填入上述「**用戶端密碼**」的值。

**`ACCOUNT`** - 填完 `TENANT ID`、`CLIENT ID` 與 `CLIENT SECRET` 後，點擊「**SIGN IN**」會帶出瀏覽器讓使用者完成身分認證，並自動帶入 `ACCOUNT`。

**`MAILBOX`** - 郵件信箱名稱。

**`SINCE DAY(S) AGO`** - 讀取自幾天前的郵件。

**`UNREAD ONLY`** - 是否選擇只讀取未讀郵件。

## No-Code 編輯器

提供：「**重置 output.csv**」、「**過濾郵件**」等無程式碼指令。例如，過濾出來自 `@emily.tips` 網域，主旨包含 `採購單` 的郵件，寫入到工作資料夾的 output.csv。

![](https://docs.emily.tips/img/zh/wap-162.png)

## LOW-CODE 編輯器

![](https://docs.emily.tips/img/zh/wap-163.png)

### input 物件陣列

在 input 物件陣列中的每個元素代表讀取自指定郵件信箱的每封郵件：

```javascript
// 印出讀取到的每封郵件主旨與寄件者
input.forEach((mail) => {
  console.log('from:' + mail.from + ', title:' + mail.subject)
})
```

### output 物件陣列

加入 output 陣列中的每個物件元素代表輸出表格的一列資料，物件中的 key 為表頭欄位，value 為該欄位在這一列資料的值，最後表格將被輸出成工作資料夾內的 output.csv 檔案。

```javascript
// 將讀取的每封郵件文字欄位輸出到CSV，並且將附件檔案存檔
input.forEach((mail) => {
  output.push({
    from: mail.from,
    subject: mail.subject,
    date: mail.date.toLocaleString(),
  })
  
  if (mail.attachments.length > 0) {
    mail.attachments.forEach((att) => {
      api.write(att.filename, att.content)
    })
  }
})

// 指定表頭欄位
output.header.push('from','subject','date')
```

### api 物件

除了提供同步函式：api.files(), api.read(filename, encoding='utf8'), api.write(filename, text), api.rename(oldname, newname), api.remove(filename) 存取工作資料夾內的檔案；另外提供 mail 物件與相關非同步函式 api.mail.moveto(uid, mailbox), api.mail.remove(uid)

```javascript
// 找到標題包含'促銷'的郵件
let mail = _.find(input, (m) => m.subject.includes('促銷'))

// 移到'Trash'郵件資料夾
await api.mail.moveto(mail.uid, 'Trash')

// 找到標題包含'中獎'的郵件
mail = _.find(input, (m) => m.subject.includes('中獎'))

// 移除郵件
await api.mail.remove(mail.uid)
```
