• Stars
    star
    262
  • Rank 155,694 (Top 4 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 11 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[API v3] Mailjet PHP Wrapper

alt text

Official Mailjet PHP Wrapper

Codacy Badge Build Status MIT License Current Version

Overview

This repository contains the official PHP wrapper for the Mailjet API.

Check out all the resources and PHP code examples in the Offical Documentation.

Table of contents

Compatibility

This library requires PHP v5.4 or higher.

Installation

Use the below code to install the wrapper:

composer require mailjet/mailjet-apiv3-php

If you are not using Composer, clone or download this repository that already contains all the dependencies and the vendor/autoload.php file. If you encounter an issue, please post it here and not on the mirror repository.

Authentication

The Mailjet Email API uses your API and Secret keys for authentication. Grab and save your Mailjet API credentials.

export MJ_APIKEY_PUBLIC='your API key'
export MJ_APIKEY_PRIVATE='your API secret'

Note: For the SMS API the authorization is based on a Bearer token. See information about it in the SMS API section of the readme.

Initialize your Mailjet Client:

use \Mailjet\Resources;

// getenv will allow us to get the MJ_APIKEY_PUBLIC/PRIVATE variables we created before:

$apikey = getenv('MJ_APIKEY_PUBLIC');
$apisecret = getenv('MJ_APIKEY_PRIVATE');

$mj = new \Mailjet\Client($apikey, $apisecret);

// or, without using environment variables:

$apikey = 'your API key';
$apisecret = 'your API secret';

$mj = new \Mailjet\Client($apikey, $apisecret);

Make your first call

Here's an example on how to send an email:

<?php
require 'vendor/autoload.php';
use \Mailjet\Resources;

// Use your saved credentials, specify that you are using Send API v3.1

$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'),true,['version' => 'v3.1']);

// Define your request body

$body = [
    'Messages' => [
        [
            'From' => [
                'Email' => "$SENDER_EMAIL",
                'Name' => "Me"
            ],
            'To' => [
                [
                    'Email' => "$RECIPIENT_EMAIL",
                    'Name' => "You"
                ]
            ],
            'Subject' => "My first Mailjet Email!",
            'TextPart' => "Greetings from Mailjet!",
            'HTMLPart' => "<h3>Dear passenger 1, welcome to <a href=\"https://www.mailjet.com/\">Mailjet</a>!</h3>
            <br />May the delivery force be with you!"
        ]
    ]
];

// All resources are located in the Resources class

$response = $mj->post(Resources::$Email, ['body' => $body]);

// Read the response

$response->success() && var_dump($response->getData());
?>

Client / Call Configuration Specifics

To instantiate the library you can use the following constructor:

new \Mailjet\Client($MJ_APIKEY_PUBLIC, $MJ_APIKEY_PRIVATE,$CALL,$OPTIONS);

  • $MJ_APIKEY_PUBLIC : public Mailjet API key
  • $MJ_APIKEY_PRIVATE : private Mailjet API key
  • $CALL : boolean to enable the API call to Mailjet API server (should be true to run the API call)
  • $OPTIONS : associative PHP array describing the connection options (see Options bellow for full list)

Options

API Versioning

The Mailjet API is spread among three distinct versions:

  • v3 - The Email API
  • v3.1 - Email Send API v3.1, which is the latest version of our Send API
  • v4 - SMS API

Since most Email API endpoints are located under v3, it is set as the default one and does not need to be specified when making your request. For the others you need to specify the version using version. For example, if using Send API v3.1:

$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'),true,['version' => 'v3.1']);

For additional information refer to our API Reference.

Base URL

The default base domain name for the Mailjet API is api.mailjet.com. You can modify this base URL by setting a value for url in your call:

$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'),
                          getenv('MJ_APIKEY_PRIVATE'), true,
                          ['url' => "api.us.mailjet.com"]
                        );

If your account has been moved to Mailjet's US architecture, the URL value you need to set is api.us.mailjet.com.

Disable API call

By default the API call parameter is always enabled. However, you may want to disable it during testing to prevent unnecessary calls to the Mailjet API. This is done by setting the third parameter to false:

$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'), false);

List of resources

You can find the list of all available resources for this library in /src/Mailjet/Resources.php. The file lists the names of the PHP resources and the corresponding names in the API reference.

Request Examples

POST Request

Use the post method of the Mailjet CLient (i.e. $mj->post($resource, $params))

$params will be a PHP associative array with the following keys :

  • body: associative PHP array defining the object to create. The properties correspond to the property of the JSON Payload)
  • id : ID you want to apply a POST request to (used in case of action on a resource)

Simple POST request

<?php
/*
Create a new contact:
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$body = [
    'Email' => "[email protected]"
];
$response = $mj->post(Resources::$Contact, ['body' => $body]);
$response->success() && var_dump($response->getData());?>

Using actions

<?php
/*
Manage the subscription status of a contact to multiple lists
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$body = [
    'ContactsLists' => [
        [
            'ListID' => "$ListID_1",
            'Action' => "addnoforce"
        ],
        [
            'ListID' => "$ListID_2",
            'Action' => "addforce"
        ]
    ]
];
$response = $mj->post(Resources::$ContactManagecontactslists, ['id' => $id, 'body' => $body]);
$response->success() && var_dump($response->getData());
?>

GET Request

Use the get method of the Mailjet CLient (i.e. $mj->get($ressource, $params))

$param will be a PHP associative array with the following keys :

  • id : Unique ID of the element you want to get (optional)
  • filters: associative array listing the query parameters you want to apply to your get (optional)

Retrieve all objects

<?php
/*
Retrieve all contacts:
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$response = $mj->get(Resources::$Contact);
$response->success() && var_dump($response->getData());
?>

Use filtering

<?php
/*
Retrieve all contacts that are not in the campaign exclusion list :
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$filters = [
  'IsExcludedFromCampaigns' => 'false'
];
$response = $mj->get(Resources::$Contact, ['filters' => $filters]);
$response->success() && var_dump($response->getData());
?>

Use paging and sorting

<?php
/*
Retrieve a specific contact ID :
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$filters = [
    'Limit'=>40,  // default is 10, max is 1000
    'Offset'=>20,
    'Sort'=>'ArrivedAt DESC',
    'Contact'=>$contact->ID,
    'showSubject'=>true
];
$response = $mj->get(Resources::$Message, ['filters'=>$filters]);
$response->success() && var_dump($response->getData());
?>

Retrieve a single object

<?php
/*
Retrieve a specific contact ID :
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$response = $mj->get(Resources::$Contact, ['id' => $id]);
$response->success() && var_dump($response->getData());
?>

PUT Request

Use the put method of the Mailjet CLient (i.e. $mj->put($ressource, $params))

$param will be a PHP associative array with the following keys :

  • id : Unique ID of the element you want to modify
  • body: associative array representing the object property to update

A PUT request in the Mailjet API will work as a PATCH request - the update will affect only the specified properties. The other properties of an existing resource will neither be modified, nor deleted. It also means that all non-mandatory properties can be omitted from your payload.

Here's an example of a PUT request:

<?php
/*
Update the contact properties for a contact:
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$body = [
    'first_name' => "John",
    'last_name' => "Smith"
];
$response = $mj->put(Resources::$ContactData, ['id' => $id, 'body' => $body]);
$response->success() && var_dump($response->getData());
?>

DELETE Request

Use the delete method of the Mailjet CLient (i.e. $mj->delete($ressource, $params))

Upon a successful DELETE request the response will not include a response body, but only a 204 No Content response code.

Here's an example of a DELETE request:

<?php
/*
Delete an email template:
*/
require 'vendor/autoload.php';
use \Mailjet\Resources;
$mj = new \Mailjet\Client(getenv('MJ_APIKEY_PUBLIC'), getenv('MJ_APIKEY_PRIVATE'));
$response = $mj->delete(Resources::$Template, ['id' => $id]);
$response->success() && var_dump($response->getData());
?>

Response

The get, post, put and delete method will return a Response object with the following available methods:

  • success() : returns a boolean indicating if the API call was successful
  • getStatus() : http status code (ie: 200,400 ...)
  • getData() : content of the property data of the JSON response payload if exist or the full JSON payload returned by the API call. This will be PHP associative array.
  • getCount() : number of elements returned in the response
  • getReasonPhrase() : http response message phrases ("OK", "Bad Request" ...)

API resources helpers

All API resources are listed in the Resources object. It will make it easy to find the resources and actions aliases.

$response = $mj->delete(Resources::$Template, ['id' => $id]);
$response = $mj->put(Resources::$ContactData, ['id' => $id, 'body' => $body]);
$response = $mj->post(Resources::$ContactManagecontactslists, ['id' => $id, 'body' => $body]);

SMS API

Token Authentication

Authentication for the SMS API endpoints is done using a bearer token. The bearer token is generated in the SMS section of your Mailjet account.

To create a new instance of the Mailjet client with token authentication, the token should be provided as the first parameter, and the second must be NULL:

$mj = new \Mailjet\Client(getenv('MJ_APITOKEN'),
                          NULL, true,
                          ['url' => "api.mailjet.com", 'version' => 'v4', 'call' => false]
                        );

Example Request

Here's an example SMS API request:

//Send an SMS
$mj = new \Mailjet\Client(getenv('MJ_APITOKEN'),
                          NULL, true,
                          ['url' => "api.mailjet.com", 'version' => 'v4', 'call' => false]
                        );
$body = [
    'Text' => "Have a nice SMS flight with Mailjet !",
    'To' => "+336000000000",
    'From' => "MJ Pilot",
];
$response = $mj->post(Resources::$SmsSend, ['body' => $body]);
$response->success() && var_dump($response->getData());

Contribute

Mailjet loves developers. You can be part of this project!

This wrapper is a great introduction to the open source world, check out the code!

Feel free to ask anything, and contribute:

  • Fork the project.
  • Create a new branch.
  • Implement your feature or bug fix.
  • Add documentation to it.
  • Commit, push, open a pull request and voila.

If you have suggestions on how to improve the guides, please submit an issue in our Official API Documentation repo.

More Repositories

1

mailjet-apiv3-nodejs

[API v3] Official Mailjet API v3 NodeJS wrapper
TypeScript
233
star
2

mailjet-gem

[API v3] Mailjet official Ruby GEM
Ruby
128
star
3

laravel-mailjet

Laravel package for Mailjet API V3 and Laravel Mailjet Mail Transport
PHP
92
star
4

mailjet-apiv3-go

[API v3] Official Mailjet API v3 Go wrapper
Go
86
star
5

mailjet-apiv3-dotnet

[API v3] Official Mailjet API v3 .NET wrapper
C#
71
star
6

mailjet-apiv3-java

[API v3] Mailjet Java API Wrapper
Java
66
star
7

mailjet-apiv3-php-simple

[API v3] Simple PHP wrapper for the Mailjet API /!\ [DEPRECATED - SEE README] /!\
PHP
55
star
8

mailjet-apiv3-templating-samples

Mailjet API transactional templating samples
HTML
35
star
9

mailjetBundle

Symfony bundle for Mailjet API V3
PHP
35
star
10

MailjetSwiftMailer

A SwiftMailer transport implementation for Mailjet
PHP
27
star
11

api-documentation

Mailjet API Guides
22
star
12

wordpress-mailjet-plugin-apiv3

[API v3] Mailjet for WordPress
PHP
19
star
13

prestashop-mailjet-plugin-apiv3

PHP
15
star
14

Mailjet-sendemail

[API v3] Node.js wrapper to send emails using Mailjet API /!\ [DEPRECATED - SEE README] /!\
JavaScript
11
star
15

mailjet-apiv3-php-no-composer

[API v3] Mailjet PHP Wrapper bundled with composer dependencies
PHP
8
star
16

magento-mailjet-plugin-official

PHP
7
star
17

mailjet-apiv3-nodejs-es2015

[API v3] Official Mailjet API v3 NodeJS wrapper (EcmaScript 2015 experimental version)
JavaScript
5
star
18

mailjet-magento2

The official Mailjet plugin for Magento 2
PHP
5
star
19

mailjet-js-tutorial

JavaScript
5
star
20

simple_chat_email

This project is a simple chat with email replying
CSS
3
star
21

email_controlled_christmas_tree

Ruby
3
star
22

trello-redispatcher

NodeJS script to move cards between Trello boards easily (using Trello API)
JavaScript
3
star
23

go-interview

Go interview tech test project
3
star
24

dotclear-mailjet-plugin-apiv3

[API v3] Dotclear mailjet plugin
PHP
3
star
25

joomla-mailjet-plugin-apiv3

[API v3] Mailjet for Joomla
PHP
3
star
26

Python-App-Engine

Mailjet implementation with Google App engine
Python
2
star
27

pycon_coding_challenge

Ruby
1
star
28

spip-mailjet-plugin-apiv3

PHP
1
star
29

drupal8-mailjet-module-apiv3

PHP
1
star
30

weebly-element

Weebly element integrating Mailjet Subscription Widget
JavaScript
1
star
31

drupal-mailjet-module-apiv3

PHP
1
star
32

typo3-mailjet-module-apiv3

Mailjet API integration module for Typo3 CMS
PHP
1
star