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

I am using a perl script through which i want to send email to multiple users. The Script is working fine for a single user and doing my work fine. But when i want to send the same mail to multiple users, i get errors. I am posting my script below. Kindly help me out.

ORIGINAL SCRIPT :
#!/usr/bin/perl use strict; use warnings; use LWP::Simple; use Email::Send; use Email::Send::Gmail; use Email::MIME::Creator; use IO::All; my $basefolder = "/Users/Abc/Desktop/"; my $from = "test1\@gmail.com"; my $to = 'test2l\@hotmail.com'; my $subject = "DSMS"; my $url = "http://abc.com/search?q=%22M%22&t=blogs&f=csv"; my $file = $basefolder . "M-B.csv"; my $status = mirror($url,$file); die "Cannot retrieve $url" unless is_success($status); my $url1 = "http://abc.com/search?q=%22M%22&t=microblogs&f=csv"; my $file1 = $basefolder . "M-MB.csv"; my $status1 = mirror($url1,$file1); die "Cannot retrieve $url" unless is_success($status1); my @parts = ( Email::MIME->create( attributes => { filename =>"M-B.csv", content_type =>"application/csv", disposition =>"attachment", Name =>$basefolder . "M-B.csv", }, body => io( $basefolder . "M-B.csv" )->all, ), Email::MIME->create( attributes => { filename =>"M-MB.csv", content_type =>"application/csv", disposition =>"attachment", Name =>$basefolder . "M-MB.csv", }, body => io( $basefolder . "M-MB.csv" )->all, ), ); my $email = Email::MIME->create( header => [ From => $from, To => $to, Subject => $subject, ], parts => [@parts] ); my $sender = Email::Send->new( { mailer => 'Gmail', mailer_args => [ username => 'test1@gmail.com', password => '1234qwerty', ] } ); eval { $sender->send($email) }; die "Error sending email: $@" if $@;

I've tried adding multiple emails to My $to. Besides that i have tried adding a My $to1. i don't want to send them as cc or bcc.

But both of theses did not work for me. Is there an other way. If yes kindly specify. Thanx in advance.

Replies are listed 'Best First'.
Re: Email::Mime Errors
by Anonymous Monk on Mar 17, 2010 at 07:51 UTC
    I've tried adding multiple emails to My $to. Besides that i have tried adding a My $to1. i don't want to send them as cc or bcc. But both of theses did not work for me. Is there an other way. If yes kindly specify. Thanx in advance.

    You should show your efforts. Basically you need to loop

    for my $to ( 'destination@one', 'destination@two', ...){ SendMySpam($to); }

      I tried the Loop as you said, but i'm recieving the following error. Single recipient is still working with previous method. But with the loop even the single recipient is not working.

      Error sending email: Email::Send::Gmail: error sending 'to' at /Library/Perl/5.10.0/Email/Send.pm line 252

      at /Library/Perl/5.10.0/Email/Send.pm line 252

      I tried it as follows :

      #!/usr/bin/perl use warnings; use LWP::Simple; use Email::Send; use Email::Send::Gmail; use Email::MIME::Creator; use IO::All; my $basefolder = "/Users/Abc/Desktop/"; my $from = "abc1\@gmail.com"; my $subject = "DAILY SOCIAL MEDIA SEARCH"; for my $to ( 'abc3\@gmail.com', 'abc2\@hotmail.com'){ my @parts = ( Email::MIME->create( attributes => { filename =>"M-B.csv", content_type =>"application/csv", disposition =>"attachment", Name =>$basefolder . "M-B.csv", }, body => io( $basefolder . "M-B.csv" )->all, ), ); my $email = Email::MIME->create( header => [ From => $from, To => $to, Subject => $subject, ], parts => [@parts] ); my $sender = Email::Send->new( { mailer => 'Gmail', mailer_args => [ username => 'abc1\@gmail.com', password => '1234qwerty', ] } ); eval { $sender->send($email) }; die "Error sending email: $@" if $@; }

      Something must be wrong with my for loop application. Kindly point it out.

        for my $to ( 'abc3\@gmail.com', 'abc2\@hotmail.com'){

        When you use single quotes for literal strings, you don't want the backslash before @ (the backslash will remain part of the string).

        my $from = "abc1\@gmail.com"; # double quotes my $to = 'abc3\@gmail.com'; # single quotes print "from: $from"; print "to: $to"; __END__ from: abc1@gmail.com to: abc3\@gmail.com # !!

        Those addresses are Email::Send::Gmail-internally being extracted from the To/Cc/Bcc headers using Email::Address->parse(), which doesn't identify something like abc3\@gmail.com as a valid address, so the final list of recipients is empty — as the error message is trying to tell you.

        #!/usr/bin/perl -l use Email::Address; @addresses = Email::Address->parse('abc3@gmail.com'); print "ok : @addresses"; @addresses = Email::Address->parse('abc3\@gmail.com'); print "not ok : @addresses"; __END__ ok : abc3@gmail.com not ok :
        I tried the Loop as you said, but i'm still recieving the following error.

        That doesn't make sense, you said you were able to send email before.