2017-12-27 3 views
0

현재 메일러를 캡쳐하고 이미지를 삽입하고 있습니다. 그래서 이미지에 대한 특정 디렉토리 (./upload/tmp_logo_company_upload/company_logo_resized.jpg)를 설정하면 내 이메일에 성공적으로 전송되고 내가 임베드 한 이미지가 표시됩니다.php 메일러를 사용하여 이미지 삽입

하지만 업로드 디렉토리의 모든 이미지를 가져 오려면 스크립트를 실행할 때마다 업로드 폴더의 모든 이미지가 나에게 보내집니다. 누군가가 나를 도와 줄 수 있습니까? 아래에서 내 코드를 볼 수 있습니다. 감사.

if(!defined('sugarEntry')) define('sugarEntry',true); 
    // Set required classes 
    require_once('include/entryPoint.php'); 
    // Get access to globals 
    global $db, $current_user, $timedate; 

     $arRecipientsId = array(); 
     $objDefaultMail = new Email(); 
     $objDefault = $objDefaultMail->getSystemDefaultEmail(); 
     $objMail = new SugarPHPMailer(); 
     $objMail->setMailerForSystem(); 
     $objMail->From = $objDefault['email']; 
     $objMail->FromName = $objDefault['name']; 
     $objMail->Subject = ""; 
     // Set the Location of photo 
     $strLocation = './upload/tmp_logo_company_upload/company_logo_resized.jpg'; 
     // Add image 
     $objMail->AddEmbeddedImage($strLocation, 'company_logo_resized.jpg'); 
     // 
     $objMail->Body = "Here. <img src='cid:company_logo_resized.jpg'>"; 
     // Send as HTML 
     $objMail->IsHTML(true); 
     // Clear previous email data 
     $objMail->ClearAllRecipients(); 
     $objMail->ClearReplyTos(); 
     $objMail->prepForOutbound(); 
     // Store recipients 
     $arRecipientsId[] = "1"; //crmonline 
     // Add as BCC 
     $objMail->AddBCC('[email protected]'); 
     // Mail sent? 
     if($objMail->send()) { 
     // echo "Email Has Been Sent"; 
     $GLOBALS['log']->fatal("WORKING"); 
     } 
    // } 
+0

질문을 잘 이해하지 못했습니다. 누군가가 이미지를 업로드 할 때마다 PHP가 그 이미지를 메일로 보낼 디렉토리를 만들고 싶습니까? 더 자세한 내용을 설명하기 위해 질문을 편집 할 수 있습니까? – flen

+0

안녕하세요. 제 질문을 다시 편집하여 명확하게 말합니다. 감사합니다 – kardo

답변

0

그것의 아주 간단합니다, 당신은 완벽한 이미지 공개 경로를 (이미지 공개 경로에 http 포함)

$objMail->Body = "Here. <img src='http://example.com/publicppath /company_logo_resized.jpg'>"; 

추가 코드에

$objMail->Body = "Here. <img src='cid:company_logo_resized.jpg'>"; 

을 다음과

변경이 누락 dir에서 이미지를 읽는 방법

새 인스턴스를 가지고 있기 때문에 분명 그 비어 이미 일 - 10
//path to the dir 
$dir = '/upload'; 
$files = scandir($dir); 


foreach ($files as $image) { 
    $all_img .= " <img src='http://example.com/imagepath/".$image."'><br>"; 
} 

//for embeding image 
foreach ($files as $image) { 
    $im = file_get_contents($image); 
    $em_img .="<img src='data:image/jpg;base64,".base64_encode($im)."'> <br>" 
} 

//via public path 
$objMail->Body = "Here ".$all_img; 

//or embed sending 
$objMail->Body = "Here ".$em_img; 

+0

안녕하세요 mahesh, 고맙습니다.하지만이 문제가 없습니다 ($ objMail-> Body = "Here. ";). 내가 원하는 것은 업로드 폴더 아래 모든 이미지를 가져 오는 것입니다. – kardo

+0

모든 이미지를 복사하여 폴더를 업로드하고 공용 경로를 사용하십시오. 미안 해요, 이걸 이해하지 못했습니다. –

+0

괜찮습니다. 이미 모든 이미지를 폴더로 복사하지만 작동하지 않습니다. 하지만 특정 파일을 설정하려고하면 작동합니다. 예 : $ strLocation = './upload/tmp_logo_company_upload/company_logo_resized.jpg' – kardo

1

ClearAllRecipients 또는 ClearReplyTos를 호출 할 필요가 없습니다 작동합니다.

사용하는 폴더를 통해 모든 파일을 반복하는 DirectoryIterator - 당신은 단지 각 addEmbeddedImage를 호출하고 포함 할 각 이미지에 대한 <img src="cid:xxx"> 태그를 추가해야합니다, 그래서 당신이 필요로하는 모든 파일 이름을 얻을 것이다. 말했다
$dir = './upload/tmp_logo_company_upload'; 
$cidn = 0; 
foreach (new DirectoryIterator($dir) as $fileInfo) { 
    if($fileInfo->isDot() or $fileInfo->isDir()) continue; 
    $objMail->addEmbeddedImage($dir . DIRECTORY_SEPARATOR . $fileInfo->getFilename(), "img_$cidn"); 
    $mailObj->Body .= "<img src=\"cid:img_$cidn\">"; 
    ++$cidn; 
} 

,이 이메일에 이미지를 사용하는 비효율적 인 방법입니다 - 그들은 단지로드되는 방법을받는 사람이 아니라 그들을 보내는 것보다, 그들에게 질문 할 때 -이 이미지에 HTTP 링크를 사용하는 것이 훨씬 낫다 상관 없어요.

+0

안녕하세요 싱크로, 대답 해줘서 고맙습니다. 사실 이것은 이제 내가 사용하는 쿼리가 고정되어 foreach 루프를 만들어 모든 이미지를 얻습니다. – kardo

관련 문제