GreenArrow Email Software Documentation

Example Special Sending Rules

Restrict campaign delivery to one message per email address per day (PHP)

This Special Sending Rule (SSR) will prevent the same email address from receiving more than one email per day from campaigns that are configured to use this rule.

This rule requires that a Redis server be running at 127.0.0.1:6379, which is its default configuration.

## We want "today" to be in the "America/Chicago" time zone. See a full list of
## available time zones in PHP here:
##
##   http://php.net/manual/en/timezones.php

date_default_timezone_set("America/Chicago");

## Get or establish a connection to Redis. We'll store the connection in a
## global variable for use by a later execution of this rule.

global $myRedis;

if ( is_null($myRedis) ) {
    $myRedis = new Redis();
    $myRedis->connect("127.0.0.1", 6379);
}

## This is the actual execution of the special sending rule. For each recipient,
## we want to skip it if it's already received an email today.

return array_map((function ($recipient) use ($campaign_information_hash, $myRedis) {

  # Use Redis's GETSET command to do the following.
  #
  #   (1) Test if the email has already received a message today
  #   (2) Mark that the email has received a message today

  $email      = $recipient->subscriber->email;
  $today      = strftime("%Y-%m-%d");
  $keyExpire  = 60 * 60 * 48; // 48 hours, in seconds
  $key        = "HasEmailReceivedToday:$today:$email";
  $keyValue   = $myRedis->getset($key, "1");
  $didReceive = $keyValue === "1";
  $skip       = $didReceive ? 1 : 0;

  # Expire the written key after some time so that we do not persist old data
  # that is no longer relevant.

  $myRedis->expire($key, $keyExpire);

  # Instruct the sender to skip if appropriate.

  return array('skip' => $skip);

}), $multiple_recipients_information_hash);

Access a Subscriber’s custom field data (PHP)

This example will demonstrate what to do when a custom field name has a space in it. Take special attention to the syntax used to access the custom field value.

return array_map((function ($recipient) use ($campaign_information_hash) {

  $special_replacement_code = "%%PUT_DATA_HERE%%";
  $subscriber_value = $recipient->subscriber->custom_fields->{"First Name Field With Spaces in It"}->value;
  $original_text = $recipient->content->text;
  $replaced_text = str_replace($special_replacement_code, $subscriber_value, $original_text);

  return array("text" => $replaced_text);

}), $multiple_recipients_information_hash);

Set delivery details based on a custom field value (Perl)

This special sending rule changes the From Name, From Email, Virtual MTA, Bounce Email, and URL Domain based on the value of the custom field Favorite Color.

If the recipient does not match either Red or Blue, no changes will be made.

my %result = map {
  # Retrieve details about the individual recipient
  my $recipient_id = $_;
  my $recipient    = $multiple_recipients_information_hash->{ $recipient_id };
  my $color_value  = $recipient->{subscriber}{custom_fields}{"Favorite Color"};

  # Prepare the overrides hash that we'll return
  my $overrides    = {};

  # Override values based on a custom field
  if ( $color_value eq "Red" ) {
    $overrides->{from_name}        = 'Example Red';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-red.com';
  } elsif ( $color_value eq "Blue" ) {
    $overrides->{from_name}        = 'Example Blue';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-blue.com';
  }

  # Return the override hash for this recipient
  $recipient_id => $overrides
} keys(%$multiple_recipients_information_hash);

return \%result;

Set random delivery details (Perl)

This special sending rule changes the From Name, From Email, Virtual MTA, Bounce Email, and URL Domain based on a random number.

Warning: Splitting the same email content over multiple domain names can cause your email to get blocked as “Snowshoe Spam.” Please make sure you know what you are doing if you use a special sending rule like this.

A random number from 0 to 99 is generated. If that number is 0-33, the Red values will be used. If that number is 34-66, the Blue values will be used. Otherwise, no overrides are made.

my %result = map {
  # Retrieve details about the individual recipient
  my $recipient_id = $_;
  my $recipient    = $multiple_recipients_information_hash->{ $recipient_id };
  my $rand_value   = int(rand(100));

  # Prepare the overrides hash that we'll return
  my $overrides    = {};

  # Override values based on the random value
  if ( $rand_value <= 33 ) {
    $overrides->{from_name}        = 'Example Red';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-red.com';
  } elsif ( $rand_value <= 66 ) {
    $overrides->{from_name}        = 'Example Blue';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-blue.com';
  }

  # Return the override hash for this recipient
  $recipient_id => $overrides
} keys(%$multiple_recipients_information_hash);

return \%result;

Set random delivery details with 25% / 25% / 50% splits (Perl)

This special sending rule changes the From Name, From Email, Virtual MTA, Bounce Email, and URL Domain based on a random number.

Warning: Splitting the same email content over multiple domain names can cause your email to get blocked as “Snowshoe Spam.” Please make sure you know what you are doing if you use a special sending rule like this.

A random number from 0 to 99 is generated. If that number is 0-24, the Red values will be used. If that number is 25-49, the Blue values will be used. Otherwise, the Green values will be used.

my %result = map {
  # Retrieve details about the individual recipient
  my $recipient_id = $_;
  my $recipient    = $multiple_recipients_information_hash->{ $recipient_id };
  my $rand_value   = int(rand(100));

  # Prepare the overrides hash that we'll return
  my $overrides    = {};

  # Override values based on the random value
  if ( $rand_value <= 24 ) {
    $overrides->{from_name}        = 'Example Red';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-red.com';
  } elsif ( $rand_value <= 49 ) {
    $overrides->{from_name}        = 'Example Blue';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-blue.com';
  } else {
    $overrides->{from_name}        = 'Example Green';
    $overrides->{from_email}       = '[email protected]';
    $overrides->{virtual_mta_name} = 'example-1-ipaddr';
    $overrides->{bounce_email}     = '[email protected]';
    $overrides->{url_domain_name}  = 'example-green.com';
  }

  # Return the override hash for this recipient
  $recipient_id => $overrides
} keys(%$multiple_recipients_information_hash);

return \%result;

Discard special role recipients

This Special Sending Rule (SSR) will prevent emails to recipients if the localpart of their email address (the part before the @ character) is in a list of forbidden roles.

This can be used to avoid role addresses, such as abuse or postmaster to receive campaigns or autoresponders.

return array_map((function ($recipient) use ($campaign_information_hash) {

  $email      = $recipient->subscriber->email;
  $localpart  = preg_split("/@/", $email);
  $invalid    = array(
    "abuse",
    "admin",
    "postmaster"
  );

  if (in_array($localpart[0], $invalid)) {
    return array(
      'skip' => 1,
      'skip_message' => "Email address (${email}) is in list of roles not allowed in campaigns"
    );
  }
  return array('skip' => 0);

}), $multiple_recipients_information_hash);


Copyright © 2012–2024 GreenArrow Email