add inline image to a message sent with swiftmailer

somdow picture somdow · Mar 21, 2013 · Viewed 19.8k times · Source

Please excuse my php but, Im using Swiftmailer to send emails from a clients website. They've requested to add an image or two as a signature etc and so looking at the swiftmailer spec here

http://swiftmailer.org/docs/messages.html

They suggest either adding an inline image like this

$message->embed(Swift_Image::fromPath('http://site.tld/image here'))

or like this(in 2 steps)

$cid = $message->embed(Swift_Image::fromPath('image here'));

then in the emails body section add

<img src="' . $cid . '" alt="Image" />'

Both steps ive tried but to no avail. When i hit the send email button, i get this error which i dont quite know what to make of it.

Call to a member function embed() on a non-object in /home/content/78/5152878/html/4testing/erase/ask-doc-proc2.php on line 89

The only thing i added to my already working code and email was the image code directly from the example in the docs pages. This error obviously prevents the email from being sent. if i remove it then it sends emails fine. Since i need to add an image to this,

Any help is greatly appreciated. Thank you

edit: this is the portion where the email is built and sent $cid= $message->embed(Swift_EmbeddedFile::fromPath('http://myforecyte.com/dev/pic.jpg'));

->setTo( $docEmail)

->setBody("Hello" . "\r\n\r\n" .  
$fullName . " has visited MyForeCYTE.com. Upon their visit they have requested to learn more about the test. \r\n\r\n" . 
"Please visit www.ClarityWomensHealth.com to find out more about The ForeCYTE Breast Health Test, or call our customer support line at 1 (877) 722-6339.  \r\n\r\n" .
"We look forward to hearing from you. \r\n\r\n" .
"Thank You," , 'text/plain')

->addPart("Hello" . ",</b><br/><br/>" . 
"<b>" . $fullName . "</b> has visited www.MyForeCYTE.com. Upon their visit they have requested to learn more about the test. <br/>" . 
"Please visit www.ClarityWomensHealth.com to find out more about The ForeCYTE Breast Health Test, or call our customer support line at 1 (877) 722-6339.<br/> " . 
"We look forward to hearing from you. <br/><br/><br/>" . "<img src='" . $cid. "' alt='pic'/>" .

"Thank you " , 'text/html')
;

Answer

somdow picture somdow · Mar 21, 2013

After all the running around i found an alternate solution. Swiftmailer allows 2 methods in which to perform the same thing.

one is the embed() function

and the other one is the attach() function

so to the code above, i removed the "embed()" since it wasn't working for me and added these 2 lines below and it works

    ->attach(Swift_Attachment::fromPath('path to image here.jpg')  
->setDisposition('inline'));

and it worked 100%