davidcummings
asked on
Excel File corrupted when attached in MIME::Lite
I have a Perl script that writes an excel file and is supposed to email it. The excel file is generated perfectly: if I merely copy it over to a machine with Excel, it opens fine. However, when I attach it to the email, it seems to get corrupted and what was once about a 300 KB file is now about 300 Bytes. I'm modeling my code after other Perl scripts I've written in the past that successfully attach and send excel files but it doesn't seem to be working here.
my $filename = "pos_" . $date . ".xls";
my $excel_file = "/path/to/" . $filename;
my $workbook = Spreadsheet::WriteExcel->new("$excel_file");
$workbook = &createLimitSheet($workbook);
$text = "see attached excel file.";
my $msg = MIME::Lite->new(
From => 'from@example.com',
To => 'to@example.com',
Subject => 'Excel File',
Type => 'text/html',
Data => "$text",
);
my $att = MIME::Lite->new(
Path => $excel_file,
Type => 'application/vnd.ms-excel',
Encoding => 'base64',
Disposition => 'attachment',
);
$att->attr( 'Content-Description' => $filename );
$att->delete( 'Date' );
$att->delete( 'X-Mailer' );
$att->delete( 'MIME-Version' );
$msg->attach( $att );
$msg->send('smtp', 'ip.address.of.SMTPserver', Timout => 20);
ASKER
Hi jeromee,
Thanks for your response.
I implemented your suggestion but I wasn't able to get the code to run. What is basename and do I need it?
Thanks for your response.
I implemented your suggestion but I wasn't able to get the code to run. What is basename and do I need it?
Add this to your code:
use File::Basename;
I needed it because I want the file name vs. the file path.
use File::Basename;
I needed it because I want the file name vs. the file path.
ASKER
Thanks. It runs now, but I'm getting the same problem I had before.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
that'll do the trick.
written, yes. closed, no.
thank you for your help.
written, yes. closed, no.
thank you for your help.
ASKER
Stupid error on my part.
Don't beat yourself up... we have all done it once.
Glad I was able to help!
Glad I was able to help!
$email->attach(Type => 'application/x-microsoft-e
Encoding => 'base64',
Path => $file_path,
Filename => basename($file_path));
Good luck!