Integromatを使って無料のメールフォームを作る

コーポレートサイトとかによくあるメールフォーム。
動的サイトならまだいいけど、静的サイトでこれだけのためにサーバ建てるのとてもしんどい。
Netlifyでもメールフォームのサービスがあるけど無料だと月100件しか送れない。
JSのみでメール送信をする方法はいくつか見つけたけどセキュリティ的に怪しそうだったりめんどくさそうなものが多い。
JSでRESTを叩いてメールを送りたい。的なやつです。

## Integromatとは？

Webサービス連携ツール。
IFTTT的なもの。

TriggerとActionを決められて、何が起こったら何をする。っていうことを決められる。
IntegromatはTriggerによってActionの分岐とかもできるらしい。
今回は使わないけど、詳しく設定すればメールフィルター的なこともできそう。

無料では
* オペレーション実行回数が 1,000回/月
* シナリオ作成個数無制限

オペレーション実行という単位はサービスの実行回数やプルの単位(ポーリングをするなら)。  
Webhookで受けてメール送信する場合は毎回二回ずつサービスを呼び出すため、月500件無料でメールが送れる(はず)。

今回はWebhookのTriggerとMailのActionを使う。

## 一連の流れ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/4114fd35-9cc6-280a-e48c-b6d12ca90a69.png)

1. ユーザがメールフォームに入力して送信ボタンを押す。
2. FetchAPIでIntegromatのWebhookを呼び出す。
3. Integromatのシナリオが動き、メールを送信する。

## 作ってみる

### Integromatを設定する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/f7c14c2c-6824-e70f-8269-235078bfb318.png)

右上の「Create a new scenario」からシナリオを作る。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/57f384e1-3f35-7be0-4fb1-85e2587028dd.png)

EmailとWebhookを選択する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/760731a1-af8b-e46b-40f1-181be8a4c553.png)

こんな感じの画面になるので、クリックしてWebhook→Trigger→Custom Webhookを追加

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/c8dc9ab3-6dc9-811a-ef57-a118d174a9af.png)

Addを押して、適当に名前を付ける。ホワイトリストでIP制限をかけることもできる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/cb149dbc-e547-1435-219f-bb6f6d90423c.png)

Webhookのアドレスが表示されるのでパラメータ入りでPOSTしてみる。
ここでどんなパラメータがあるかを覚えさせて、それをもとにあとでメールの本文を作ることが出来る。
例えば、名前とアドレスと内容のシンプルなメールフォームであれば

```sh
curl http://XXX -X POST -H "Content-Type: application/json" -d '{"name": "7tsuno","email": "test@test.test","content": "お問い合わせ内容"}'
```

こんな感じで。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/f94cec89-9f63-25db-d821-94942d578e7c.png)

成功すると、Successfuly determinedになる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/ba7e2203-97d2-a7cc-4d3f-3f399064e7d6.png)

右のぽこってしてるところからAdd another moduleを押してモジュールを追加する。
Email→Action→Send an Emailを追加

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/0e45c411-d871-be79-55a0-21a8f3eefb6c.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/926e1a61-a7fb-dfb6-5800-ed9d60b4c66e.png)

Connection→Addから、Connection typeを選択。
送信元にGmailを使う場合はGoogle, SMTPサーバを使う場合はOtherにしていろいろ設定する。
Googleにした場合は送信元となるアドレスをOAuth認証させる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/08f06edd-cf94-c83e-7c12-14014f009621.png)

To,Subject,Content等を設定する。Webhookで得たパラメータを利用することが出来る。
Webhookで得たアドレスをToに入れれば自動返信メールとかも作れるはず。

設定が終わったら左下のRun Onceを押して、もう一回curlしてみる。
メールが届いていることが分かる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/3908a9d5-da1b-f4e9-003c-7fc92585db14.png)


左下のスイッチをONにしてSave
これでIntegromat側の設定は完了

## JSで送信

fetch APIを使って送信する。

```js
const obj = {"name": "7tsuno","email": "test@test.test","content": "お問い合わせ内容"};
const method = "POST";
const body = JSON.stringify(obj);
const headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json'
};
fetch("https://XXX", {method, headers, body}).catch(console.error);
```

IEはfetch未対応なのでpolyfillを使う。

Reactで作った簡単なFormをGithubに上げてみたので参考に！
https://github.com/7tsuno/integromat-mail

![image.png](https://qiita-image-store.s3.amazonaws.com/0/154239/79cb1871-4058-bc39-7a6e-1599345b43ee.png)