×

Notice

The forum is in read only mode.
Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC: Inline Images

Inline Images 11 years 1 month ago #22797

  • Todd Williams
  • Todd Williams's Avatar Topic Author
  • Offline
  • Fresh Boarder
  • Fresh Boarder
  • Posts: 1
  • Thank you received: 0
Hi!

I just figured I'd pass along a quick little hack that will allow image attachments to take advantage of the new "image" tag that is part of the Mandrill API.

In the mail.php plug-in script add a new array for image attachments. I called mine "$iAttachments"
	private function mandrillSend()
	{
		$action = 'send';
		$to = array();
		$attachments = $this->GetAttachments();
		$mAttachments = array(); //file attachments
		$iAttachments = array(); //image attachments //<--- add this image array
		if(count($attachments) > 0) {

Add an "image" match conditional on $mime_type as shown below:
		if(count($attachments) > 0) {
 
			foreach($attachments as $attachment) {
				// a lot of people are setting wrong mime_type when using the addAtachment function
				// let us try to determine the mime_type ourselves on the base of the filename
				//
				$mime_type = $this->detectMimeType($attachment[1]);
				if(!$mime_type) {
					$this->writeToLog(JText::sprintf('PLG_SYSTEM_MANDRILL_UNSUPPORTED_ATTACHMENT', $attachment[2], $mime_type));
					// if one of the files is not an image/txt or pdf, then use standard phpmailer
					// the mandrill api doesn't support other formats right now
					$this->phpMailerSend();
				};
 
//<--- look for attachments with mime type of "image"
//<--- add these images to the new $iAttachment array
 
				if (preg_match('/^image/',$mime_type)) {
					$iAttachments[] = array(
						'name' => $attachment[2],
						'type' => $mime_type,
						'content' => $this->EncodeFile($attachment[0])
					);
 
//<--- any other attachments get added to the original $mAttachments array, as per normal
				} else {
					$mAttachments[] = array(
						'name' => $attachment[2],
						'type' => $mime_type,
						'content' => $this->EncodeFile($attachment[0])
					);
			}
			}
		}
 

Assign to the mandrill message object a new "images" array using the new $iAttachments
		if(count($mAttachments)) {
			$mandrill->message['attachments'] = $mAttachments;
		}
 
//<--- assign $iAttachments to a new mandrill message "images" array.
		if(count($iAttachments)) {
			$mandrill->message['images'] = $iAttachments;
		}
 

Now, image attachements will be given a "Content-Disposition" of "inline" as opposed to "attachment" and will display in html messages properly.

Regards,
-- williatf

Inline Images 11 years 1 month ago #22848

  • Daniel Dimitrov
  • Daniel Dimitrov's Avatar
  • Away
  • Administrator
  • Administrator
  • Posts: 9618
  • Karma: 155
  • Thank you received: 1081
Hey Todd,
Thank you for this! I'll add this code to the next release!
Daniel
  • Page:
  • 1
Time to create page: 0.097 seconds