こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PEAR の Mail_mimeDecodeで

お世話になります
下記スクリプトにてメールを受信してDBに格納しようと思っています
DBに格納後、メールサーバからメールを消したいのですが、メールボックスを空にするためにの処理を教えて頂けないでしょうか?

宜しくお願いいたします。



///////////////////////////////////
//PEARのパスを設定
require_once 'Mail/mimeDecode.php';

#-- メールデータの取得
$params['include_bodies'] =true;
$params['decode_bodies'] =true;
$params['decode_headers'] =true;
$params['input'] = file_get_contents("php://stdin"); //標準入力
$params['crlf'] = "\r\n";
$mail_data = Mail_mimeDecode::decode($params);

#-- From
$FromAddress = $mail_data->headers['from'];
$FromAddress = addslashes($FromAddress); //エスケープ処理
$FromAddress = str_replace('"','',$FromAddress);

#-- 署名つきの場合
preg_match("/<.*>/",$FromAddress,$str);
if($str[0]!=""){
$str=substr($str[0],1,strlen($str[0])-2);
$FromAddress=$str;
}

#-- Subject フィールドの取得
$Subject = $mail_data->headers['subject'];
$Subject = mb_convert_encoding($Subject,"UTF-8","JIS");

#-- 本文の取得
switch(strtolower($mail_data->ctype_primary)){
case "text": //テキストメール
$MailBody = $mail_data->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
break;
case "multipart": //マルチパート(添付ファイル(画像前提)付)
foreach($mail_data->parts as $part){
switch(strtolower($part->ctype_primary)){
case "text":
$MailBody = $part->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
break;
case "image":
$type = strtolower($part->ctype_secondary);
// jpg,gif,png以外の画像形式は受け付けない
if($type != "jpeg" and $type != "jpg" and $type != "gif" and $type != "png"){
continue;
}
// ファイルを保存
/*
$fp = fopen("/tmp/". time() . $type, "w");
$length = strlen($part->body);
fwrite($fp,$part->body,$length);
fclose($fp);
*/
break;
}
}
break;
default:
$MailBody="";
}

投稿日時 - 2014-05-23 20:20:54

QNo.8607976

困ってます

質問者が選んだベストアンサー

>メールボックスを空にするためにの処理

メールを送るのはPEAR::Mailですが受け取るのはPEAR::Net_pop3ですね

http://pear.php.net/manual/ja/package.networking.net-pop3.php

deleteMsg() で削除ができます

投稿日時 - 2014-05-26 09:24:24

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>$params['input'] = file_get_contents("php://stdin"); //標準入力

メールフィルタか何かの設定で、到着したメールをphpスクリプトに引き渡すようになっているのですよね?もしこの部分を活かすならメールフィルタ側で削除するのがスジです。

#現状のままではどうやっても(phpスクリプトからは)削除は出来ません。


どうしても「処理後に削除したい」ということなら、メールフィルタはスクリプト起動だけに利用して(php://stdinは利用しないで)自前でPOP3サーバに繋いでメールを取得してください。最初にUIDL(Unique ID Listing)を取得して各々のIDのメールを取得・処理することになりますが、どうせPOP3サーバからメールを削除するにはメールID(UniqueID)が必要ですから。

投稿日時 - 2014-05-24 11:06:40

あなたにオススメの質問