メールに貼り付けた添付ファイルや本文をGoogle Docsへ登録するプログラムを作成しました - 旅モバ。のサンプルコードを公開します。PHPで書きました。不必要な変数や冗長な部分とか変な部分がありますが、めんどうなのでそのまま掲載します。
Java(JRE or JDK)と、google-docs-upload - A tool for batch uploading documents to a Google Docs account with recursive directory traversing. - Google Project Hosting、Pear_Mail,Pear_Net_POP3,Pear_MimeDecodeが必要です。MTA(Sendmailやqmail)は必要有りませんが、POP3サーバにアクセス可能な環境と、受信専用のメールアカウント1つが必要になります。
サンプルコードは以下より。
pop3_host = "ssl://pop.gmail.com"; $work->pop3_port = "995"; $work->pop3_username = "gmailのユーザー名"; $work->pop3_password = "gmailのパスワード"; // GoogleDocs接続情報 $work->docs_username = "gmailのユーザー名"; $work->docs_passwd = "gmailのパスワード"; // テンポラリデータ出力先 $work->tmpdir = "メールで受信した添付ファイルの一時保管先ディレクトリ"; $work->tmpdir2 = $work->tmpdir . "/"; $work->jardir = "jarファイルの保管先ディレクトリ"; // 処理実行 $work->getDocuments(); // class docsimport { var $pop3_host; // POP3サーバアドレス var $pop3_port; // POP3サーバポート var $pop3_username; // POP3サーバ接続時のユーザー名 var $pop3_password; // POP3サーバ接続時のパスワード var $mail_from; // 送信元アドレス(from) var $mail_to; // 送信先アドレス(to) var $mail_subject; // 送信メールタイトル var $tmpdir2; var $tmpdir; var $jardir; var $docs_username; var $docs_passwd; function getDocuments() { /* POP3サーバからのメール取得→ 添付ファイル(TXT)の文字コードを変換→ SMTPサーバへ接続してメール送信をするfunction ----------------------------------------------------------------- $dat POP3サーバから取得したデータ(配列) $datcnt $datの配列数(メール件数 - 1) ----------------------------------------------------------------- */ // POP3サーバへ接続して、データを取得 $dat = $this->pop3Connect(); // メール件数を取得 $datcnt = count($dat) - 1; // 取得データ(添付されたテキストファイル)をmimeデコード&ISO-2022-JPへ変換&送信 if ($dat[0] != false) { for ($i=0;$i<=$datcnt;$i++) { $result = $this->decodeDat2($dat[$i]); // $this->smtpConnect($result["body"]); } } // GoogleDocsへインポート system('chmod -R 777 ' . $this->tmpdir); $cmd = '/usr/bin/java -jar ' . $this->jardir . 'google-docs-upload.jar ' . $this->tmpdir . ' --username ' . $this->docs_username . ' --password ' .$this->docs_passwd; system($cmd); system('chmod -R 777 ' . $this->tmpdir); system('rm -rf ' . $this->tmpdir .'/*'); } function pop3Connect() { /* POP3サーバへ接続して、新着メッセージを受信するfunction ※PEAR Net_POP3モジュールを使用 ----------------------------------------------------------------- $params["host"] pop3サーバ接続先アドレス $params["port"] pop3サーバ接続先ポート $params["username"] pop3サーバ接続ユーザー名 $params["password"] pop3サーバ接続パスワード $pop PEAR Net_POP3モジュール $nummsg 新着メッセージ数 新着メッセージが無い場合は0 新着メッセージがある場合は1以上 $nowrow 配列の現在行(0〜) $dat POP3サーバから受信した生データを格納する配列 ----------------------------------------------------------------- */ // POP3サーバ接続情報をセット $params["host"] = $this->pop3_host; $params["port"] = $this->pop3_port; $params["username"] = $this->pop3_username; $params["password"] = $this->pop3_password; // POP3サーバへ接続 $pop = new Net_POP3(); $pop->connect($params["host"],$params["port"]); $pop->login($params["username"],$params["password"],USER); // 新着メッセージの件数を取得 $nummsg = $pop->numMsg(); // POP3サーバよりデータを取得 if ($nummsg == 0 || $nummsg == false) { $dat[0] = false; } else { for($i=1;$i<=$nummsg;$i++) { $nowrow = $i - 1; $dat[$nowrow] = $pop->getMsg($i); print $nowrow; } } // POP3サーバとの接続を切断 $pop->disconnect(); // 取得結果を返す return $dat; } function decodeDat2($dat){ /* メール生データをデコードする Ver2 ※mimeDecodeが必要 */ // メールデータ取得 $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = $dat; $params['crlf'] = "\r\n"; $structure = Mail_mimeDecode::decode($params); // 件名を取得 $mail_subject = $structure->headers['subject']; switch(strtolower($structure->ctype_primary)){ case "text": // シングルパート(テキストのみ) // メール本文取得 $mail_body = $structure->body; // 保存 $filename = mb_convert_encoding($mail_subject,"UTF-8","ISO-2022-JP"); $mail_body = mb_convert_encoding($mail_body,"UTF-8","ISO-2022-JP"); if ($filename <> '') { $filename = date("Y-m-d_H-i-s") . '_' . $filename . '.txt'; $fp = fopen($this->tmpdir2 .$filename,"w"); $length = strlen($mail_body); fwrite ($fp,$mail_body,$length); fclose ($fp); print $filename; } break; case "multipart": $kk=0 ; foreach($structure->parts as $part){ $mail_body = $part->body; //添付ファイル名取得 $filename = $structure->parts[$kk]->d_parameters['filename']; if ($filename == '') { $filename = $mail_subject . '.txt'; $mail_body = mb_convert_encoding($mail_body,"UTF-8","ISO-2022-JP"); } $filename = mb_convert_encoding($filename, "UTF-8", "ISO-2022-JP"); $kk++ ; if ($filename <> '') { $filename = date("Y-m-d_H-i-s") . '_' . $filename; // 保存 $fp = fopen($this->tmpdir2 .$filename,"w" ); $length = strlen( $mail_body ); fwrite( $fp, $mail_body, $length ); fclose( $fp ); print $filename; } } break; default: $mail_body = ""; } } } ?>