Solved

MIME::Lite::TT::HTMLProblem -  Unable to see HTML images on the mail client

Posted on 2008-10-20
8
1,301 Views
Last Modified: 2013-12-25
Hi There,

I am using MIME::Lite::TT::HTML Perl module to send an HTML based email. HTML file contains a header image and footer image and the content within. When I send an email using this module, I can see on the mail client only the text content and not the header and footer images.

- I am sure the images are in the same path as the html files is and as well I tried giving absolute path of images in the HTML file as well. But nothing works.

Can some one guide me on what I need to do so that I can see header and footer images when I see the mail in my mail client ?

Thanks
test.pl

----------
 

use strict; 

use warnings; 

use MIME::Lite::TT::HTML; 
 

my %params; 
 

$params{first_name} = 'foo'; 

$params{last_name}  = 'bar'; 

$params{date}    = 'Oct 20, 2008';
 

my %options; 

$options{INCLUDE_PATH} = '/path/to/templates'; 
 

my $msg = MIME::Lite::TT::HTML->new( 

            From        =>  'x@abc.com',

            To          =>  'y@abc.com', 

            Cc          =>  'z@abc.com', 

            Subject     =>  'Your recent purchase', 

            Template    =>  {

                                #text    =>  'text.txt',

                                html    =>  'test.html',

                            },

            TmplOptions =>  \%options, 

            TmplParams  =>  \%params, 

); 
 

$msg->attr("content-type" => "multipart/mixed");
 

 # send the email

MIME::Lite->send('smtp', 'smtp.ss.xyz.com', Timeout => 60);

$msg->send; 

print "Ok!\n";

------------------------------------------------------------------------
 

test.html

----------
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

<title>SPOT Satellite Messenger</title>

<style type="text/css">

<!--

body,td,th {

	font-family:Arial, Helvetica, sans-serif;

	font-size: 12px;

	color: #333333;

}

body {

	margin-left: 0px;

	margin-top: 0px;

}

a {

	color: #333333;

	text-decoration: none;

}

-->

</style>

</head>
 

<body>

<p><img src="/images/header.jpg" width="719" height="91" /></p>

<blockquote>

  <p>Dear [% first_name %],</p>

  <p>Thank you for your continued service with X<br />

    [% date %]

    .</p>

  <p>Thank you,</p>

  <p>Customer Care<br />

  </p>

  <p>&nbsp;</p>

  <p>&nbsp;</p>

  <p> </p>

  <p>&nbsp;</p>

  <p>&nbsp;</p>

</blockquote>

<p><img src="/images/footer.jpg" width="720" height="44" border="0" usemap="#Map" />

<map name="Map" id="Map"><area shape="rect" coords="572,14,708,34" href="http://www.xyz.com" />

</map></p>

</body>

</html>

Open in new window

0
Comment
Question by:hSindhu
  • 5
  • 3
8 Comments
 
LVL 10

Expert Comment

by:MadShiva
Comment Utility
Hi !

Is one solution :

Tell my it's satisfy to you.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>SPOT Satellite Messenger</title>
<style type="text/css">
<!--
body,td,th {
        font-family:Arial, Helvetica, sans-serif;
        font-size: 12px;
        color: #333333;
}
body {
        margin-left: 0px;
        margin-top: 0px;
}
a {
        color: #333333;
        text-decoration: none;
}
-->
</style>
</head>
 
<body>
<p><img src="http://www.yoursite.com/images/header.jpg" width="719" height="91" /></p>
<blockquote>
  <p>Dear [% first_name %],</p>
  <p>Thank you for your continued service with X<br />
    [% date %]
    .</p>
  <p>Thank you,</p>
  <p>Customer Care<br />
  </p>
  <p> </p>
  <p> </p>
  <p> </p>
  <p> </p>
  <p> </p>
</blockquote>
<p><img src="http://www.yoursite.com/images/footer.jpg" width="720" height="44" border="0" usemap="#Map" />
<map name="Map" id="Map"><area shape="rect" coords="572,14,708,34" href="http://www.xyz.com" />
</map></p>
</body>
</html>
0
 

Author Comment

by:hSindhu
Comment Utility
Hi Shiva,

I was looking for how we can get the images on the email client using use MIME::Lite::TT::HTML; . Is it that you missed the PERL Code? I am only seeing the HTML template. Please let me know. If possible can you paste the full code snippet.

Thanks
0
 

Author Comment

by:hSindhu
Comment Utility
Hi Shiva,

I was looking for how we can get the images on the email client using use MIME::Lite::TT::HTML; . Is it that you missed the PERL Code? I am only seeing the HTML template. Please let me know. If possible can you paste the full code snippet.

Thanks
0
 
LVL 10

Expert Comment

by:MadShiva
Comment Utility
Hi hSindhu !

Yes I don't have put the Perl code because I don't have change them. You have two solution. First I think is to attach the image in the mail or choose one full link like http://something.com.

I have give you the second solution.


Now is the first :


test.pl
----------
 
use strict;
use warnings;
use MIME::Lite::TT::HTML;
 
my %params;
 
$params{first_name} = 'foo';
$params{last_name}  = 'bar';
$params{date}    = 'Oct 20, 2008';
 
my %options;
$options{INCLUDE_PATH} = '/path/to/templates';
 
my $msg = MIME::Lite::TT::HTML->new(
            From        =>  'x@abc.com',
            To          =>  'y@abc.com',
            Cc          =>  'z@abc.com',
            Subject     =>  'Your recent purchase',
            Template    =>  {
                                #text    =>  'text.txt',
                                html    =>  'test.html',
                            },
            TmplOptions =>  \%options,
            TmplParams  =>  \%params,
);
 
$msg->attr("content-type" => "multipart/mixed");


my $header_path = '/images/header.jpg';

my $footer_path = '/images/footer.jpg';


$msg->attach(  Type        =>  'image/jpeg',
                Path        =>  $header_path,
                Filename    =>  'header.jpg',
                Disposition =>  'attachment'
 );

$msg->attach(  Type        =>  'image/jpeg',
                Path        =>  $footer_path,
                Filename    =>  'footer.jpg',
                Disposition =>  'attachment'
 );

 
 # send the email
MIME::Lite->send('smtp', 'smtp.ss.xyz.com', Timeout => 60);
$msg->send;
print "Ok!\n";


Sorry but i can't try it now. I hope this work.

Best Regards
0
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 

Author Comment

by:hSindhu
Comment Utility
Hi Shiva,

Let me try this snippet and I will keep you posted if that worked.

Thanks!
0
 

Author Comment

by:hSindhu
Comment Utility
Hi Shiva,

I dont wish to give a http path for my image files. I want to give an absolute path like Ex: "/home/sin/test" in the code. I tried to test your code and I dont see the images in the email. I just got the images as an attachment in the email. Can you please paste a working code snippet so that I can test it?

Thanks!
0
 
LVL 10

Accepted Solution

by:
MadShiva earned 50 total points
Comment Utility
Hi !

Yes it's what I am not sur.

$msg->attach(  Type        =>  'image/jpeg',
                Path        =>  $footer_path,
                Filename    =>  'footer.jpg',
                Disposition =>  'attachment'
 );


try with remove the part : Disposition =>  'attachment'


Also I have find this snippet that you can adjust and try.

If it's not working I can try at home.


Best Regards


use strict;

use warnings;

use 5.010;
 

use MIME::Lite;

use HTML::TreeBuilder; # or what you like most

use File::Basename;

use File::Type;
 

# ...
 

sub makemsg {

    my (%id, %saw);

    (my $tree=HTML::TreeBuilder->new)->parse_file(shift);

    for my $img ($tree->look_down(_tag => 'img')) {

        defined(my $imgname=$img->attr('src')) or 

          warn "[$0] Warning: img tag with no src attribute!" and next

+;

        unless($id{$imgname}) {

            # not necessary, but I prefer it like that!

            (my $id=basename $imgname) =~ s/_*[^\w]+/_/g;

            $id++ while exists $saw{$id};

            $saw{$id}++;

            $id{$imgname}=$id;

        }

        $img->attr(src => "cid:$id{$imgname}");

    }

    my $msg=MIME::Lite->new(

        To =>'someone@example.org',

        Subject =>'HTML with in-line images!',

        Type =>'multipart/related');

    $msg->attach(

        Type => 'text/html',

        Data => $tree->as_HTML);

    

    $tree->delete; # However ugly, it's necessary!

    

    my $ft=File::Type->new;

    for (keys %id) {

        $msg->attach(

            Type => $ft->checktype_filename($_) // 'image/xyz',

            Id   => $id{$_},

            Path => $_);

    }

    $msg;

}

Open in new window

0
 

Author Closing Comment

by:hSindhu
Comment Utility
Thanks for your help!
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Suggested Solutions

In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08…
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
Learn the basics of if, else, and elif statements in Python 2.7. Use "if" statements to test a specified condition.: The structure of an if statement is as follows: (CODE) Use "else" statements to allow the execution of an alternative, if the …
The viewer will learn how to dynamically set the form action using jQuery.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now