Nothing jumps out at me as non-working and you haven't said in what way it's failing to work other than that you don't receive the mail, so I don't know what will get it working, but there's a good chance that it may be on the mail service side - have you checked the sending machine's mail queue for undelivered messages, checked the sendmail log for errors, etc.?
I would, however, strongly recommend that you not attempt to interface with CGI and email by hand. Those are easy things to get subtly wrong, so it's much better to use well-tested modules to handle those interactions for you.
For the web side, I would normally suggest that you look at a web framework such as Dancer, Mojolicious, or Catalyst, but, in this case, I guess you could get away with using plain old CGI.pm, although that's very nasty and old and really not the best way to go if you ever find yourself wanting to do something more involved than receiving a single form and emailing it.
On the email side, there are many, many options, but I'll recommend looking into MIME::Lite, mainly because it's what I like and use myself.
Here's a quick (and untested!) example which uses CGI.pm and MIME::Lite to do what your posted code appears to intend:
As I said, this code is untested, but it's something I've done enough times before that it should, at worst, be very close to correct.
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
my $q = CGI->new;
my $body = "Printing Information: " . $q->param('OrderInfo') . "\n";
$body .= "Print Location: " . $q->param('printloc') . "\n";
$body .= "Follow Up Info: " . $q->param('Followup') . "\n";
$body .= "Phone: " . $q->param('Phone') . "\n";
my $msg = MIME::Lite->new(
From => $q->param('Customer'),
To => 'email@example.com',
Reply-To => $q->param('E-Mail'),
Subject => 'Web Submitted Order from ' . $q->param('Contact'),
Data => $body,
Note that I moved "Phone" into the message body, as it is not a standard SMTP header. Depending on server configurations, it's entirely possible that your problem may be that a server is rejecting the message due to the invalid "Phone" header.
I would also definitely recommend that you standardize how the field names on your form are capitalized. It may not be a problem yet, but you will one day drive yourself crazy with errors caused by typing "PrintLoc" instead of "printloc".