Excel File corrupted when attached in MIME::Lite

Posted on 2010-11-19
Last Modified: 2013-12-17
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 => '',
                To => '',
                Subject => 'Excel File',
                Type => 'text/html',
                Data => "$text",

        my $att = MIME::Lite->new(
                Path => $excel_file,
                Type => 'application/',
                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);

Open in new window

Question by:davidcummings
  • 4
  • 4
LVL 10

Expert Comment

ID: 34174631
Here's what I have used successfully

$email->attach(Type     => 'application/x-microsoft-excel',
                   Encoding => 'base64',
                   Path     => $file_path,
                   Filename => basename($file_path));

Good luck!

Author Comment

ID: 34174671
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?
LVL 10

Expert Comment

ID: 34174721
Add this to your code:

use File::Basename;

I needed it because I want the file name vs. the file path.
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.


Author Comment

ID: 34174939
Thanks. It runs now, but I'm getting the same problem I had before.
LVL 10

Accepted Solution

jeromee earned 500 total points
ID: 34174966
Do you write and close the file before you try sending it?

Author Comment

ID: 34175868
that'll do the trick.

written, yes. closed, no.

thank you for your help.

Author Closing Comment

ID: 34175872
Stupid error on my part.
LVL 10

Expert Comment

ID: 34176260
Don't beat yourself up... we have all done it once.

Glad I was able to help!

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Resolve DNS query failed errors for Exchange
This process describes the steps required to Import and Export data from and to .pst files using Exchange 2010. We can use these steps to export data from a user to a .pst file, import data back to the same or a different user, or even import data t…
In this video we show how to create an Address List in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.: First we need to log into the Exchange Admin Center. Navigate to the Organization >> Ad…
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question