Outputting the Message

We open the pipe to sendmail , then print to that filehandle by using the print function followed by the name of the filehandle we want to print to (MAIL). (Notice, by the way, how you don’t use a comma after the name of the filehandle. Sticking a comma there is a common mistake.)

print MAIL <<"EOF";
To: $recipient
From: $sender
Subject: Sample Web Form Submission

$mail_body
EOF

Here we are printing out some header fields that sendmail expects to see. We use the value from the script’s configuration section (as stored in the $recipient variable) for the To: header, and either the value from the configuration section, or the submitted form data we replaced it with, for the From: header. We print a blank line, then finish up with the message body that was previously stored in the $mail_body variable.

Finally, we close the filehandle:

close MAIL or die "Can't close pipe to $sendmail: $!\n";

I threw an or die... statement on the close statement, by the way, more out of habit than because this script is ever likely to fail at that point. I never used to bother doing the or die... thing on close statements, until the day my ISP’s disk filled up and a script I had created to automatically rewrite a big chunk of my web site went happily about its business, opening filehandles to all the site’s files and printing updated content to them, then failing (silently) when it tried to close the filehandle and got a “disk full” error. The end result: a site full of empty (that ...

Get Perl for Web Site Management now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.