あなたの上司が突然、会社の業務スピードを低下させている「メール問題」を解決するよう指示してきました。毎朝何百通もの自動送信メールに対して手作業でデータ入力が行われ、従業員の受信ボックスを塞いでいます。
スマートで効率を重視するあなたは、すぐにメール解析システム(メールパーサー)を作成する可能性を見出します。素晴らしいアイデアです!とはいえ、単なるいくつかのスクリプトと労力だけでは済まないかもしれません。ここでは、メールパーサーを作成し、メールのデータ入力ワークフローを自動化するための6つのステップを紹介します。
Before we start: let's define parse and what is parsing
コンピュータサイエンスにおけるパーシングとは、特定のルールに従い、テキストをサブパーツへ分割する動作のことです。
メールパーサーとは、コンピュータにメールを読み込ませ、一連のルールに従って処理させる仕組みです。理想的には、そのシステムがメールから関連データを自動的に抽出し、バックオフィスアプリケーションにフィードします。メールパーサーに関する詳細な解説記事もあわせてご覧ください。
Shameless plug: Have you met Parseur?
自作メールパーサーの構築は、裏側の仕組みを理解するための楽しいプロジェクトです。
しかし、それは時間のかかる作業です。もし構築作業をスキップしたいのであれば、Parseurがすぐに使えるメールパーサーを提供しています。
Parseurは2015年後半からゼロベースで開発され、バックエンドの構築だけで6年の歳月と約5,000人時を要しました。フロントエンド(テンプレートエディタを含むすべてのユーザーインターフェース)の構築にもさらに数千人時がかかりました。Parseurの開発チームは、20年以上のプロフェッショナルなコーディング経験を持つ熟練の開発者で構成されています。
私たちはまだ開発を終えておらず、「十分に優れた」テキストパーサーを作成するのにどれくらいの時間がかかるか、見積もることすらできません。
すぐに結果が必要な場合は、ぜひParseurをお試しください。Parseurは管理型で使いやすいメールパーサーであり、独自のソリューションをセットアップする何時間もの手間を省くことができます。充実したParseurの機能の数々をご確認ください。
1. Get the emails
現時点では、メールは従業員の個々の受信トレイ、チームのメーリングリスト、または会社全体のメールボックスに届いています。
最初のステップは、それらすべてのメールボックスを一元化するためのメールアカウントを設定することです。あるいは、考えたくもないことですが、独自のメールサーバー、別名SMTPサーバーをセットアップすることになるかもしれません。
知識がある方向けに、現在非常に人気のあるいくつかのSMTPサーバーを紹介します:
- Exim は無料のオープンソースメール転送エージェント(メールサーバーの別名)です。最も人気のあるSMTPサーバーであり、次点のPostfixよりもやや速いペースで人気を集めています。
- Postfix も無料でオープンソースです。問題が最小限で「とにかく動く」ことで定評があります。メールサーバーの市場シェアに関するこの記事によると、EximとPostfixを合わせると全メールサーバーの80%を占めています。
- Microsoft系では、広く普及している Exchange があります。従来型の POP3 や IMAP の代わりに EWS を通じてメールを取得できます。現在では、有料でMicrosoftにホスティングしてもらうことも可能です。
- 独自のサーバーを構築する。この道は長く険しいものになりますが、その過程で多くのことを学べるでしょう。最終的に、自社のニーズによりフィットしたサーバーになるかもしれません。ただし、無数にあるメールクライアントとの互換性を必要としないのであれば、の話ですが。もしこの道を進むと決めたなら、Pythonの標準ライブラリに始めるための素晴らしいモジュールがあります。smtpdをご覧ください。
大量のメールをブラックリストに載ることなく送信するのはそれ自体が熟練の技であり、専門家に任せるのが一番であることに留意してください。
また、独自のメールサーバーをセットアップする人気は衰えつつあることにも注意してください。クラウドとSaaSの時代においては、面倒なメール処理を代行してくれるホスティング型のメールサービスを使用する方が便利です。この分野の主要なプレーヤーは以下の通りです:
- Postmark は到達性と信頼性に重点を置いています。また、無料プランもあります。
- Mandrill は先行者利益を得ており、依然として人気があります。マーケティングおよびトランザクションメールに焦点を当てています。
- Sendgrid もマーケティングおよびトランザクションメールのプラットフォームとしての地位を確立しています。
- Mailgun は開発者とAPIにより焦点を当てています。こちらも無料プランがあります。
ParseurではPostmarkを愛用しています。彼らのAPIは素晴らしく、ドキュメントも秀逸です。世の中のより人気のあるプログラミング言語すべてに向けた多数のSDKが用意されています。
2. Translate email into a proper data format
メールは「スター・ウォーズより前に作成された」ほど古い形式であり、数十年の間にいくつかの欠点を蓄積してきました。例えば、国際文字(非米国文字)の扱いは初期の仕様には含まれていませんでした。€のような特殊文字を扱うには、3つの技術文書(RFCとも呼ばれます)を考慮する必要があります:
- RFC 2047 は、メールヘッダー内での国際化された名前と件名のサポートを提供します
- RFC 5890 は、ドメインネームシステム (DNS) における国際化ドメイン名のサポートを提供します
- RFC 6532 は、メールヘッダーセクションでのUTF-8(国際化テキストを保存する別の方法)の使用を許可します
ここでもPostmarkやMailgunなどのサービスが窮地を救い、代わりに変換を行ってくれます。UTF-8、MIME、cp1252にまつわる恐ろしい話は忘れることができます(UTF-8、MIME、cp1252なんて聞いたことがない?あなたの人生がうらやましいです)。
例えばMailgunを使用している場合、サーバーが代わりにメールを受信し、人類に知られているすべてのRFCを考慮して、扱いやすいJSONドキュメントに変換してくれます。その後、1回のHTTP POSTリクエストでWebhookとして、指定した任意のURLに送信してくれます。
好奇心旺盛な方のために、SMTP関連のすべてのRFCのリストを置いておきます。どういたしまして。
例えば、Mailgunで受信したシンプルなメールは、次のような形であなたのサーバーに届きます:
{
"subject": "My favorite café",
"sender": "John Doe <[email protected]>",
"recipient": "Mr. Parseur <[email protected]>",
"message": "It's called Awesome Café! See directions in the attachment. Bye.",
"attachements": [
{ "name": "directions.pdf", "content": "https://url.with.content" },
{ "name": "cappucino.jpg", "content": "https://another.content.url" }
]
/*... other interesting pieces of data here (read the doc, Luke) ...*/
}
素晴らしいと思いませんか?これを従来のメールフォーマットと比較してみてください:
MIME-Version: 1.0
Received: by 102.29.23.176 with HTTP; Sat, 12 Aug 2016 14:13:31 -0700 (PDT)
Date: Sat, 12 Aug 2016 14:13:31 -0700
Delivered-To: =?ISO-8859-1?Q?Mr. Parseur <[email protected]>
Message-ID: <CAAJL_=kPAJZ=fryb21wBOALp8-XOEL-h9j84s3SjpXYQjN3Z3A@mail.gmail.com>
Subject: =?ISO-8859-1?Q?My=20Favorite=20Caf=E9
From: =?ISO-8859-1?Q?John Doe <[email protected]>
To: =?ISO-8859-1?Q?Mr. Parseur <[email protected]>
Content-Type: multipart/mixed; boundary=mixed
==mixed
Content-Type: multipart/alternative; boundary=alternative
==alternative
Content-Type: text/plain; charset="utf-8"
It's called Awesome Caf=C3=A9! See directions in the attachm= ent. Bye.
==alternative
Content-Type: text/html; charset="utf-8"
It's called <b>Awesome Caf=C3=A9</b>! See directions in the = attachment. Bye. ==alternative== ==mixed
Content-Type: document/pdf; name="directions.pdf"
Content-Disposition: attachment; filename="directions.pdf"
Content-Transfer-Encoding: base64
iVBORw [... the whole encoded attachment here ...] RK5CYII=
==mixed
Content-Type: image/jpg; name="capuccino.jpg"
Content-Disposition: attachment; filename="capuccino.jpg"
Content-Transfer-Encoding: base64
G+aHAAAA [... another attachment encoded here ...] ORK5CYII=
==mixed==
幸いなことに、大半のまともなプログラミング言語には、PythonのemailモジュールやRubyのRubyMailライブラリなど、メールを解読するためのライブラリが付属しています。
3. Get the data into the database
ここからは、あなたのコーディングスキルを頼りにこれらのHTTPリクエストをすべて処理し、選択したデータベースの素晴らしいエントリへと変えていきます。
この作業に役立つ人気のプログラミング言語とフレームワークを、トレンド度の低い順にいくつか紹介します:
- PHP の Symfony または Zend
- Python 向けの Django、Tornado、または Flask
- Ruby on Rails
- そして Meteor、Express.js、Laravel...
特定のフォーマットを対象としていなければ、関連するコードは簡単なはずです。しかし、ビジネスソフトウェアが受け入れるフォーマットを調べ、そのフォーマットに変換しなければならない場合があります。一般的な交換フォーマットにはCSVやJSONが含まれますが、一部のビジネスアプリケーションではより曖昧なバイナリフォーマットが使用されています。
単なるストレージ(独自のカスタムビジネスアプリケーション用など)が必要な場合は、データをどのように保存するかを選択するだけです。
保存されたこれらのメールに対して、統計や非逐次的な操作を行う必要が絶対にないとわかっている場合は、例えばMongoDBの使用を検討してもよいでしょう。ただし、この素晴らしいブログ記事での主張を理由に、私はそれをお勧めしません。
SQLベースの任意のリレーショナルデータベース管理システムであれば、メールを問題なく保存できます。最低限、メール用のテーブルと、保存する場合に備えて添付ファイル用のテーブルの2つを定義する必要があります。
容量と負荷がサーバーに収まる限り、どんなSQLデータベースエンジンでもそれを処理できるはずです。今日のリレーショナルデータベースとして人気のある選択肢がいくつかあります:
- MySQL と、その推奨されているものの非公式なフォークである MariaDB は、基本的で依然として人気のあるデータベースサーバーの選択肢です。OracleがMySQLを買収して以来、サポートは以前ほど手厚くなくなっていることに注意してください。驚きですね。
- Postgresql は、MySQLよりもスケーリングのオプションが多く、セットアップが複雑な、より大規模で機能豊富なデータベースエンジンです。
- これらの無料のオープンソースデータベース以外にも、もちろん、大企業のニーズに応えるための山ほどの機能を備えた Oracle があります。非常に大規模で、複雑で、高価です。あなたのシンプルなメール保存ソリューションに、本当にそれほどのスケーラビリティが必要でしょうか?
- また商用側では、Microsoft SQL server が近年大幅に改善され、現在ではOracleの有力な競合として浮上しています。
これで完了です。メールのコンテンツをそのままアプリケーションのデータベースに入れたいのであれば、基本的には終わりです。
しかし、なぜここで立ち止まるのでしょうか?今やあなたの手元には、多くの興味深いデータがあります。このデータセットはあなたのコアビジネスに関連しているため、非常に興味深いものです。あなたのメールにはおそらく、請求書、出張経費、見積もり、見込み客、そして顧客が溢れているはずです。
そこから一歩進んで、これらのメールから関連するデータを抽出してみてはいかがでしょうか?手持ちのデータを洗練させることで、ビジネスのワークフローを自動化し、あなたや従業員の時間を節約することができます。
4. Extract relevant text from each email
ここで実際のパーシングが本格的に行われます。理想的には、次のようにしたいところです:

この大きな問題を解決するためのいくつかのアプローチを紹介します:
Statistical Word Analysis, or "word counting"
統計分析は、事前に定義された形式のないメール、つまり通常人間によって書かれたメールによく適合します。各カテゴリに属する単語のセットを使って、いくつかのメールカテゴリを定義することができます。その後、各メールをパースし、各カテゴリからその中の単語を数え、メールがこれらのカテゴリの1つ以上に該当するかどうかを決定します。
これはセンチメント分析(感情分析)に非常によく機能します。例えば、「満足している顧客」カテゴリと「激怒している顧客」カテゴリを定義し、満足している顧客のメールは上司に送り、激怒している顧客のメールはゴミ箱に送ることができます。冗談ですが、イメージは伝わるでしょう。
しかし、ご存知の通り、人間同士のコミュニケーションは間違いや曖昧さが生じやすく、文脈に非常に敏感です。そして、真の人工知能が存在しない限り、こうした同じ曖昧さが解決されることはありません。せいぜいシステムを信頼できないものにし、最悪の場合は役に立たないものにしてしまう可能性があります。
Regular expressions
このアプローチは、自動生成されるメールで、メール間でテキストの大部分が同じままである場合に最適です。
例えば、アメリカン航空からの100万件の予約メールをパースし、それぞれから乗客名を抽出したいとします。これは、メール全体に一致し、乗客の名前のみをキャプチャする正規表現を作成することで実現できます。簡単そうですよね?しかし、メールの他の部分も変更された場合はどうなるでしょうか?また、その1つのフライトに乗客が1人ではなく3人いる場合はどうなるでしょうか?お手上げです。
Pythonには素晴らしい正規表現ライブラリがあります。正規表現(略してregexp)は、RegexpモジュールとしてRuby Coreの一部になっています。また、JavaScriptでも第一級オブジェクトとして扱われます。
欠点は、正規表現の維持が複雑であり、その可読性が良くても及第点程度であることです。Parseurの多くのお客様が、最初は正規表現を使用して独自のパースエンジンを開発し始めたものの、絶え間なく変化するメールの流入に対してメンテナンスを維持できなかったと私たちに教えてくれました。
5. A managed solution? Parseur can help!
欲しいデータだけを取得し、Excelのスプレッドシートやデータベースの正しい列にソートできたら素晴らしいと思いませんか?
それこそが、ここParseurでの私たちの目標です。私たちはお客様にシンプルな「ポイント&クリック」インターフェースを提供し、どのようなデータがご自身に関連しているかを一度だけ定義できるようにしています。その後は同様のメールを送信するだけで、それらのデータが抽出され、自動的にExcelのスプレッドシートに配置されます。
ご自身でゼロからメールパーサーを作成する必要はありません。最初の手短なポイント&クリックのセッションの後は、手動での処理を行う必要はありません。各メールは自動的にExcelの行になります。
6. Integrate into your business software
抽出したデータがExcelスプレッドシートにきれいに収まったら、あとはそれを重要な場所、つまりビジネスアプリケーションに取り込む「だけ」です。
ZapierやMakeのようなツールは、メールアプリケーションとビジネスアプリケーションを接続できるため、ここでは非常に役立ちます。あなたがすべきことは、これらのサービス用のコネクタを作成することだけです。その後は、彼らのエコシステムの一部である他の多くのコネクタを活用できます。
ParseurはGoogle Sheets、Zapier、Integromat、およびMicrosoft Power Automateと統合されており、パースされたデータをわずか数クリックで何千ものアプリケーションに開放します。
幸運を祈ります!
最終更新日