2017-12-27 13 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'>"; 

を以下に

変更これが欠落していますディレクトリから画像を読むため

あなたは新しいインスタンスを持っているので、明確なものは空で、すでにあるもの - 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

関連する問題