Gmailを取得し添付ファイルのWord文書を保存。
<?php
setlocale(LC_ALL, 'ja_JP.UTF-8');// pathinfo()日本語対応
/**
* Created by PhpStorm.
* User: tetsuya
* Date: 2014/08/15
* Time: 10:06
* Gmailを読み込み添付ファイルを保存
*/
class Gmail {
// IMAP
protected $imap;
// アカウント情報
const SERVER = 'imap.googlemail.com';
const PORT = 993;
const ACCOUNT = 'hoge@gmail.com';
const PASSWORD = 'hogehoge';
const LABEL = 'INBOX';
// ボディタイプ 参考:http://jp2.php.net/manual/ja/function.imap-fetchstructure.php
const BODY_TYPE_APPLICATION = 3;
// 保存設定
protected $extensionList = array('doc', 'docx');
protected $saveDir = './';
const DEBUG_MODE = true;
public function __construct()
{
// メールボックス
$mailBox = '{'.self::SERVER.':'.self::PORT.'/novalidate-cert/imap/ssl}'.self::LABEL;
// メールサーバ接続
$this->imap = imap_open($mailBox, self::ACCOUNT, self::PASSWORD);
if ($this->imap && imap_num_msg($this->imap) > 0) {
# メール検索条件
if (self::DEBUG_MODE) {
# 1日前〜
$time = mktime(0, 0, 0, date("m") , date("d")-1, date("Y"));
$since = date('d-F-Y', $time);
$search = "SINCE $since";
} else {
# 未読
$search = 'UNSEEN ';
}
# メール検索
$mailList = imap_search($this->imap, $search);
if ($mailList) {
$n = count($mailList);
print 'メール:'.$n.'件<br>';
for ($i = 0;$i < $n;$i ++) {
# メール番号
$mailNo = $mailList[$i];
# ドキュメント保存
$this->saveDocs($mailNo);
}
} else {
print '新規メールはありませんでした。<br>';
}
imap_close($this->imap);
}
}
# ドキュメント保存
protected function saveDocs($mailNo) {
# メール情報
$info = imap_fetchstructure($this->imap, $mailNo);
if (!isset($info->parts) || !is_array($info->parts)) {
return;
}
$n = count($info->parts);
for ($i = 0;$i < $n;$i ++) {
# パート
$part = $info->parts[$i];
$partNo = $i + 1;
# ボディ取得(既読にする)
$body = imap_fetchbody($this->imap, $mailNo, $partNo, FT_INTERNAL);
# 種類
if ($part->type != self::BODY_TYPE_APPLICATION || !isset($part->dparameters)) {
continue;
}
# ファイル名
$fname = imap_mime_header_decode($part->parameters[0]->value);
if ($fname[0]->charset != 'default') {
$originalFilename = mb_convert_encoding($fname[0]->text, 'utf-8', $fname[0]->charset);
} else {
$originalFilename = $fname[0]->text;
}
# 拡張子
$extension = pathinfo($originalFilename, PATHINFO_EXTENSION);
if (!in_array($extension, $this->extensionList)) {
continue;
}
# デコード
$body = imap_base64($body);
# 保存
$filename = pathinfo($originalFilename, PATHINFO_FILENAME);
$saveFilename = $filename.'_'.date('Ymd_Hi').'.'.$extension;
$savePath = $this->saveDir.$saveFilename;
if ($fp = fopen($savePath, "w")) {
$length = strlen($body);
fwrite($fp, $body, $length);
fclose($fp);
print '保存ファイル: '.$saveFilename.'<br>';
}
}
}
}
new Gmail();