POPサーバよりメールを受信してWebAPIで外部システムへ連携するプログラムを作成
半分仕事、半分趣味でメールを外部システムに連携するプログラムを作ろうと思った。強制の仕事ではないので、じっくりと調べられた。せっかくなので、後で見たときに忘れないように、まとめてみる。
メールの仕様についてまとめてみたので言語依存はしないと思うが、引用や参考URLはPHPのプログラムサンプルとなっているので、ご注意を。
マルチパートの構造について
テキストとHTMLとマルチパートでメールが送信される場合、ヘッダ部に続いているボディー部が、テキストパート、HTMLパートに分かれる構造となる。
引用
HTMLメールとテキストメールを同時に送信するマルチパートメールとは
ここに添付ファイルや絵文字が含まれた場合のマルチパートの構造については、入れ子構造をとった複雑な構造となる。メールヘッダ部の「Content-Type」で内容を判別できるが、再帰処理が必要になる。
メールの解析については、下記の解説を読むと詳しく記載されている。
-メールを分解する。の解説。
##参考
- [php]Gmailから送信されたメールの本文が取得できません
https://q.hatena.ne.jp/1394702372
メールヘッダに日本語を含めるには
受信メールの解析ライブラリで自動的に判別することが多いと思うが、ライブラリ自体のバグでうまく変換できないこともありえる。日本語(8bit)をメールヘッダで利用する場合は、下記の様な仕様となる。
=?文字セット?エンコード方式?エンコード後の文字列?=
文字セットには、メール本文と同様「UTF-8」や「ISO-2022-JP」といった値が入り、エンコード方式には、Base64の場合「B」、Quoted-Printableの場合「Q」いずれかの値が入ります。上述の本文のエンコード方式で利用できる「7bit」(無変換)に相当するものはありません。「B」と「Q」の使い分けについてはRFC 2047が参考になると思います。
引用
MIME関連のメールヘッダ一覧
引用
別のアイデアとして・・・
サーバ上では、POPやIMAPからデータ取得し、WebAPIで外部システムに連携する。外部システム側で各データに分けるような方式もよいかもしれない。メールのデコードがあればと思って探せればよかったが、さくっと調べた感じだとなかったので、今回はあきらめた。