重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になります
下記スクリプトにてメールを受信して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="";
}

A 回答 (2件)

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



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

http://pear.php.net/manual/ja/package.networking …

deleteMsg() で削除ができます
    • good
    • 0

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



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

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


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!