[T-DASH] テスト自動化の中で、IMAPを利用してメールの本文を取得する

# Outline

前回、テスト自動化の中のステップでgmailをgoogle cloudのAPI経由で取得する方法を記載した

https://qiita.com/emurin/items/1aefdffe205e26888aff

今回、IMAPを利用してもっと簡単に取得して、T-DASHテスト自動化で利用する方法を解説する。

https://service.valtes.co.jp/t-dash/


# IMAPのテストサイト

IMAPが使えるサイトとして5x2.deを用いた。
こちら、ドイツのサイトになりますが、IMAPを利用でき、無料です。

https://5x2.de/

このメールサーバーではIMAPの情報は以下の通りです

| パラメータ | 値 | 
|:-----------|:------------|
| IMAP_SERVER       | mail.5x2.de        | 
| IMAP_PORT       | 993        | 
| MAIL_USER       | メールアドレス     (ex. xxxx@5x2.me)  | 

# 技術情報

ImapLibrary2 を用いた
※ImapLibraryにバグがあるため、改修されたものである。

https://lasselindqvist.github.io/robotframework-imaplibrary2/doc/ImapLibrary2.html

このkeywordは、TEXT MAILとHTML MAILで取得方法が異なります。
今回、取得するメールのフィルターキーワードとして senderを指定して取得します。

# T-DASH

## カスタム動作

以下設定なようをメール処理IMAP.yamlのファイルで保存する
```
ACT-CAT-CUSTOM-f3ef5f76-9206-4c08-9847-ecdcbfdebac2:
  action_category_name: メール処理IMAP
  icon: ''
  color: '#2f630e'
  custom_data:
    file_name: MailIMAP
    pip_list:
    - robotframework-imaplibrary2
    library_list:
    - ImapLibrary2
  actions:
    ACT-CUSTOM-8db3608b-cc10-4009-aeb1-8925be06aaa2:
      action_name: IMAPでTEXTメールを取得する
      action_type: operation
      action_format: sender=「設定値1」のTEXTメールを取得
      action_note: ''
      action_args:
      - value1
      action_def:
      - - Set Test Variable
        - ${IMAP_SERVER}
        - imap.example.com
      - - Set Test Variable
        - ${IMAP_PORT}
        - '993'
      - - Set Test Variable
        - ${MAIL_USER}
        - xxxxx@example.com
      - - Set Test Variable
        - ${MAIL_PASSWORD}
        - password
      - - ImapLibrary2.Open Mailbox
        - host=${IMAP_SERVER}
        - user=${MAIL_USER}
        - password=${MAIL_PASSWORD}
        - port=${IMAP_PORT}
        - is_secure=True
      - - '${LATEST} = '
        - ImapLibrary2.Wait For Email
        - sender=${value1}
      - - '${text} = '
        - ImapLibrary2.Get Email Body
        - ${LATEST}
      - - Set Suite Variable
        - ${share_value}
        - '${text} '
      - - Log
        - ${share_value}
    ACT-CUSTOM-255625f3-6009-4e41-984e-4acdef324438:
      action_name: IMAPでHTMLメールを取得する
      action_type: operation
      action_format: sender「設定値1」のHTMLメールを取得する
      action_note: ''
      action_args:
      - value1
      action_def:
      - - Set Test Variable
        - ${IMAP_SERVER}
        - imap.example.com
      - - Set Test Variable
        - ${IMAP_PORT}
        - '993'
      - - Set Test Variable
        - ${MAIL_USER}
        - xxxxx@example.com
      - - Set Test Variable
        - ${MAIL_PASSWORD}
        - password
      - - ImapLibrary2.Open Mailbox
        - host=${IMAP_SERVER}
        - user=${MAIL_USER}
        - password=${MAIL_PASSWORD}
        - port=${IMAP_PORT}
        - is_secure=True
      - - ${LATEST} =
        - ImapLibrary2.Wait For Email
        - sender=${value1}
      - - '${parts} = '
        - ImapLibrary2.Walk Multipart Email
        - ${LATEST}
      - - FOR
        - ${i}
        - IN RANGE
        - ${parts}
      - - ''
        - ImapLibrary2.Walk Multipart Email
        - ${LATEST}
      - - ''
        - ${ctype} =
        - ImapLibrary2.Get Multipart Content Type
      - - ''
        - Continue For Loop If
        - '''${ctype}'' != ''text/html'''
      - - ''
        - '${payload} = '
        - 'ImapLibrary2.Get Multipart Payload '
        - decode=True
      - - ''
        - Set Suite Variable
        - ${share_value}
        - ${payload}
      - - END
      - - Log
        - ${share_value}

```

次に、作成された IMAP.yamlをT-DASHの動作定義 -> カスタム動作 -> カスタム動作をインポート にてインポートする

### IMAPでTEXTメールを取得する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/99dbc54a-c17f-c546-d82d-403a0e953fa6.png)

### IMAPでHTMLメールを取得する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/d64a7f0a-85d3-512b-abfc-7bc151977b7f.png)

引数として、senderを指定することで、最新のメールを取得し、本文を変数${share_value}に格納します

## スクリプト

### TEXTメールを取得する
スクリプト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/e52d2e51-f0a0-33db-8059-0c528cb8e05a.png)

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2ae043f3-8150-55a6-aa70-dfa5b4600af0.png)


### HTMLメールを取得する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/666d7de0-f13b-fcc8-7828-825a39314ec8.png)

実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c34617f4-7f69-2777-0bae-d62efe985c6a.png)