The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Net::CampaignMonitor - A Perl wrapper to the Campaign Monitor API.

VERSION

This documentation refers to version 0.01.

SYNOPSIS

 use Net::CampaignMonitor;
 my $cm = Net::CampaignMonitor->new({
                api_key => 'abcd1234abcd1234abcd1234',
                secure  => 1,
                timeout => 300,
                });

DESCRIPTION

Net::CampaignMonitor provides a Perl wrapper to the Campaign Monitor API (v3).

METHODS

All methods return a hash containing the Campaign Monitor response code, the headers and the actual response.

        my %results = (
                code     => '',
                response => '',
                headers  => ''
        );

Construction and setup

new

        my $cm = Net::CampaignMonitor->new({
                api_key => 'abcd1234abcd1234abcd1234',
                secure  => 1,
                timeout => 300,
                });

Construct a new Net::CampaignMonitor object. Takes an optional hash reference of config options. The options are:

api_key - The api key for the Campaign Monitor account. If none is supplied the only function which will work is account_apikey.

secure - Set to 1 (secure) or 0 (insecure) to determine whether to use http or https. Defaults to secure.

timeout - Set the timeout for the authentication. Defaults to 600 seconds.

account_clients

Getting your clients

        my $clients = $cm->account_clients();
        

Creating a client

        my $client = $cm->account_clients((
                'CompanyName'  => "ACME Limited",
                'ContactName'  => "John Doe",
                'EmailAddress' => "john\@example.com",
                'Country'      => "Australia",
                'TimeZone'     => "(GMT+10:00) Canberra, Melbourne, Sydney"
        ));

account_apikey

Getting your API key

        my $apikey = $cm->account_apikey($siteurl, $username, $password)

account_countries

Getting valid countries

        my $countries = $cm->account_countries();

account_timezones

Getting valid timezones

        my $timezones = $cm->account_timezones();

account_systemdate

Getting current date

        my $systemdate = $cm->account_systemdate();

campaigns

Creating a draft campaign

        my $campaign = $cm->campaigns((
                'clientid'   => 'b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2',
                'ListIDs'    => [    
                        'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1',
                        'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1'
                       ],
                'FromName'   => 'My Name',
                'TextUrl'    => 'http://example.com/campaigncontent/index.txt',
                'Subject'    => 'My Subject',
                'HtmlUrl'    => 'http://example.com/campaigncontent/index.html',
                'SegmentIDs' => [   
                        'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1',
                        'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1'
                        ],
                'FromEmail'  => 'myemail@mydomain.com',
                'Name'       => 'My Campaign Name',
                'ReplyTo'    => 'myemail@mydomain.com',
        ));

The clientid must be in the hash.

campaigns_send

Sending a draft campaign

        my $send_campaign = $cm->campaigns_send((
                'campaignid'        => 'b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2',
                'SendDate'          => 'YYYY-MM-DD HH:MM',
                'ConfirmationEmail' => 'myemail@mydomain.com',
        ));

The campaignid must be in the hash.

campaigns_sendpreview

Sending a campaign preview

        my $send_preview_campaign = $cm->campaigns_sendpreview(
                  'campaignid'        => $campaign_id,
                  'PreviewRecipients' => [
                                           'test1@example.com',
                                           'test2@example.com'
                                         ],
                  'Personalize'       => 'Random',
        ));

The campaignid must be in the hash.

campaigns_summary

Campaign summary

        my $campaign_summary = $cm->campaigns_summary($campaign_id);

campaigns_listsandsegments

Campaign lists and segments

        my $campaign_listsandsegments = $cm->campaigns_listsandsegments($campaign_id);
        

campaigns_recipients

Campaign recipients

        my $campaign_recipients = $cm->campaigns_recipients (
                'campaignid'     => $campaign_id,
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

campaigns_bounces

Campaign bounces

        my $campaign_bounces = $cm->campaigns_bounces (
                'campaignid'     => $campaign_id,
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

campaigns_opens

Campaign opens

        my $campaign_opens = $cm->campaigns_opens (
                'campaignid'     => $campaign_id,
                'date'           => '1900-01-01',
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

campaigns_clicks

Campaign clicks

        my $campaign_clicks = $cm->campaigns_clicks (
                'campaignid'     => $campaign_id,
                'date'           => '1900-01-01',
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

campaigns_unsubscribes

Campaign unsubscribes

        my $campaign_unsubscribes = $cm->campaigns_unsubscribes (
                'campaignid'     => $campaign_id,
                'date'           => '1900-01-01',
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

campaigns_delete

Deleting a draft

        my $campaign_delete = $cm->campaigns_delete($campaign_id);

client_clientid

Getting a client's details

        my $client_details = $cm->client_clientid($client_id);
        

client_campaigns

Getting sent campaigns

        my $client_campaigns = $cm->client_campaigns($client_id);

client_drafts

Getting draft campaigns

        my $client_drafts = $cm->client_drafts($client_id);

client_lists

Getting subscriber lists

        my $client_lists = $cm->client_lists($client_id);

client_segments

Getting segments

        my $client_segments = $cm->client_segments($client_id);

client_suppressionlist

Getting suppression list

        my $client_suppressionlist = $cm->client_suppressionlist((
                'clientid'       => $client_id,
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

client_templates

Getting templates

        my $client_templates = $cm->client_templates($client_id);

client_setbasics

Setting basic details

        my $client_basic_details = $cm->client_setbasics((
                'clientid'     => $client_id,
                'CompanyName'  => "ACME Limited",
                'ContactName'  => "John Doe",
                'EmailAddress' => "john\@example.com",
                'Country'      => "Australia",
                'TimeZone'     => "(GMT+10:00) Canberra, Melbourne, Sydney",
        ));

client_setaccess

Setting access settings

Changing access level only

        my $client_access-settings = $cm->client_setaccess((
                'clientid'    => $client_id,
                'AccessLevel' => '23',
        ));

Setting username and password

        my $client_access-settings = $cm->client_setaccess((
                'clientid'    => $client_id,
                'AccessLevel' => '23',
                'Username'    => 'jdoe',
                'Password'    => 'password',
        ));

client_setpaygbilling

Setting PAYG billing

        my $client_payg = $cm->client_setpaygbilling((
                'clientid'               => $client_id,
                'Currency'               => 'AUD',
                'CanPurchaseCredits'     => 'false',
                'ClientPays'             => 'true',
                'MarkupPercentage'       => '20',
                'MarkupOnDelivery'       => '5',
                'MarkupPerRecipient'     => '4',
                'MarkupOnDesignSpamTest' => '3',
        ));

client_setmonthlybilling

Setting monthly billing

        my $client_monthly = $cm->client_setmonthlybilling((
                'clientid'               => $client_id,
                'Currency'               => 'AUD',
                'ClientPays'             => 'true',
                'MarkupPercentage'       => '20',
        ));

client_delete

Deleting a client

        my $client_deleted = $cm->client_delete($client_id);
        

lists

Creating a list

        my $list = $cm->lists((
                'clientid'                => $client_id,
                'Title'                   => 'Website Subscribers',
                'UnsubscribePage'         => 'http://www.example.com/unsubscribed.html',
                'ConfirmedOptIn'          => 'false',
                'ConfirmationSuccessPage' => 'http://www.example.com/joined.html',
        ));
        

list_listid

List details

        my $list = $cm->list_listid($list_id);
        

Updating a list

        my $updated_list = $cm->list_listid((
                'listid'                  => $list_id,
                'Title'                   => 'Website Subscribers',
                'UnsubscribePage'         => 'http://www.example.com/unsubscribed.html',
                'ConfirmedOptIn'          => 'false',
                'ConfirmationSuccessPage' => 'http://www.example.com/joined.html',
        ));
        

list_stats

List stats

        my $list_stats = $cm->list_stats($list_id);

list_customfields

List custom fields

        my $list_customfields = $cm->list_customfields($list_id);
        

list_segments

List segments

        my $list_segments = $cm->list_segments($list_id);

list_active

Active subscribers

        my $list_active_subscribers = $cm->list_active((
                'listid'         => $list_id,
                'date'           => '1900-01-01',
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

list_unsubscribed

Unsubscribed subscribers

        my $list_unsubscribed_subscribers = $cm->list_unsubscribed((
                'listid'         => $list_id,
                'date'           => '1900-01-01',
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

list_bounced

Bounced subscribers

        my $list_bounced_subscribers = $cm->list_bounced((
                'listid'         => $list_id,
                'date'           => '1900-01-01',
                'page'           => '1',
                'pagesize'       => '100',
                'orderfield'     => 'email',
                'orderdirection' => 'asc',
        ));

list_customfields

Creating a custom field

        my $custom_field = $cm->list_customfields((
                'listid'    => $list_id,
                'FieldName' => 'Newsletter Format',
                'DataType'  => 'MultiSelectOne',
                'Options'   => [ "HTML", "Text" ],
        ));
        

list_options

Updating custom field options

        my $updated_options = $cm->list_options((
                'listid'              => $list_id,
                'KeepExistingOptions' => 'true',
                'Options'             => [ "First Option", "Second Option", "Third Option" ],
                'customfieldkey'      => '[NewsletterFormat]',
        ));

list_delete_customfieldkey

Deleting a custom field

        my $deleted_customfield = $cm->list_delete_customfieldkey((
                'listid'         => $list_id,
                'customfieldkey' => '[NewsletterFormat]',
        ));

list_delete

Deleting a list

        my $deleted_list = $cm->list_delete($list_id);
        

list_webhooks

List webhooks

        my $webhooks = $cm->list_webhooks($list_id);

Creating a webhook

        my $webhook = $cm->list_webhooks((
                'listid'        => $list_id,
                'Events'        => [ "Subscribe" ],
                'Url'           => 'http://example.com/subscribe',
                'PayloadFormat' => 'json',
        ));

list_test

Testing a webhook

        my $webhook = $cm->list_test((
                'listid'    => $list_id,
                'webhookid' => $webhook_id,
        ));

list_delete_webhook

Deleting a webhook

        my $deleted_webhook = $cm->list_delete_webhook((
                'listid'    => $list_id,
                'webhookid' => $webhook_id,
        ));

list_activate

Activating a webhook

        my $activated_webhook = $cm->list_activate((
                'listid'    => $list_id,
                'webhookid' => $webhook_id,
        ));

list_deactivate

Deactivating a webhook

        my $deactivated_webhook = $cm->list_deactivate((
                'listid'    => $list_id,
                'webhookid' => $webhook_id,
        ));

segments

Creating a segment

        my $segment = $cm->segments((
                'listid' => $list_id,
                'Rules' => [
                                {
                                        'Subject' => 'EmailAddress',
                                        'Clauses' => [
                                                'CONTAINS @domain.com'
                                        ]
                                },
                                {
                                        'Subject' => 'DateSubscribed',
                                        'Clauses' => [
                                                'AFTER 2009-01-01',
                                                'EQUALS 2009-01-01'
                                        ]
                                },
                                {
                                        'Subject' => 'DateSubscribed',
                                        'Clauses' => [
                                                'BEFORE 2010-01-01'
                                        ]
                                }
                        ],
                'Title' => 'My Segment',
        ));

segment_segmentid

Updating a segment

        my $updated_segment = $cm->segment_segmentid((
                'segmentid' => $segment_id,
                'Rules' => [
                                {
                                        'Subject' => 'EmailAddress',
                                        'Clauses' => [
                                                'CONTAINS @domain.com'
                                        ]
                                },
                                {
                                        'Subject' => 'DateSubscribed',
                                        'Clauses' => [
                                                'AFTER 2009-01-01',
                                                'EQUALS 2009-01-01'
                                        ]
                                },
                                {
                                        'Subject' => 'DateSubscribed',
                                        'Clauses' => [
                                                'BEFORE 2010-01-01'
                                        ]
                                }
                        ],
                'Title' => 'My Segment',
        ));

Getting a segment's details

        my $updated_segment = $cm->segment_segmentid($segment_id);

segment_rules

Adding a segment rule

        my $new_rules = $cm->segment_rules((
                'segmentid' => $segment_id,
                'Subject' => 'Name',
                'Clauses' => [
                        'NOT_PROVIDED',
                        'EQUALS Subscriber Name'
                ],
        ));

segment_active

Getting segment subscribers

        my $segment_subs = $cm->segment_active((
                'segmentid'         => $segment_id,
                'date'              => '1900-01-01',
                'page'              => '1',
                'pagesize'          => '100',
                'orderfield'        => 'email',
                'orderdirection'    => 'asc',
        ));

segment_delete

Deleting a segment

        my $deleted_segment = $cm->segment_delete($segment_id);
        

segment_delete_rules

Deleting a segment's rules

        my $deleted_segment_rules = $cm->segment_delete_rules($segment_id);

subscribers

Adding a subscriber

        my $added_subscriber = $cm->subscribers((
                'listid'       => $list_id,
                'Resubscribe'  => 'true',
                'CustomFields' => [
                        {
                                'Value' => 'http://example.com',
                                'Key'   => 'website'
                        },
                        {
                                'Value' => 'magic',
                                'Key'   => 'interests'
                        },
                        {
                                'Value' => 'romantic walks',
                                'Key'   => 'interests'
                        }
                ],
                'Name'         => 'New Subscriber',
                'EmailAddress' => 'subscriber@example.com',
        ));

Getting a subscriber's details

        my $subs_details = $cm->subscribers((
                'listid' => $list_id,
                'email'  => 'subscriber@example.com',
        ));

subscribers_import

Importing many subscribers

        my $imported_subs = $cm->subscribers_import((
                'listid'       => $list_id,
                'Subscribers' => [
                        {
                                'CustomFields' => [
                                        {
                                                'Value' => 'http://example.com',
                                                'Key' => 'website'
                                        },
                                        {
                                                'Value' => 'magic',
                                                'Key' => 'interests'
                                        },
                                        {
                                                'Value' => 'romantic walks',
                                                'Key' => 'interests'
                                        }
                                ],
                                'Name' => 'New Subscriber One',
                                'EmailAddress' => 'subscriber1@example.com'
                        },
                        {
                                'Name' => 'New Subscriber Two',
                                'EmailAddress' => 'subscriber2@example.com'
                        },
                        {
                                'Name' => 'New Subscriber Three',
                                'EmailAddress' => 'subscriber3@example.com'
                        }
                ],
                'Resubscribe' => 'true',
        ));

subscribers_history

Getting a subscriber's history

        my $subs_history = $cm->subscribers_history((
                'listid' => $list_id,
                'email'  => 'subscriber@example.com',
        ));

subscribers_unsubscribe

Unsubscribing a subscriber

        my $unsub_sub = $cm->subscribers_unsubscribe((
                'listid'        => $list_id,
                'EmailAddress'  => 'subscriber@example.com',
        ));

templates

Getting a template

        my $template = $cm->templates($template_id);

Creating a template

        my $template = $cm->templates((
                'clientid'      => $client_id
                'ZipFileURL'    => 'http://example.com/files.zip',
                'HtmlPageURL'   => 'http://example.com/index.html',
                'ScreenshotURL' => 'http://example.com/screenshot.jpg',
                'Name'          => 'Template Two',
        ));

Updating a template

        my $updated_template = $cm->templates(
                'templateid'      => $template_id
                'ZipFileURL'    => 'http://example.com/files.zip',
                'HtmlPageURL'   => 'http://example.com/index.html',
                'ScreenshotURL' => 'http://example.com/screenshot.jpg',
                'Name'          => 'Template Two',
        ));

templates_delete

Deleting a template

        my $deleted_template = $cm->templates_delete($template_id);

NOTES

If installation fails because test 03_clients.t fails please wait and try again a little later. The tests use a Campaign Monitor account to test all the api calls. One of the early tests, which all later tests rely on, creates a new client. There is a hard limit of a maximum of five (5) new clients being created in 30 minutes. If others are installing the module around the same time as you that limit may be met meaning the test will fail. If this occurs, please try again in 20-30 minutes or install without the tests.

BUGS

Not quite a bug. This module uses REST::Client. REST::Client fails to install properly on Windows due to this bug. You will need to make REST::Client install without running tests to install it.

AUTHOR

Jeffery Candiloro <jeffery@cpan.org>

COPYRIGHT

Copyright 2011 Jeffery Candiloro

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.