The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

package My::TransmissionInitHandler;

use strict;
use warnings 'all';
use base 'Email::Blaster::TransmissionInitHandler';
use Email::Blaster::Transmission;
use My::Contact;


#==============================================================================
sub run
{
  my ($s, $event) = @_;
  
  my $trans = Email::Blaster::Transmission->retrieve( $event->transmission_id );
  my %emails = ( );
  
  my %throttled = (
    map { $_->domain => 1 }
      $trans->config->throttled
  );
  
  RECIP: foreach my $recip ( $trans->recipients )
  {
    if( $recip->contact_list_id )
    {
      my $sth = $recip->db_Main->prepare(<<"SQL");
SELECT contacts.*
FROM contacts
  INNER JOIN contact_subscriptions
    ON contact_subscriptions.contact_id = contacts.contact_id
WHERE contact_subscriptions.contact_list_id = ?
AND contacts.is_subscribed = 1
SQL
      $sth->execute( $recip->contact_list_id );
      CONTACT: foreach my $contact ( My::Contact->sth_to_objects( $sth ) )
      {
        next CONTACT if $emails{ $contact->email }++;
        my ($domain) = grep { $contact->email =~ m/\@\Q$_\E$/i } keys(%throttled);
        $trans->add_to_sendlogs(
          contact_id        => $contact->id,
          first_name        => $contact->first_name,
          last_name         => $contact->last_name,
          email             => $contact->email,
          is_sent           => 0,
          assigned_to_host  => $trans->config->hostname,
          throttled_domain  => $domain || '',
        );
      }# end foreach()
    }
    elsif( $recip->contact_id )
    {
      my $contact = My::Contact->retrieve( $recip->contact_id )
        or next RECIP;
      next RECIP if $emails{ $contact->email }++;
      my ($domain) = grep { $contact->email =~ m/\@\Q$_\E$/i } keys(%throttled);
      $trans->add_to_sendlogs(
        contact_id        => $contact->id,
        first_name        => $contact->first_name,
        last_name         => $contact->last_name,
        email             => $contact->email,
        is_sent           => 0,
        assigned_to_host  => $trans->config->hostname,
        throttled_domain  => $domain || '',
      );
    }# end if()
  }# end foreach()
}# end run()


#==============================================================================

1;# return true: