in reply to Most efficient way to send mass email?

Well, firstly, you haven't made a very good case for not using something free and extant like Mailman, which is designed explicitly to handle mailing lists, and which will likely scale far better than something hand-rolled.

Secondly, you can group your addresses a bit, sending a message to 20 recipients at a time, and letting the e-mail server sort it out.

$cnt = 0; @addr_slice = @addresses[$cnt..$cnt+20]; #Now, when you create your message: $msg = MIME::Lite->new ( From => $wai, To => join(', ',@addr_slice), Subject => $subject, Type =>'multipart/mixed' ) or die "Error creating multipart container: $!\n";

But, I would work through a massive refactor of your code. It isn't fault-tolerant, there are a number of issues that would be caught by -w and use strict, and it demonstrates a lack of understanding of how mail systems and distribution lists work. I'm not being insulting, BTW: just suggesting that understanding more about how mail works would help improve your code.

Better than a refactor -- use a tool that's already designed for this task, like Mailman.

Anima Legato
.oO all things connect through the motion of the mind

Replies are listed 'Best First'.
Re^2: Most efficient way to send mass email?
by shenme (Priest) on Jan 05, 2005 at 03:58 UTC
    @addr_slice = @addresses[$cnt..$cnt+20]; . . . . To => join(', ',@addr_slice),
    I assume that one of the things that the package you are advocating makes real easy is *not* exposing one person's email address to another person. Do *not* use anything like the above code and expect to be thanked for it. One of the good side-effects of the original code was that no recipient would discover anyone elses email address.

    While it does make a lot of sense to try to send to more than one recipient at a time, at least _try_ to use the Bcc: field to do so, not the To: or Cc: fields.

    BTW: the efficiency best comes into play if you can sort your addresses by destination host name (the "right-hand side" of the email address). This way it is possible to send one copy from your side to the remote SMTP server, where it is then the remote side that make and distributes copies to the several local recipients.

      Yet another excellent point. I guess the point of my code example was to show how quickly approaching this type task can get very messy, and to strongly suggest using something that has already been written and tested ad nauseum instead of reinventing a wheel.

      Your privacy point just reinforces my general point; thank you.

      Anima Legato
      .oO all things connect through the motion of the mind