我正在制作邮件并嵌入图片。因此,当我为图像设置一个特定目录(./upload/tmp_logo_company_upload/company_logo_resized.jpg)时,它会成功发送到我的电子邮件,并显示我嵌入的图像。
但我想要获取上传目录中的所有图像,所以每当我运行脚本时,上传文件夹中的所有图像都会发送给我。有人可以帮我解决这个问题,下面你会看到我的代码。感谢。
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@gmail.com');
// Mail sent?
if( $objMail->send() ) {
// echo "Email Has Been Sent";
$GLOBALS['log']->fatal("WORKING");
}
// }
答案 0 :(得分: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链接到图像要好得多 - 这样只有当收件人要求它们时才加载它们,而不是无论发送它们。
答案 1 :(得分:0)
非常简单,你缺少完整的图像公共路径
将此更改为以下
$objMail->Body = "Here. <img src='cid:company_logo_resized.jpg'>";
到(图像公共路径包括http)
$objMail->Body = "Here. <img src='http://example.com/publicppath /company_logo_resized.jpg'>";
添加从dir读取图像的代码
//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;
它应该有用