http://qs321.pair.com?node_id=635478

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

Dear all,
I use the NET::Smtp to sendmail.But only one mail can be sent every time.

I make a module like :MySMTP.pm

package MySMTP ... sub new { my $self = {}; $self->{SMTP} = Net::SMTP->new("192.168.0.11); $self->{DBH} = DBI->connect_cached(....); } sub get_list { ... return @list; } sub sendMail { my ($self,$to,$content) = @_; $self->{SMTP}->mail(xxx.s@soch.com); $self->{SMTP}->to($to); $self->{SMTP}->data(); $self->{SMTP}->datasend $self->{SMTP}->datasend("\n"); $self->{SMTP}->datasend('To: '.$to); $self->{SMTP}->datasend("\n"); $self->{SMTP}->datasend('Content-type:text/html;Charset=utf8'); $self->{SMTP}->datasend("\n"); $self->{SMTP}->datasend("Subject: hello"); $self->{SMTP}->datasend("\n\n"); $self->{SMTP}->datasend("$content\n"); $self->{SMTP}->dataend(); $self->{SMTP}->quit; }

Then i make a script(say a.pl) to use MySMTP.pm .I run the a.pl every minutes in crontab.

... use MySMTP; $mail = new MySMTP(); my @lists = $mail->get_list(); for my $addr (@list) { $mail->sendMail($addr,"how are you"); }
Every time,I only can get ONE mail in @lists .But it include about 50+ lists.
Where it gets wrong? Thanks.
Regarsd,
pysome

Replies are listed 'Best First'.
Re: Just can sent only ONE mail every time.
by ikegami (Patriarch) on Aug 28, 2007 at 03:18 UTC
    quit ends the connection according to the docs. You probably have to create a new Net::SMTP object for every email. (Each email can have more than one recipient, though.)
      Thanks. But if i put the new Net::SMTP in sub sendMail.It means every list will be connect the mail server once,it's so time-consuming.
      Do you some other method.Or how to organise the "order" ?Thanks again
        Did you check if SMTP (or the version on which Net::SMTP is based) can send more than one message per connection? Even HTTP wasn't able to do so originally. At a glance, it doesn't look like SMTP can either.

        Why not simply pass the list of addresses in and send the one email to multiple recipients using either TO or BCC addressing?


        DWIM is Perl's answer to Gödel