NAME

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

VERSION

This documentation refers to version 1.02.

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",
	'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();

account_addadmin

Adds a new administrator to the account. An invitation will be sent to the new administrator via email.

my $person_email = $cm->account_addadmin((
	'EmailAddress'         	=> "jane\@example.com",
	'Name'                 	=> "Jane Doe"
	));

account_updateadmin

Updates the email address and/or name of an administrator.

my $admin_email = $cm->account_updateadmin((		
	'email'					=> "jane\@example.com",
	'EmailAddress'         	=> "jane.new\@example.com",
	'Name'                 	=> "Jane Doeman"
	));

account_getadmins

Contains a list of all (active or invited) administrators associated with a particular account.

my $admins = $cm->account_getadmins();

account_getadmin

Returns the details of a single administrator associated with an account.

my $admin_details = $cm->account_getadmin($email);	

account_deleteadmin

Changes the status of an active administrator to a deleted administrator.

my $result = $cm->account_deleteadmin($admin_email);	

admin_setprimarycontact

Sets the primary contact for the account to be the administrator with the specified email address.

my $primarycontact_email = $cm->account_setprimarycontact($admin_email);		

account_getprimarycontact

Returns the email address of the administrator who is selected as the primary contact for this account.

my $primarycontact_email = $cm->account_getprimarycontact();		

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",
	'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'    => 'safepassword',
));

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);

client_addperson

Adds a new person to the client.

my $person_email = $cm->client_addperson((
	'clientid'             	=> $client_id,
	'EmailAddress'         	=> "joe\@example.com",
	'Name'                 	=> "Joe Doe",
	'AccessLevel'         	=> 23,
	'Password'          	=> "safepassword"
	));

client_updateperson

Updates any aspect of a person including their email address, name and access level..

my $person_email = $cm->client_updateperson((
	'clientid'             	=> $client_id,
	'email'         		=> "joe\@example.com",
	'EmailAddress'         	=> "joe.new\@example.com",
	'Name'                 	=> "Joe Doe",
	'AccessLevel'         	=> 23,
	'Password'          	=> "safepassword"
	));

client_getpeople

Contains a list of all (active or invited) people associated with a particular client.

my $client_access-settings = $cm->client_getpeople($client_id);

client_getperson

Returns the details of a single person associated with a client.

my $person_details = $cm->client_getperson((
	'clientid'          => $client_id,
	'email'         	=> "joe\@example.com",
	));	

client_deleteperson

Contains a list of all (active or invited) people associated with a particular client.

my $result = $cm->client_deleteperson((
	'clientid'          => $client_id,
	'email'         	=> "joe\@example.com",
	));	

client_setprimarycontact

Sets the primary contact for the client to be the person with the specified email address.

my $primarycontact_email = $cm->client_setprimarycontact((
	'clientid'          => $client_id,
	'email'         	=> "joe\@example.com",
	));		

client_getprimarycontact

Returns the email address of the person who is selected as the primary contact for this client.

my $primarycontact_email = $cm->client_getprimarycontact($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);

INSTALLATION NOTES

In order to run the full test suite you will need to provide an API Key. This can be done in the following way.

cpan CAMPAIGN_MONITOR_API_KEY=<your_api_key> Net::CampaignMonitor

If you do not do this almost all of the tests will be skipped.

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.

MAINTAINER

Campaign Monitor, <support@campaignmonitor.com<gt>

AUTHOR

Jeffery Candiloro <jeffery@cpan.org>

COPYRIGHT

Copyright (c) 2012, Campaign Monitor <support@campaignmonitor.com<gt>. All rights reserved.

Copyright (c) 2011, Jeffery Candiloro <jeffery@cpan.org<gt>. All rights reserved.

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.