xiaoyafeng has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I've seen a few threads about mail bot recently, And intended to write a snippet for it also. the code like this:

use strict; use warnings; use Net::SMTP::TLS; use MIME::Entity; my $msg = MIME::Entity->build( From => 'xxxx@gmail.com', To => 'xxxx@gmail.com', Subject => 'JPG', Type => 'multipart/mixed', ); $msg->attach(Type => 'image/jpeg', Path => 'd05_24365339.jpg', Encoding => '-SUGGEST', ); my $data_send = $msg->stringify(); =head opendir my $dh, "."; for (readdir $dh){ $msg->attach( Type => 'image/jpeg', Path => $_, Filename => $_, Disposition => 'attachment', ) if /jpg$/; print if /jpg$/; } =cut my $mailer = new Net::SMTP::TLS( 'smtp.gmail.com', Hello => 'andy.com', Port => 587, User => 'xxxxx@gmail.com', Password=> 'xxxxxx', Timeout => 1200, Debug => 1, ); $mailer->to('xxxx@gmail.com'); $mailer->data; $mailer->datasend($data_send); $mailer->dataend; $mailer->quit;
The snippet run successfully except for one: it split image into 17 parts which each about 12K!

I'm not familiar with MIME and SMTP. hope perl guru could give me quick answer to enlighten me!

TIA





I am trying to improve my English skills, if you see a mistake please feel free to reply or /msg me a correction

Replies are listed 'Best First'.
Re: MIME or SMTP question?
by ahmad (Hermit) on Jul 26, 2010 at 21:53 UTC

    I don't understand what you mean by it splits images into 17 parts.

    but anyway the only thing that's missing in your code is the 'Encoding' part of the attachment inside your for loop.

    The module's documentation says it's optional, but try setting it anyway as it might be some weird behaviour.

      I don't understand what you mean by it splits images into 17 parts.

      it means I received a mail including 17 attachments and each one is the same which are the first 12k of the image(about 200k). it looks loke the snippet sent the first part of the image 17 times!

      and please note I've already commented the loop and setting Encoding to -SUGGEST for just one pic.

      I guess Gmail(or other smtp server?) need some extra command if attached bigger than 12K. Does anybody have experience about gmail bot?

        I did not notice the head/cut section ... anyway I have tested it , and the problem appears to be in Net::SMTP::TLS Module (it does replace line-ends and go into a while loop) which causes the image to get attached more than one time and get corrupted

        Anyway, Here's a working code using Net::SMTP::SSL instead

        use Net::SMTP::SSL; my $mailer = Net::SMTP::SSL->new( Host => 'smtp.gmail.com', Port => 465, Debug => 1, ); $mailer->auth('username', 'password' ); $mailer->mail('username@gmail.com'); $mailer->to('somewhere@gmail.com'); $mailer->data; $mailer->datasend($data_send); $mailer->dataend; $mailer->quit;

        The beginning of your old code should be left intact.