技術資料

SendGridのCampaigns API活用ガイド:作成から送信スケジュールまで

2023.04.19

error この記事は最終更新日から1年以上が経過しています。

キャンペーンの作成

参考: APIリファレンス

$sender_id = '11111';
$suppression_group_id = '22222';
$plain_content = 'メール本文';
$list_ids = array(0,1); // 送信リストID(複数指定可)
$data = array(
    'title'                => 'タイトル',
    'subject'              => '件名',
    'sender_id'            => $sender_id ,
    'plain_content'        => $plain_content."\n\n\n[unsubscribe]",
    'html_content'         => "<html><head><title></title></head><body><p>{$plain_content}</p>>br>>br>>p>>a href=\"[unsubscribe]\">unsubscribe>/a>>/p>>/body>>/html>",
    'list_ids'             => $list_ids,
    'suppression_group_id' => $suppression_group_id,
);
$json_data = json_encode($data);
        
$api_url = "https://api.sendgrid.com/v3/campaigns";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer '.SENDGRID_API_KEY
);

$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status_code < 200 || $status_code >= 300){
    print "API error ==createCampaign {$status_code}==";
    return FALSE;
}
$result = json_decode($response);
if(isset($result->errors[0])){
    print "API error ==createCampaign {$result->errors[0]->message}==";
    return FALSE;
}
if(!isset($result->id) || $result->id == ''){
    print "API error ==createCampaign CampaignId Not Found==";
    return FALSE;
}
return $result->id;

上記の処理は、作成したキャンペーンのIDを返す。

本文内に [unsubscribe] というタグを入れておかないと送信できないので注意。

キャンペーンの閲覧

参考: APIリファレンス

$campaign_id = '11111';
$api_url = "https://api.sendgrid.com/v3/campaigns/{$campaign_id}";
$opts = array('http' =>
    array(
        'header' => "Authorization: Bearer ".SENDGRID_API_KEY
    )
);
$context = stream_context_create($opts);
$result = @file_get_contents($api_url, false, $context);
$http_code = 0;
preg_match('/HTTP\/1\.[0|1|x] ([0-9]{3})/', $http_response_header[0], $matches);
$http_code = $matches[1];
if(!$result || $http_code != '200'){
    print "API error ==viewCampaign==";
    return FALSE;
}
$result_arr = json_decode($result);

$mail_status = $result_arr->status;
return $mail_status;

上記の処理は、指定したキャンペーンのステータスを返す。

キャンペーンの更新

参考: APIリファレンス

$sender_id = '11111';
$suppression_group_id = '22222';
$plain_content = 'メール本文';
$list_ids = array(0,1); // 送信リストID(複数指定可)
$data = array(
    'title'                => 'タイトル',
    'subject'              => '件名',
    'sender_id'            => $sender_id ,
    'plain_content'        => $plain_content."\n\n\n[unsubscribe]",
    'html_content'         => "<html><head><title></title></head><body><p>{$plain_content}</p>>br>>br>>p>>a href=\"[unsubscribe]\">unsubscribe>/a>>/p>>/body>>/html>",
    'list_ids'             => $list_ids,
    'suppression_group_id' => $suppression_group_id,
);
$json_data = json_encode($data);
        
$api_url = "https://api.sendgrid.com/v3/campaigns/{$row['campaign_id']}";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer '.SENDGRID_API_KEY
);

$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status_code < 200 || $status_code >= 300){
    print "API error ==updateCampaign {$status_code}==";
    return FALSE;
}
$result = json_decode($response);
if(isset($result->errors[0])){
    print "API error ==updateCampaign {$result->errors[0]->message}==";
    return FALSE;
}
if(!isset($result->id) || $result->id == ''){
    print "API error ==updateCampaign CampaignId Not Found==";
    return FALSE;
}
return $result->id;

上記の処理は、更新したキャンペーンのIDを返す。

キャンペーンのスケジュール設定

参考: APIリファレンス

$send_at = '1489771528'; // 送信したい時刻をUNIX TIMEで
$campaign_id = '11111';

$data = array(
    'send_at' => $send_at,
);
$json_data = json_encode($data);
        
$api_url = "https://api.sendgrid.com/v3/campaigns/{$campaign_id}/schedules";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer '.SENDGRID_API_KEY
);

$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status_code < 200 || $status_code >= 300){
    print "API error ==scheduleCampaign {$status_code}==";
    return FALSE;
}
$result = json_decode($response);
if(isset($result->errors[0])){
    print "API error ==scheduleCampaign {$result->errors[0]->message}==";
    return FALSE;
}
if(!isset($result->status) || $result->status != 'Scheduled'){
    print "API error ==scheduleCampaign Status Error==";
    return FALSE;
}
return $result;

キャンペーンのスケジュールを更新

参考: APIリファレンス

$send_at = '1489771528'; // 送信したい時刻をUNIX TIMEで
$campaign_id = '11111';

$data = array(
    'send_at' => $send_at,
);
$json_data = json_encode($data);

$api_url = "https://api.sendgrid.com/v3/campaigns/{$campaign_id}/schedules";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer '.SENDGRID_API_KEY
);

$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status_code < 200 || $status_code >= 300){
    print "API error ==updateScheduleCampaign {$status_code}==";
    print $response;
    return FALSE;
}
return TRUE;

キャンペーンのスケジュールをキャンセル

参考: APIリファレンス

$campaign_id = '11111';

$api_url = "https://api.sendgrid.com/v3/campaigns/{$campaign_id}/schedules";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer '.SENDGRID_API_KEY
);

$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status_code < 200 || $status_code >= 300){
    print "API error ==unscheduleCampaign {$status_code}==";
    return FALSE;
}
return TRUE;

その他キャンペーン関連のAPIは、Campaigns APIリファレンスに載ってる。

SendGrid APIでPHPからUnsubscribe Groupsを取得する

2023.04.21

SendGridのUnsubscribe Groupsは、受信者が配信停止できるメールタイプを管理する機能です。この記事では、APIを使って全グループの情報を取得する方法を解説します。

PHP SendGrid API

SendGrid APIで送信者情報を取得する方法

2023.04.20

SendGridのAPIを使って、全送信者情報を簡単に取得する方法を紹介します。

PHP SendGrid API

SendGrid APIでPHPからリストを操作する方法

2023.04.19

PHPからSendGridのリスト管理を行なう方法を解説します。リストの作成、特定リストの検索、メールアドレスの登録といった基本的な操作を、具体的なコード例を交えて説明します。

PHP SendGrid API

SendGrid APIを使ったRecipientの操作方法

2023.04.19

SendGridでは、Recipientという概念を使ってメールアドレスを管理します。この記事では、Recipientを追加する方法と削除する方法を、APIのコードサンプルを用いて具体的に説明します。

PHP SendGrid API

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP