特集 ニュース コラム Plug-in・カスタム関数 関連製品・サービス 書籍
活用事例 コミュニティ・リンク 人材募集
 
フリーなツールを使ってメールをFMProに取り込んでみる[前編]

Perlでメールを受信してテキストファイルにしてみよう

はじめに

 FileMakerPro7には便利なプラグイン機能がありますが、サードパーティ各社から出ているプラグインって結構買い難かったりしませんか?値段もそうですが、「いいな」と思うと海外のメーカ製でWebページが英語だったり。後者の悩みはfmpro.jpで提供しているプラグインサーチを使っていただけば情報が得られますが、お値段となると会社やお客様の予算の問題もありますよね。
 でもFileMakerPro単体では無理でも、ほかのツールと連携させる事によって同様の事を実現する事が可能な場合もあります。そこで今回は「FileMakerPro7でメールの受信をする」をテーマにFileMakerPro7とその他ツールの連携法のサンプルをご紹介します。

今回の目標

 今回の目標はまずMacOSXServer上で動作するメールサーバPostfixにアクセスして、メールの受信を行い、次に受信したメールのFileMakerPro7への取り込みです。それにできれば添付ファイルを別ディレクトリに保存して、そのファイル名をメール本文に書いておくようにします。そうすればメールについていた添付ファイルを開くのが簡単になりますからね。以上、メールの受信・受信した内容をFileMakerPro7に取り込み・添付ファイルの指定ディレクトリへの保存の3点を今回の目標とします

開発環境

 今回はMacOSXベース(10.3.6)で実現しました。ただしお使いのOSがWindowsでもほぼ同じように実現できますので、Windows環境を御利用の方は挑戦してみてください。Cygwinを使うといいのではないでしょうか。そして、OS以外のツール等は以下の通りです。nkfもPerlもフリーソフトェアですので、誰でも自由に使う事ができます。これらのツールは伝統的UNIXハッカー達が必要にかられて作ったものですが、MacOSもOSXになってこういう先駆者の成果を簡単に享受できるようになったのはすばらしい事ですね。
 ・シェル「bash」     シェルは別に書き方がちょっとかわるだけでどのシェルでもかまいません。bash,tcsh,pdksh,zsh等々お好きなものでどうぞ
 ・文字コード変換ツール「nkf」
    このコマンドはMacOSXに標準では付属していないため、このページ左にある関連リンクの「nkfのページ」からダウンロードし、インストールします。今回ダウンロードしたファイルはnkf201.shar.gzで、インストール方法はまず
$cd <<アーカイブをダウンロードしたディレクトリ>>
$ gzip -d nkf201.shar.gz
$ sh ./nkf201.shar
$ cd nkf201
$ make
$ make test
 の順に行い、make test で全てOkと表示されたら以下の様にインストールする。root権限で
# cp nkf /usr/local/bin
 これでインストールができます。もし/usr/local/binというディレクトリがないようだったら作ってからコピーしてください。
 ・スクリプト言語Perl(OS付属のもの。OSX10.3.6の場合v5.8.1-RC3)
 ・Perlモジュール「Mail::POP3Client」「MIME::Base64」
    「MIME::Base64」は最初からインストール済みなので、Mail::POP3Clientのインストールを行います。このモジュールを使用する事によって簡単にメールサーバへのアクセス、メールヘッダ・ボディ情報の取得ができるようになります。インストール方法はrootになってから
# perl -MCPAN -e shell
を実行すると英語でいろいろ聞いてきますので、国とダウンロード用サイトを選ぶ以外は全部Enterキーで飛ばします。地域と国はそれぞれAsiaとJapanを選択して、ミラーサーバは適当に選んで下さい。選んだ後もいろいろ出てきますが
cpan> 
というプロンプトが表示されるまでEnterで飛ばして下さい。プロンプトが表示されたら
cpan>install Mail::POP3Client
でインストールされます。インストール後はexit CPANのモードを抜けて下さい。

 さて、これでファイルメーカー以外の環境は整いました。

サンプルプログラムについて

 まずはサンプルをダウンロードして開いてみて下さい。ダウンロードはこちら(MailtoFMP.zip)でできます。ダウンロード、解凍はできましたか?できましたら下記の三つのファイルを任意のディレクトリに保存し、添付ファイルの保存用ディレクトリも作成してお下さい。
 mailtofmp.zipの中身

  • Perlスクリプト「mailclient.pl
  • FileMakerPro7データベース「メール受信箱.fp7
  • メール受信→文字コード変換を連続で実行させるシェルスクリプト「GetMail.sh
 中身を確認したら、お使いの環境に合わせて項目を修正します。まずはmailclient.plをエディタで開いて(この時文字コードをかえないように注意して下さい)、下記の項目をそれぞれ変更します。またメールを受信後にサーバから削除したい場合はmailclient.plの144行目のコメントを外して下さい。でもテストの場合はつけておいた方がいいかもしれませんけどね。
# メールサーバアドレス
$host = 'xxx.xxx.xxx.xxx';
# メールサーバログイン名
$uname = 'user';
# メールサーバパスワード
$passwd = 'password';
# 添付ファイル保存ディレクトリ
$dir = '<<先に作成した添付ファイル保存用ディレクトリへのパス>>'
# 受信したメールをサーバに残す場合は下の行をコメントアウトする
# $pop->Delete($i);
次にGetMailtoFMpro.shを開いて <> の部分を実際のパスにします。最後に FileMakerPro7で メール受信箱.fp7 を開き、スクリプト「メール取り込み」を編集します。ここでインポートするファイルを指定している部分のパスをご自分の環境に合わせて変更して下さい。これで設定は終了です。

今回の目標

●使用方法
 処理の流れを簡単に書くと

  1. Perlスクリプトでメールサーバにアクセス
  2. メールをダウンロードしてきてFileMakerPro7で取り込みやすい形式に整形
  3. 整形したメール本文は一つのファイルにまとめて保存。添付ファイルは指定のディレクトリに保存
  4. 文字コードをFileMakerPro7で読み込めるようにSJISに変換
  5. FileMakerPro7から4で保存したメール本文のファイルをインポート、整形
 という流れとなっていますが、ポイントはメールを取り込むPerlスクリプトです。このスクリプトは下記の仕様で作りました。詳細はmailclient.plをご覧下さい。メールの受信を行うPerlスクリプト「mailclient.pl」は下記の仕様に基づいて書かれています。いくつかの制限事項もあるのですが、気をつけていただきたいのはメールサーバがPostfixの場合でしかテストしていない点と、添付ファイルの名前が文字化けするので変更して保存するということです。その他は下のリストをご覧下さい。なお、詳しい情報(既知の問題点等)についてはmailclient.plの最初にまとめて記述していますのであわせてご覧下さい。
  • メール本文内の改行はすべて"|delimiter|"に置換して書き出し
  • メールのヘッダからDate、From、To、Cc、Bcc、Subjectの各項目を抽出
  • 一通毎のメールの区切りには改行を使用
  • 動作をテストしたサーバはMacOSXServer上で動作するPostfixのみ
  • 対応する添付ファイルのエンコード形式はBase64形式
  • 解釈できないパート(HTMLメール等)は本文内に展開
  • 添付ファイルは別名に付け替えて保存。別名はメール本文内に
      保存ファイル名:12220336581994.pdf
    という形式で追記
 以上のような仕様で作られたmailclient.plは、受信したメールを「メール内の改行はすべて"|delimiter|"で置き換え、メール毎の区切りは改行区切り」というテキストファイルに変換して保存します。こうしておくとメールをFileMakerPro7に取り込む際に1メール1レコードとなって処理がとても簡単になります。FIleMakerPro7側では取り込んだメールを日付、差出人、受信者、CC、BCC、メールタイトル、本文に分けて保存させます。この時各フィールドはテキスト型で「計算値時導入力」を利用して処理をするようにしています。こうすると一端メールを取り込んだ後にスクリプトを実行して処理するよりも速度も速いですし、計算フィールドとは異なり、後でフィールドの値を変更する事も簡単にできます。それでは使ってみましょう。
  1. まずは準備として各ファイルの修正が必要な項目を修正して下さい
  2. 修正が終わったらGetMail.shを実行します。実行方法はターミナルを開いて
      $./GetMail.sh
    と入力するだけです。しばらくしてエラーもなくプロンプトが表示されたらターミナルは閉じます。
  3. FileMakerPro7で メール受信箱.fp7 を開き、スクリプト「メール取り込み」を実行します。
以上の操作で、メール本文が取り込まれ、添付ファイルはmailclient.plで指定したディレクトリに保存されていると思います。添付ファイルはファイル名がかわってしまっていますので気をつけて下さい。もし添付ファイル名を変更したくない場合は違うモジュールを使ってPerlスクリプトを書くといいかもしれません。今回は簡単にすませるためにMail::POP3Clientを使いましたが、Net::POP3やMIME::Parser等を使うときっちりと添付ファイルの日本語名称も文字化けしないで保存できると思われます。それでもいくつかの小さなプログラムを組み合わせるだけで見事にメールをファイルメーカーに取り込むとができるようになりました。あとはこれを「FileMakerPro7のレイアウト上のボタンを押して実行する」とか「定期的にメール受信をしてDBにメール情報を追加する」といった事ができれば手軽に使えるものになりそうです。特に定期的にメール受信→DB格納は会社の問い合わせ用メールアドレスにきたメールをDBに自動で取り込み、FileMakerPro7の共有機能を通じて社員みんなで情報共有をおこなう、といった使い方ができるようになります。その辺りは後編にて解説いたします。ではまた次回。

[2004/12/03]
[有限会社ジェネコム 給前悟郎]

◆関連リンク


FileMaker Pro7
nkf のページ
今回使用したファイル

FMPro.jpについて |  利用規約 |  ポリシー |  お問い合わせ