Link to home
Start Free TrialLog in
Avatar of jibip
jibip

asked on

Send HTML Formatted email with Perl

I have a feeling this question has been asked before.  If it has been answered, feel free to direct me to the answer.  If not, here is the issue.  

My web site is remotely hosted, and I cannot install any extra packages.  It is linux w/ apache 1.3.26.  

I want to have a html form trigger two emails, one to me with an out put of the filled out forms (which was easy and finished), the other should be a nice, html-formatted email to the person who actually filled out the form.  The way I am doing this appears to not work.  I am using a semi-customized formmail (from Matts script archive) to do this.  Here's what I have tried:

sub respond_mail {
    # Localize variables used in this subroutine.                            #
    local($print_config,$key,$sort_order,$sorted_field,$env_report);

    # Open The Mail Program
    open(MAIL,"|$mailprog");

    print MAIL "To: $Form{'EmailAddress'}\n";
    print MAIL "From: $Config{'email'} ($Config{'realname'})\n";

    # Check for Message Subject
    print MAIL "Subject: Thank you\n\n";

    print MAIL "Content-type:text/html\n\n";
    print MAIL <<EndResponseHTML;

   <html code>

    EndResponseHTML
    close (MAIL);
}

I am a relative beginner to perl, so explanations are good, though examples are great.
Avatar of glassd
glassd

What are you using to send the mail. Unless to tell mail to read the message header from the file, it will try reading from the command line. Using sendmail -t should work. Check the man page for sendmail or your preferred method.
Avatar of Tintin
Some general points first:

1.  Do not touch the stuff at Matt's script archive.  They are poorly written, insecure and not maintained.  Use the equivalent versions from http://nms-sourceforge.net/

2.  If you can upload HTML files, then you *can* install a lot of the Perl modules.

Anyway, the standard answer is to use MIME::Lite for this sort of stuff.  It is *extremely* easy to install.  It just requires one file to be copied to your server.

See http://search.cpan.org/~yves/MIME-Lite-3.01/lib/MIME/Lite.pm for usage examples.
ASKER CERTIFIED SOLUTION
Avatar of glassd
glassd

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jibip

ASKER

glassd, I am using sendmail

$mailprog = '/usr/lib/sendmail -i -t -f

I think you guys need to read a bit closer, my website is remotely hosted, therefore I can't install anything. I was also told that my version of formmail had been secured, and in fact it is locked to only send to and from specific email addresses, which I have control over.  

I'm not sure if you need other information, let me know.  
Avatar of jibip

ASKER

Can I use Per's ability to block html code like:

print MAIL <<EndHTML;

<html>
...
</html>

EndHTML


?
If your website is remotely hosted, how do you update your webpages and how do you expect to modify the Perl script if you have no access.
Avatar of jibip

ASKER

I use ftp to upload new files to the web directories that I have permission to.  

I just meant I can't install new packages or anything like that.  
Avatar of jibip

ASKER

glassd,

thanks for the sample code.  looks like I had everything except for the:

print MAIL "MIME-Version: 1.1\n";

After adding this it appears that the emails are being sent.  I was also able to use the html block, to simplify the coding.  I'll give an official update later, after I do some more testing.  

Thanks
jibip.

You *can* install a lot of the Perl modules yourself.  If you can FTP a file, you can install a Perl module.

MIME::Lite is one of the easiest modules to install.  Just one file involved.