作者 邓超

m

@@ -116,5 +116,16 @@ class Attachment { @@ -116,5 +116,16 @@ class Attachment {
116 return false; 116 return false;
117 } 117 }
118 118
  119 + /**
  120 + * 读取 附件的内容id ,如果附件是 inline 这个是必须的
  121 + * @return string
  122 + * @author:dc
  123 + * @time 2024/9/23 10:27
  124 + */
  125 + public function getContentId(){
  126 + $contentId = $this->data->get('Content-ID');
  127 + return trim(str_replace(['"','<','>'],'',$contentId));
  128 + }
  129 +
119 130
120 } 131 }
@@ -282,6 +282,7 @@ class Body { @@ -282,6 +282,7 @@ class Body {
282 } 282 }
283 283
284 /** 284 /**
  285 + * 这个函数的主要目的 组装哪些以附件发送的图片并且需要显示在页面上的
285 * 有些邮件里面的图片是通过附件的形式发来的 286 * 有些邮件里面的图片是通过附件的形式发来的
286 * <img src="cid:xxxx" /> 这种就是附件图片,需要替换的 287 * <img src="cid:xxxx" /> 这种就是附件图片,需要替换的
287 * @return array 288 * @return array
@@ -290,25 +291,30 @@ class Body { @@ -290,25 +291,30 @@ class Body {
290 */ 291 */
291 public function getHtmlAndImg():array { 292 public function getHtmlAndImg():array {
292 $html = $this->getHtml(); 293 $html = $this->getHtml();
293 - $atta = [];  
294 - foreach ($this->items as $item){  
295 - if($item->eq('Content-Disposition','inline')){  
296 - $atta = $item;  
297 - } 294 + $attachment = $this->getAttachment(true);
  295 + foreach ($attachment as $item){
  296 + // 替换图片路径
  297 + $html = preg_replace(
  298 + "/['|\"]cid:".$item->getContentId()."['|\"]/i",
  299 + '"data:'.$item->getFileType().';base64,'.base64_encode($item->getContent()).'"',
  300 + $html
  301 + );
298 } 302 }
299 303
  304 + return $html;
300 } 305 }
301 306
302 /** 307 /**
303 * 读取附件 308 * 读取附件
  309 + * @param bool $inline 是否是读取嵌入html中的图片或者其他,一半情况 图片路径以 cid:xxx
304 * @return Attachment[] 310 * @return Attachment[]
305 * @author:dc 311 * @author:dc
306 - * @time 2024/9/21 10:05 312 + * @time 2024/9/23 10:23
307 */ 313 */
308 - public function getAttachment():array { 314 + public function getAttachment(bool $inline = false):array {
309 $attachment = []; 315 $attachment = [];
310 foreach ($this->items as $item){ 316 foreach ($this->items as $item){
311 - if($item->eq('Content-Disposition','attachment')){ 317 + if($item->eq('Content-Disposition',$inline ? 'inline' : 'attachment')){
312 $attachment[] = new Attachment($item); 318 $attachment[] = new Attachment($item);
313 } 319 }
314 } 320 }