将从数据创建的图像附加到电子邮件并发送test.php文件中的作品但不在我的主对象函数中的代码。哪里不对?

问题描述:

我的php文件通过image/png数据并需要附加到电子邮件并发送所述电子邮件。将从数据创建的图像附加到电子邮件并发送test.php文件中的作品但不在我的主对象函数中的代码。哪里不对?

下面是一个测试文件工作代码:

<?php 
include("include.php"); 
$subject = "Laptop Collection " . date("Y"); 
//create a boundary string 
$random_hash = md5(date('r', time())); 
//define the headers we want passed 
$headers[] = "From: Do Not Reply <[email protected]>"; 
//add boundary string and mime type specification 
$headers[] = "Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
ob_start(); 
$image = "data:image/png;base64,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"; 
$imgPng = imageCreateFromPng($image); 
imageAlphaBlending($imgPng, true); 
imageSaveAlpha($imgPng, true); 
header("Content-type: image/png"); 
imagePng($imgPng); 
$i = ob_get_contents(); 
$attachment = chunk_split(base64_encode($i)); 
// clear the buffer, but don't destroy it 
ob_clean(); 
// Define Body 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

This is the information for laptop problems. Your signature is attached to this e-mail. 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 
<img src="cid:signature.png" /> 
--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/zip; name="signature.png" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 

$mail = new \helpdesk\core\mail("[email protected]", $subject, $message); 
$mail->setHeaders($headers); 
$mail->send(); 
unset($mail); 
?> 

这里是我的HD(服务台)对象的函数被调用我的代码。它从test.php复制并粘贴。我甚至将图像数据设置为同一个字符串,它在test.php中效果很好,但通过发送所有多部分php内容的纯文本失败。

public static function createWorkflowData($signatureData, $signatureImage, $reviewData){ 
     //print_r($signatureData); 
     // print_r($signatureImage); 
     //print_r($reviewData); 
     //exit; 
     $stages = $_SESSION['student']->workflow->getAllStages(); 
     $updateAssignment = array(); 
     $assignmentID = ""; 
     $workflowID = null; 
     $mysqli = \helpdesk\db\DB::connect(); 
     $stmt = $mysqli->prepare("INSERT INTO `check_workflow_data` 
     (`workflowID`, `key`, `section`, `questionDate`, `answer`, `checkIn`, `WO`, `internalWO`) 
     VALUES (?,?,?,?,?,?,?,?)"); 
     foreach($stages as $stage){ 
      // Skip main stages 
      if($stage->getSection() == "main") 
       continue; 
      // Create Workflow in DB if it is the 1st one 
      if($stage->getAssignmentGroup() != $assignmentID){ 
       $assignmentID = $stage->getAssignmentGroup(); 
       $workflowID = \helpdesk\db\hd::createWorkflow($assignmentID, $signatureData); 
      } 
      //Create Any WO's 
      if($stage->getPreparedWO() != null){ 
       $stage->setWOID(\helpdesk\db\hd::createWO($stage->getPreparedWO())); 
      } 
      if($stage->getPreparedInternalWO() != null){ 
       $stage->setInternalWOID(\helpdesk\db\hd::createInternalWO($stage->getPreparedInternalWO())); 
      } 
      $key = $stage->getKey(); 
      $section = $stage->getSection(); 
      $questionDate = (($stage->getAnswerTime())?$stage->getAnswerTime():time()); 
      $answer = (($stage->getAnswer())?$stage->getAnswer():"Not Answered"); 
      $checkIn = (($stage->getAnswerCheckIn()=="true")?1:0); 
      $WO = $stage->getWOID(); 
      $internalWO = $stage->getInternalWOID(); 
      $stmt->bind_param("issisiss",$workflowID, $key, $section, $questionDate,$answer,$checkIn,$WO,$internalWO); 
      $stmt->execute(); 
      if($stmt->error != ""){ 
       printf("Error: %s.\n", $stmt->error); 
      } 

      if(($CheckIn = $stage->getAnswerCheckIn()) != null){ 
       if($CheckIn == "true"){ 
        //echo "Will update ".$assignmentID." by setting ".$stage->getSection()." to 1"; 
        $updateAssignment[$assignmentID][$stage->getSection()] = 1; 
       }else if($CheckIn == "false"){ 
        $updateAssignment[$assignmentID][$stage->getSection()] = 0; 
       } 
      } 
      //Prepare this item for this assignment for turn in 
     } 
     foreach($updateAssignment as $assignmentID => $assignmentUpdate){ 
      \helpdesk\db\hd::updateAssignment($assignmentID, $assignmentUpdate); 
     } 
     $stmt->close(); 
     $subject = "Laptop Collection " . date("Y"); 
     //create a boundary string 
     $random_hash = md5(date('r', time())); 
     //define the headers we want passed 
     $headers[] = "From: Do Not Reply <[email protected]>"; 
     //add boundary string and mime type specification 
     $headers[] = "Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
     ob_start(); 
     $image = $signatureImage; 
     $imgPng = imageCreateFromPng($image); 
     imageAlphaBlending($imgPng, true); 
     imageSaveAlpha($imgPng, true); 
     header("Content-type: image/png"); 
     imagePng($imgPng); 
     $i = ob_get_contents(); 
     $attachment = chunk_split(base64_encode($i)); 
     // clear the buffer, but don't destroy it 
     ob_clean(); 
     // Define Body 
     ob_start(); //Turn on output buffering 
     ?> 
     --PHP-mixed-<?php echo $random_hash; ?> 
     Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

     --PHP-alt-<?php echo $random_hash; ?> 
     Content-Type: text/plain; charset="iso-8859-1" 
     Content-Transfer-Encoding: 7bit 

     This is the information for laptop problems. Your signature is attached to this e-mail. 

     --PHP-alt-<?php echo $random_hash; ?> 
     Content-Type: text/html; charset="iso-8859-1" 
     Content-Transfer-Encoding: 7bit 

     <h2>Hello World!</h2> 
     <p>This is something with <b>HTML</b> formatting.</p> 
     <img src="cid:signature.png" /> 
     --PHP-alt-<?php echo $random_hash; ?>-- 

     --PHP-mixed-<?php echo $random_hash; ?> 
     Content-Type: application/zip; name="signature.png" 
     Content-Transfer-Encoding: base64 
     Content-Disposition: attachment 

     <?php echo $attachment; ?> 
     --PHP-mixed-<?php echo $random_hash; ?>-- 

     <?php 
     //copy current buffer contents into $message variable and delete current output buffer 
     $message = ob_get_clean(); 

     $mail = new \helpdesk\core\mail("[email protected]", $subject, $message); 
     $mail->setHeaders($headers); 
     $mail->send(); 
     unset($mail); 
    } 

有人能告诉我我在做什么错吗?

+0

为什么在括号中有'$ headers []'?我以前从来没有见过这样的事,或者有什么我不知道的?我经常看到(如果有多个)'$ headers =''$ headers。='(第二个等等,需要一个DOT)。只是说。 –

+0

对不起。邮件对象的setHeaders函数实际上在标题数组上实现了一个implode“\ r \ n”。这只是为了使它更清洁。我在某处读过它并喜欢它。 – Bil1

+0

嗯,有趣。 –

检查图像数据中是否有任何添加的字符,空格或制表符。

+0

感谢Fred的帮助,这个问题已解决!如果您查看代码示例,则会缩进第二个代码示例。这意味着当你进入Content-Disposition时:附件 导致错误代码的图像数据之前有一个选项卡。 – Bil1

+1

@ Bil1不客气。在这个问题上有更多的人,并且在早上做这件事总是会更好。有些人不想尝试像这样弄出东西。 “清晰的头脑”导致“解决方案”。一切顺利,欢呼! –