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.