Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用IMAP&;从电子邮件中保存图像附件;PHP?_Php_Email_Imap_Email Client - Fatal编程技术网

如何使用IMAP&;从电子邮件中保存图像附件;PHP?

如何使用IMAP&;从电子邮件中保存图像附件;PHP?,php,email,imap,email-client,Php,Email,Imap,Email Client,我已经成功地编写了连接到邮件服务器并检索所有新邮件的标题和正文的脚本。我想进一步检测附件是否存在(仅图像),如果存在,请下载到服务器 如何使用PHP和IMAP实现这一点 提前感谢KimNyholm发布了一套imap客户端方法,其中包含了您提出的目标: 他之所以写这段代码,是因为缺乏完整的教程和代码示例来处理PHPIMAP消息,正如他在这里所解释的:并且他的一些代码基于drupal库 我附上了一份执行您开始的步骤的方法摘录,我希望它能解决这个问题,尽管我发现它并不完全是最近的: 检查其中的附件和

我已经成功地编写了连接到邮件服务器并检索所有新邮件的标题和正文的脚本。我想进一步检测附件是否存在(仅图像),如果存在,请下载到服务器

如何使用PHP和IMAP实现这一点


提前感谢

KimNyholm发布了一套imap客户端方法,其中包含了您提出的目标:

他之所以写这段代码,是因为缺乏完整的教程和代码示例来处理PHPIMAP消息,正如他在这里所解释的:并且他的一些代码基于drupal库

我附上了一份执行您开始的步骤的方法摘录,我希望它能解决这个问题,尽管我发现它并不完全是最近的:

检查其中的附件和图像:

// ATTACHMENT
  // Any part with a filename is an attachment,
  // so an attached text file (type 0) is not mistaken as the message.
  if(isset($parameter['filename']) || isset($parameter['name'])) {
    $filename = ($parameter['filename'])? $parameter['filename'] : $parameter['name'];
    $filename=iconv_mime_decode($filename, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8');
    $id = isset($part->id) ? $part->id : '' ;
    $attachments[] = array('inline' => false, 'filename' => $filename, 'part' => $partNo, 'data' => $data, 'id' => $id);
  }
  if ($type==TYPEIMAGE){
    $info=fetchImageInfo($mailbox, $emailNumber, $partNo);
    $attachments[] = array('inline' => true, 'filename' => $info['filename'], 'part' => $partNo, 'data' => $data, 'id' => $info['id']);
  }
在这里,他将数据保存到tempdir并下载:

function EmailAttachmentsSave(&$mail){
  $html = '';
  $attachments=$mail->attachments;
  $msgNo=trim($mail->headerInfo->Msgno);
  foreach ($attachments as $attachment) {
    $partNo=$attachment['part'];
    $tmpDir= "imapClient/$msgNo/$partNo";
    $dirExists= is_dir($tmpDir);
    if (!$dirExists){
      $dirExists= mkdir($tmpDir, 0777, true) ;
    }
    $fileName=$attachment['filename'];
    $tmpName = "$tmpDir/$fileName";
    $saved = $dirExists && file_put_contents($tmpName, $attachment['data']);
    $tmpName=htmlentities($tmpName);
    $fileName=htmlentities($fileName);
    if (!$attachment['inline']){
      $html .= '<span><a href="' . $tmpName . '">' . $fileName . '</a> </span>';
    }
    $cid =$attachment['id'];
    if (isset($cid)){
      $mail->htmlText=EmailEmbeddedLinkReplace($mail->htmlText,$cid,$tmpName);
    }
  }
  return $html ;
}

function EmailPrint($mail){
  $headerInfo=$mail->headerInfo;
  $html = '<h4>' . htmlentities($headerInfo->subject) . '</h4>';
  $html .= '<p>From: ' . htmlentities($headerInfo->fromaddress) . '</p>';
  $html .= '<p>To: ' . htmlentities($headerInfo->toaddress) . '</p>';
  $html .= '<div style="background: lightgrey">' . (empty($mail->htmlText) ? ('<p>' . $mail->plainText . '</p>') : $mail->htmlText) . '</div>';
  return $html ;
}

function EmailDownload($host, $user, $password){
  $html = '<head> <meta charset="UTF-8"> </head>';
  $html .= '<h3>Simple imap client</h3>';
  $mails=EmailGetMany($host, $user, $password);
  $count=count($mails);
  $html .= "<p>$user has $count mails at $host.</p>";
  foreach ($mails as $mail){
      $html .= '<hr>';
      $html .= EmailAttachmentsSave($mail);
      $html .= EmailPrint($mail);
  }
  return $html ;
}
函数EmailAttachmentsSave(&$mail){
$html='';
$attachments=$mail->attachments;
$msgNo=trim($mail->headerInfo->msgNo);
foreach($attachments作为$attachment){
$partNo=$attachment['part'];
$tmpDir=“imapClient/$msgNo/$partNo”;
$dirExists=is_dir($tmpDir);
如果(!$dirExists){
$dirExists=mkdir($tmpDir,0777,true);
}
$fileName=$attachment['fileName'];
$tmpName=“$tmpDir/$fileName”;
$saved=$dirExists&&file_put_内容($tmpName,$attachment['data']);
$tmpName=htmlentities($tmpName);
$fileName=htmlentities($fileName);
如果(!$attachment['inline']){
$html.='';
}
$cid=$attachment['id'];
如果(isset($cid)){
$mail->htmlText=EmailEmbeddedLinkReplace($mail->htmlText$cid$tmpName);
}
}
返回$html;
}
功能EmailPrint($mail){
$headerInfo=$mail->headerInfo;
$html=''.htmlentities($headerInfo->subject)。'';
$html.='From:'.htmlentities($headerInfo->fromaddress)。'

'; $html.='To:'.htmlentities($headerInfo->toaddress)。'

'; $html.=''(空($mail->htmlText)?(“”。$mail->纯文本。“

”):$mail->htmlText)。''; 返回$html; } 函数EmailDownload($host、$user、$password){ $html=''; $html.='Simple imap client'; $mails=EmailGetMany($host,$user,$password); $count=计数($mails); $html.=“$user在$host上有$count封邮件。

”; foreach($mails作为$mail){ $html.='
'; $html.=EmailAttachmentsSave($mail); $html.=EmailPrint($mail); } 返回$html; }
这实际上非常复杂,如果您没有使用IMAP和MIME的经验,我建议您使用一个将所有复杂性抽象掉的包。例如