0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

メール受信プログラム作ったときのまとめ(マルチパートとMIME)

Last updated at Posted at 2020-05-06

POPサーバよりメールを受信してWebAPIで外部システムへ連携するプログラムを作成

半分仕事、半分趣味でメールを外部システムに連携するプログラムを作ろうと思った。強制の仕事ではないので、じっくりと調べられた。せっかくなので、後で見たときに忘れないように、まとめてみる。

メールの仕様についてまとめてみたので言語依存はしないと思うが、引用や参考URLはPHPのプログラムサンプルとなっているので、ご注意を。

マルチパートの構造について

テキストとHTMLとマルチパートでメールが送信される場合、ヘッダ部に続いているボディー部が、テキストパート、HTMLパートに分かれる構造となる。
image.png
引用
HTMLメールとテキストメールを同時に送信するマルチパートメールとは

ここに添付ファイルや絵文字が含まれた場合のマルチパートの構造については、入れ子構造をとった複雑な構造となる。メールヘッダ部の「Content-Type」で内容を判別できるが、再帰処理が必要になる。

image.png

引用
メールヘッダー。~ファイルを添付したらどうなるの?~

メールの解析については、下記の解説を読むと詳しく記載されている。
-メールを分解する。の解説。

##参考

メールヘッダに日本語を含めるには

受信メールの解析ライブラリで自動的に判別することが多いと思うが、ライブラリ自体のバグでうまく変換できないこともありえる。日本語(8bit)をメールヘッダで利用する場合は、下記の様な仕様となる。

 =?文字セット?エンコード方式?エンコード後の文字列?= 

文字セットには、メール本文と同様「UTF-8」や「ISO-2022-JP」といった値が入り、エンコード方式には、Base64の場合「B」、Quoted-Printableの場合「Q」いずれかの値が入ります。上述の本文のエンコード方式で利用できる「7bit」(無変換)に相当するものはありません。「B」と「Q」の使い分けについてはRFC 2047が参考になると思います。

引用

MIME関連のメールヘッダ一覧

おもな設定値と概要を一覧にまとめた。詳細は下記URL参照。
image.png

引用

別のアイデアとして・・・

サーバ上では、POPやIMAPからデータ取得し、WebAPIで外部システムに連携する。外部システム側で各データに分けるような方式もよいかもしれない。メールのデコードがあればと思って探せればよかったが、さくっと調べた感じだとなかったので、今回はあきらめた。

参考

メモ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?