我需要代码来监控我的邮件收件箱,并将邮件转发到另一个电子邮件地址。我使用下面的代码从收到的消息中获取附件。但我得到一个错误“注意:未定义的属性:第60行的C:\ wamp \ www \ mail \ c.php中的stdClass :: $处置”
这是我的代码
<?php
$host = '{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}inbox';
$login = 'AAAA@CCC.com';
$password = 'XXXXXXX';
$savedirpath = "../mail";
$type = 'ReadAttachment';
$obj = new $type;
$obj->getdata($host,$login,$password,$savedirpath,$delete_emails=false);
class ReadAttachment{
function getdecodevalue($message,$coding) {
switch($coding) {
case 0:
case 1:
$message = imap_8bit($message);
break;
case 2:
$message = imap_binary($message);
break;
case 3:
case 5:
$message=imap_base64($message);
break;
case 4:
$message = imap_qprint($message);
break;
}
return $message;
}
function getdata($host,$login,$password,$savedirpath,$delete_emails=false) {
// make sure save path has trailing slash (/)
//print_r("test");
$savedirpath = str_replace('\\', '/', $savedirpath);
if (substr($savedirpath, strlen($savedirpath) - 1) != '/') {
$savedirpath .= '/';
}
$mbox = imap_open ($host, $login, $password) or die("can't connect: " . imap_last_error());
$message = array();
$message["attachment"]["type"][0] = "text";
$message["attachment"]["type"][1] = "multipart";
$message["attachment"]["type"][2] = "message";
$message["attachment"]["type"][3] = "application";
$message["attachment"]["type"][4] = "audio";
$message["attachment"]["type"][5] = "image";
$message["attachment"]["type"][6] = "video";
$message["attachment"]["type"][7] = "other";
//print_r($message);
$emails = imap_search($mbox,'ALL');
foreach($emails as $email_number) {
$structure = imap_fetchstructure($mbox, $email_number , FT_UID);
$parts = $structure->parts;
$fpos=2;
for($i = 1; $i < count($parts); $i++) {
$message["pid"][$i] = ($i);
$part = $parts[$i];
if($part->disposition == "ATTACHMENT") {
$message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype);
$message["subtype"][$i] = strtolower($part->subtype);
$ext=$part->subtype;
$params = $part->dparameters;
$filename=$part->dparameters[0]->value;
$mege="";
$data="";
$mege = imap_fetchbody($mbox,$email_number,$fpos);
$filename="$filename";
$fp=fopen($savedirpath.$filename,"w");
$data=$this->getdecodevalue($mege,$part->type);
//print_r($data);
fputs($fp,$data);
fclose($fp);
$fpos+=1;
}
}
}
// imap_expunge deletes all tagged messages
imap_close($mbox);
}
}
感谢作者,但我无法获得任何进一步的帮助。
我收到错误"Notice: Undefined property: stdClass::$disposition in C:\wamp\www\mail\c.php on line 60"
这恰好指出了行if($part->disposition == "ATTACHMENT")
请给我一个解决方案。
我是php的新手,正在努力编写这个邮件功能,
提前致谢: - )
答案 0 :(得分:0)
您需要先检查$ disposition是否存在:
if((isset($ part-&gt; disposition))&amp;&amp;($ part-&gt; disposition ==“ATTACHMENT”))