uuencode problem with perl on hpux

First, I have read through a number of previous posts here about uuencode and perl. As soon as I finish writting this, I'm going to explore MIME::Lite ,  but I'm curious as to the problem I'm having with uuencode right now.

 Now keep in mind that I'm having to work with HPUX 11i and perl 5.005_03 (long story about not upgrading) and I'm still relatively new to perl.
I have a text file generated out of some previous sql/perl mix.  Lets call it  dataout.txt.
The gist of the problem is this:
outside of perl, I can use the following code    uuencode dataout.txt dataout.txt  | mailx -s "extracted data" email.to@sendto.company.com
and it works fine.

However, when I use either of the following in a perl script:

system(`uuencode dataout.txt dataout.txt | mail "email.to\@sendto.company.com"`);
exec("uuencode dataout.txt dataout.txt | mail email.to\@sendto.company.com");

I still get an email with an attachement, but the attachment does not contain the data as it does if I use the same command from the unix command line.

As a 4 year old likes to say,  "Why?" .

Thank you in advance!

Mark Nelson
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

You've changed two things at once, so it's hard to say which of the two is responsible for the problem. Outside of perl, you used the 'mailx' mailer, which is old and primitive, but still has a few smarts about internet mail. Inside of perl, you were using the 'mail' (sometimes known as 'binmail') mailer, an even older and more primitive mailer.

What happens if you use mailx from Perl?

Is it that the attachment is not there at all, is it empty, or is it simply not being recognized as an attachment by the recipient's mailer?

MIME::Lite is a better way to do this.
Mark_NelsonAuthor Commented:

The same thing happens if mail or mailx is used.

Actually, the email comes with an attachment of the proper name but a zero byte lengtht.
This is a text message and needs to come as an attachment, not in the body of the message.

I'm futzing with MIME::Lite now.  Just got the package installed and typed out a test script that failed ;).

I'm afraid all I can tell you is that piping uuencode directly into mailx (or mail) will place the encoded lines in the body of the message. Neither mailer sets a proper MIME header specifying Content-Type or boundaries. Some mail programs recognize this old way of sending binary files and fix things up so it _looks like_ there's an attachment, but it's not really following the MIME structure.

To create a MIME message you need to use a mailer that a) understands how to handle an attachment (mutt and, I think, some versions of pine allow you specify a file for an attachment as a command-line option) or b) allows you to specify all of the relevant mail headers as part of the input (such as when mailing via "sendmail -t" or "qmail-inject").

MIME::Lite should do everything correctly as far as setting up the mail message. It still can be tricky to get the mail posted if there are restrictions on using the default methods that MIME::Lite knows about.

But I don't see why you should be getting different results from running the same command line with "system" or "exec" in Perl.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Mark_NelsonAuthor Commented:
as a final note to this saga, I was never able to get PERL to properly send the txt file as an attachment.
I tried the system(`uuencode.......)
I tried MIME::Lite as well.

However, when I wraped PERL in KSH and called the PERL code to do the data manipulation, then when it was done, return to KSH, I was able to get KSH to run the uuncode line just fine.


Mark Nelson
Sometimes a problem takes too long to solve and you gotta get by with something that you realize is makeshift, but it _works_.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.