2015年1月13日火曜日

FileMaker Proでメールを受信してみる

FileMaker Proでメールを受信してみる

FileMaker Proではメールを送ることができます。

しかし、メールを受信することができません。

受信するには何かしら外部の手助けが必要です。例えば、プラグインを使ったりします。

結構いろいろな方が、メールを受信できたらいいなという話をよく聞きます。

PHP+FileMaker Proで行う方法を紹介してみたいと思います。

しかし、自分でもまだ試行錯誤中なので、完ぺきではありません。

FileMaker Serverがあれば、PHP APIで、FileMakerデータベースに直接書き込めますが、ここではFileMaker Serverを使わずにやってみたいと思います。

準備

冒頭でも書きましたが、FileMaker  Proだけではできませんので他の手助けが必要になります。

方法としては、FileMakerからURLから挿入で、メールを受信するPHPスクリプトを起動して、送られてきたデータをフィールドに挿入し、分解していきます。

PHPスクリプトを起動するには、Webサーバが必要になります。

XAMPPというPHPやWebサーバのApacheなどが一度に開発用の環境がインストールされる、PHPとWebサーバを使用します。

このXAMPPでインストールされたApacheは初期設定では外からアクセスることができないようになっていて、自分からのアクセスだけが行えるようになっています。

このWebサーバにメールを受信するPHPスクリプトを置き、FileMaker Proから起動し、メールを受信してみます。

PHPのコード

<?php
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding("EUC-JP");
$stream = imap_open("{メールサーバーとポート番号}INBOX","ユーザ名","パスワード");

if($stream == false){
die("false");
}

//メッセージの件数を取得
$count = imap_num_msg($stream);

for ($value = 1;$value <= $count;$value++){
$head = imap_fetch_overview($stream,$value);
$mg = '[start]'.mb_convert_encoding(imap_fetchbody($stream,$value,1),'UTF-8','JIS').'[end]';
echo $mg;
}

//メールストリームを閉じる
imap_close($stream);

?>

※メールサーバーとポートの部分の例は {pop.exsample.com/pop3:110}INBOX のような感じです。またユーザ名とパスワードもそれぞれ必要です。

FileMakerデータベース

数件のメールがまとまった形で一時保存されるフィールド「g_mail」※グローバル格納
それを1通ごとに分解したものを保存する「text」とフィールドを用意しました。

上記のコードで取得されたものはメールの本文だけで、受信者や件名などのヘッダは行っていません(いろいろと面倒がったので、またの機会に…)

また、複数のメールが一つのまとまってPHPでは取得されますので、出力するときに、メールの始まりに[start]、一通のメールの終わりに[end]を付けて出力されるようにしています。

これをFileMakerのスクリプトで探して、分解して、1レコード、1件のメールとなるようにしています。そのスクリプトが下記になります。




注意点

ただのプレーンのメールの場合はあまり問題がありませんが、HTML形式のメールだったりすると文字化けしたりします。本当であれば、ヘッダを取得して分析し、文字コードをフレキシブルに変えたりということができればいいんでしょうが…

ぜんぜん完ぺきではないので、もし試される方がいらっしゃいましたら、自己責任でお願いいたします。