IBM Cloud Functions を使って 5 分おきにメールを送信する


# Email Delivery, powered by Sendgrid を使う
こちらのサービスを使ってメールを送信します。
IaaS を有効化済みのアカウントをお持ちであれば、25000 通まで無料の「Free Package」を活用できます。

>Email Delivery, powered by Sendgrid - IBM Cloud : https://cloud.ibm.com/catalog/infrastructure/email-delivery
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/7469cc56-9dd0-7f51-e8db-e299de26b6a0.png)
<img width="1792" alt="貼り付けた画像_2020_07_16_23_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/e2253b31-a8b6-bcc0-9868-856e8ca6e44b.png">

# GitHub からダウンロード
GitHub にあるファイルをダウンロードします。

- [khayama/fn-sendEmail](https://github.com/khayama/fn-sendEmail)

```shell:

git clone https://github.com/khayama/fn-sendEmail.git
cd fn-sendEmail
```

今回の Functions デプロイ用 yaml では以下のように定義しています。
Functions 実行パラメータは、環境変数の値を取得して埋め込む形で定義しています。

```yaml:sendEmail.yml

packages:
  sendEmail_package:
    version: 1.0
    license: Apache-2.0
    actions:
      sendEmail:
        version: 1.0
        description: sendEmail with SL_USER, SL_APIKEY
        docker: openwhisk/dockerskeleton
        function: sendEmail.sh
        inputs:
          SL_USER: $SL_USER
          SL_APIKEY: $SL_APIKEY
          TO: $TO
          FROM: 
                default: no-reply@ibmfunctions.com
          SUBJECT: 
                default: test subject
          BODY: 
                default: test body

    triggers:
      every5minutes:
        feed: /whisk.system/alarms/alarm
        inputs:
          cron: "*/5 * * * *"

    rules:
      sendEmail-every5minutes:
        description: Action is triggered every 5 minutes
        action: sendEmail
        trigger: every5minutes
```

# 環境変数セット
以下のように環境変数をセットします。

>[IaaS API key の発行・取得](https://qiita.com/khayama/items/d7efe0412341164c17dc#iaas-api-key-%E3%81%AE%E7%99%BA%E8%A1%8C%E5%8F%96%E5%BE%97) 

```shell:

export SL_USER="xxx"
export SL_APIKEY="xxx"
export TO="宛先メールアドレス"
```

# Functions デプロイ

```shell:

ibmcloud fn deploy --manifest sendEmail.yml
# 削除するには ibmcloud fn undeploy --manifest sendEmail.yml
```
# 動作確認
5 分おきの定期トリガーの後に、「sendEmail」のアクションが正常に実行されていることが確認できます。

>https://cloud.ibm.com/functions/dashboard

![Kobito.046HzO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/d7722e68-bdc7-0c53-c28c-39ac6cda3e5f.png "Kobito.046HzO.png")

# 受信メール
こんな感じです。

![貼り付けた画像_2020_07_16_17_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/8f40d2df-b116-f5c2-3dce-22862404b552.png "貼り付けた画像_2020_07_16_17_03.png")

# 参考
- [sendEmail - https://sldn.softlayer.com/](https://sldn.softlayer.com/reference/services/SoftLayer_Network_Message_Delivery_Email_Sendgrid/sendEmail/)
- [ibm cloud infrastructure - Send email on softlayer - Stack Overflow](https://stackoverflow.com/questions/35195416/send-email-on-softlayer)
- [curlでJSONをPOSTするとき値にシェル変数を使う方法について - Qiita](https://qiita.com/tekitoh/items/8acccb313d6e7a14c2ec)
- [Shinobilayer: SendGrid初心者のための注意点（SoftLayer版） - Qiita](https://qiita.com/testnin2/items/ceb27d418a017c0c3490#7%E7%B5%8C%E7%94%B1%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E7%97%87%E7%8A%B6%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
- [Getting started with email delivery](https://cloud.ibm.com/docs/email-delivery)
- [IBM Cloud Functions alarm package の cron 秒フィールドの注意点 - Qiita](https://qiita.com/SakaiYuki/items/e7944d9db752cd96e25f)
- [JSONデータに改行コードを入れる方法 | SRIA BLOG – 宮城県仙台市のWEBシステム開発・スマホアプリ開発](https://www.sria.co.jp/blog/2017/09/4108/)