{"id":13879830,"url":"https://github.com/mailjet/mailjet-gem","last_synced_at":"2025-04-08T16:09:44.019Z","repository":{"id":2829951,"uuid":"3832506","full_name":"mailjet/mailjet-gem","owner":"mailjet","description":"[API v3] Mailjet official Ruby GEM","archived":false,"fork":false,"pushed_at":"2024-08-30T09:20:50.000Z","size":779,"stargazers_count":131,"open_issues_count":10,"forks_count":73,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-01T15:11:56.312Z","etag":null,"topics":["email","mailjet","mailjet-api","ruby","ruby-gem","ruby-on-rails","ruby-wrapper","transactional-emails","wrapper"],"latest_commit_sha":null,"homepage":"https://dev.mailjet.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mailjet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-03-26T12:31:19.000Z","updated_at":"2024-12-25T06:51:44.000Z","dependencies_parsed_at":"2023-11-11T11:23:09.333Z","dependency_job_id":"d974f385-f719-4027-9ac3-afa6023e32a7","html_url":"https://github.com/mailjet/mailjet-gem","commit_stats":{"total_commits":411,"total_committers":48,"mean_commits":8.5625,"dds":0.8345498783454988,"last_synced_commit":"c086506435567a1938f3ff3eaefe4f553e417849"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fmailjet-gem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fmailjet-gem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fmailjet-gem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fmailjet-gem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mailjet","download_url":"https://codeload.github.com/mailjet/mailjet-gem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247878022,"owners_count":21011158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["email","mailjet","mailjet-api","ruby","ruby-gem","ruby-on-rails","ruby-wrapper","transactional-emails","wrapper"],"created_at":"2024-08-06T08:02:34.921Z","updated_at":"2025-04-08T16:09:43.962Z","avatar_url":"https://github.com/mailjet.png","language":"Ruby","readme":"![alt text](https://www.mailjet.com/images/email/transac/logo_header.png \"Mailjet\")\n\n# Official Mailjet Ruby wrapper\n\n[![Build Status](https://travis-ci.org/mailjet/mailjet-gem.svg?branch=master)](https://travis-ci.org/mailjet/mailjet-gem)\n\n\u003c!--\n\n[![Build Status](https://secure.travis-ci.org/jbescoyez/mailjet.png?branch=master)][travis]\n[![Dependency Status](https://gemnasium.com/jbescoyez/mailjet.png)][gemnasium]\n[![Maintainance status](http://stillmaintained.com/jbescoyez/mailjet.png)][stillmaintained]\n![Current Version](https://img.shields.io/badge/version-1.5.0-green.svg)\n\n--\u003e\n\n[travis]: http://travis-ci.org/jbescoyez/mailjet\n[gemnasium]: https://gemnasium.com/jbescoyez/mailjet\n[stillmaintained]: http://stillmaintained.com/jbescoyez/mailjet\n[mailjet]: http://www.mailjet.com\n[rubinius]: http://rubini.us/\n[ree]: http://www.rubyenterpriseedition.com/\n[jruby]: http://jruby.org/\n[mailjetter]: https://github.com/holinnn/mailjetter/\n[activeresource]: https://github.com/rails/activeresource\n[apidoc]: http://dev.mailjet.com/guides\n[apidoc-recipient]: http://mjdemo.poxx.net/~shubham/listrecipient.html?utm_source=github\u0026utm_medium=link\u0026utm_content=readme\u0026utm_campaign=mailjet-gem\n[camelcase-api]: http://api.rubyonrails.org/classes/String.html#method-i-camelcase\n[underscore-api]: http://api.rubyonrails.org/classes/String.html#method-i-underscore\n[actionmailerdoc]: http://guides.rubyonrails.org/action_mailer_basics.html#sending-emails-with-dynamic-delivery-options\n[send-api-doc]: http://dev.mailjet.com/guides/?ruby#choose-sending-method\n[v1-branch]: https://github.com/mailjet/mailjet-gem/tree/v1\n[mailjet_doc]: http://dev.mailjet.com/guides/?ruby#\n[api_doc]: https://github.com/mailjet/api-documentation\n\n\u003c!-- You can read this readme file in other languages:\nenglish | [french](./README.fr.md) --\u003e\n\n## Overview\n\nThis repository contains the official Ruby wrapper for the Mailjet API, bootstraped with [Mailjetter][mailjetter].\n\nCheck out all the resources and Ruby code examples in the [Offical Documentation](https://dev.mailjet.com/guides/?ruby#getting-started).\n\n\n## Table of contents\n\n- [Compatibility](#compatibility)\n- [Installation](#installation)\n  - [Rubygems](#rubygems)\n  - [Bundler](#bundler)\n- [Authentication](#authentication)\n- [Make your first call](#make-your-first-call)\n- [Call configuration specifics](#call-configuration-specifics)\n  - [API versioning](#api-versioning)\n  - [Base URL](#base-url)\n- [List of resources](#list-of-resources)\n  - [Naming conventions](#naming-conventions)\n- [Request examples](#request-examples)\n  - [POST request](#post-request)\n    - [Simple POST request](#simple-post-request)\n    - [Using actions](#using-actions)\n  - [GET request](#get-request)\n    - [Retrieve all objects](#retrieve-all-objects)\n    - [Use filtering](#use-filtering)\n    - [Retrieve a single object](#retrieve-a-single-object)\n    - [Retrieve the count of objects matching the query](retrieve-the-count-of-objects-matching-the-query)\n    - [Retrieve the first object matching the query](retrieve-the-first-object-matching-the-query)\n  - [PUT request](#put-request)\n  - [DELETE request](#delete-request)\n- [Send emails with ActionMailer](#send-emails-with-actionmailer)\n- [Track email delivery](#track-email-delivery)\n- [Testing](#testing)\n- [Contribute](#contribute)\n\n## Compatibility\n\nThis library requires **Ruby v2.2.X**.\n\nThe Rails ActionMailer integration is designed for Rails \u003e= 5.\n\n## Installation\n\n### Rubygems\n\nUse the below command to install the wrapper.\n\n```bash\n$ gem install mailjet\n```\n\n### Bundler\n\nAdd the following in your Gemfile:\n\n```ruby\n# Gemfile\ngem 'mailjet'\n```\n\nIf you wish to use the most recent release from Github, add the following in your Gemfile instead:\n\n```ruby\n#Gemfile\ngem 'mailjet', :git =\u003e 'https://github.com/mailjet/mailjet-gem.git'\n```\n\nThen let the bundler magic happen:\n\n```bash\n$ bundle install\n```\n\n##  Authentication\n\nThe Mailjet Email API uses your API and Secret keys for authentication. [Grab](https://app.mailjet.com/account/api_keys) and save your Mailjet API credentials by adding them to an initializer:\n\n```ruby\n# initializers/mailjet.rb\nMailjet.configure do |config|\n  config.api_key = 'your-api-key'\n  config.secret_key = 'your-secret-key'\n  config.default_from = 'my_registered_mailjet_email@domain.com'\nend\n```\n\n`default_from` is optional if you send emails with [`:mailjet`'s SMTP](https://github.com/mailjet/mailjet-gem#send-emails-with-actionmailer).\n\nBut if you are using Mailjet with Rails, you can simply generate it:\n\n```shell\n$ rails generate mailjet:initializer\n```\n\n## Make your first call\n\nHere's an example on how to send an email:\n\n```ruby\nrequire 'mailjet'\nMailjet.configure do |config|\n  config.api_key = ENV['MJ_APIKEY_PUBLIC']\n  config.secret_key = ENV['MJ_APIKEY_PRIVATE']\n  config.api_version = \"v3.1\"\nend\nvariable = Mailjet::Send.create(messages: [{\n    'From'=\u003e {\n        'Email'=\u003e '$SENDER_EMAIL',\n        'Name'=\u003e 'Me'\n    },\n    'To'=\u003e [\n        {\n            'Email'=\u003e '$RECIPIENT_EMAIL',\n            'Name'=\u003e 'You'\n        }\n    ],\n    'Subject'=\u003e 'My first Mailjet Email!',\n    'TextPart'=\u003e 'Greetings from Mailjet!',\n    'HTMLPart'=\u003e '\u003ch3\u003eDear passenger 1, welcome to \u003ca href=\\'https://www.mailjet.com/\\'\u003eMailjet\u003c/a\u003e!\u003c/h3\u003e\u003cbr /\u003eMay the delivery force be with you!'\n}]\n)\np variable.attributes[:messages]\n```\n\n## Call Configuration Specifics\n\n### API Versioning\n\nThe Mailjet API is spread among three distinct versions:\n\n- `v3` - The Email API\n- `v3.1` - Email Send API v3.1, which is the latest version of our Send API\n- `v4` - SMS API (not supported in this library yet)\n\nSince 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 `api_version`. For example, if using Send API `v3.1`:\n\n```ruby\nrequire 'mailjet'\nMailjet.configure do |config|\n  config.api_key = ENV['MJ_APIKEY_PUBLIC']\n  config.secret_key = ENV['MJ_APIKEY_PRIVATE']\n  config.api_version = \"v3.1\"\nend\n```\n\n### Base URL\n\nThe default base domain name for the Mailjet API is `https://api.mailjet.com`. You can modify this base URL by setting a value for `end_point` in your call:\n\n```ruby\nMailjet.configure do |config|\n  config.api_key = ENV['MJ_APIKEY_PUBLIC']\n  config.secret_key = ENV['MJ_APIKEY_PRIVATE']\n  config.api_version = \"v3.1\"\n  config.end_point = \"https://api.us.mailjet.com\"\nend\n```\n\nIf your account has been moved to Mailjet's **US architecture**, the URL value you need to set is `https://api.us.mailjet.com`.\n\n## List of resources\n\nYou can find the list of all available resources for this library, as well as their configuration, in [/lib/mailjet/resources](https://github.com/mailjet/mailjet-gem/tree/master/lib/mailjet/resources).\n\n### Naming conventions\n\n- Class names' first letter is capitalized followed by the rest of the resource name in lowercase (e.g. `listrecipient` will be `Listrecipient` in ruby)\n- Ruby attribute names are the underscored versions of API attributes names (e.g. `IsActive` will be `is_active` in ruby)\n\n## Request examples\n\n### POST Request\n\nUse the `create` method of the Mailjet CLient (i.e. `variable = Mailjet::$resource.create($params)`).\n\n`$params` will be a list of properties used in the request payload.\n\n#### Simple POST request\n\n```ruby\n# Create a new contact:\nrequire 'mailjet'\nMailjet.configure do |config|\n  config.api_key = ENV['MJ_APIKEY_PUBLIC']\n  config.secret_key = ENV['MJ_APIKEY_PRIVATE']\nend\nvariable = Mailjet::Contact.create(email: \"Mister@mailjet.com\"\n)\np variable.attributes['Data']\n```\n\n#### Using actions\n\nSome APIs allow the use of action endpoints. To use them in this wrapper, the API endpoint is in the beginning, followed by an underscore, followed by the action you are performing - e.g. `Contact_managecontactslists`.\n\nUse `id` to specify the ID you want to apply a POST request to (used in case of action on a resource).\n\n```ruby\n# Manage the subscription status of a contact to multiple lists\nrequire 'mailjet'\nMailjet.configure do |config|\n  config.api_key = ENV['MJ_APIKEY_PUBLIC']\n  config.secret_key = ENV['MJ_APIKEY_PRIVATE']\nend\nvariable = Mailjet::Contact_managecontactslists.create(id: $ID, contacts_lists: [{\n    'ListID'=\u003e '$ListID_1',\n    'Action'=\u003e 'addnoforce'\n}, {\n    'ListID'=\u003e '$ListID_2',\n    'Action'=\u003e 'addforce'\n}]\n)\np variable.attributes['Data']\n```\n\n### GET request\n\n#### Retrieve all objects\n\nUse the `.all` method of the Mailjet CLient (i.e. `Mailjet::$resource.all()`) to retrieve all objects you are looking for. By default, `.all` will retrieve only 10 objects - you have to specify `limit: 0` if you want to GET them all (up to 1000 objects).\n\n```ruby\n\u003e recipients = Mailjet::Listrecipient.all(limit: 0)\n```\n\n#### Use filtering\n\nYou can refine queries using API filters, as well as the following parameters:\n\n- `format`: `:json`, `:xml`, `:rawxml`, `:html`, `:csv` or `:phpserialized` (default: `:json`)\n- `limit`: integer (default: `10`)\n- `offset`: integer (default: `0`)\n- `sort`: `[[:property, :asc], [:property, :desc]]`\n\n```ruby\n# To retrieve all contacts from contact list ID 123:\n\u003e variable = Mailjet::Contact.all(limit: 0, contacts_list: 123)\n```\n\n#### Retrieve a single object\n\nUse the `.find` method to retrieve a specific object. Specify the ID of the object inside the parentheses.\n\n```ruby\n# Retrieve a specific contact ID.\nrequire 'mailjet'\nMailjet.configure do |config|\n  config.api_key = ENV['MJ_APIKEY_PUBLIC']\n  config.secret_key = ENV['MJ_APIKEY_PRIVATE']\nend\nvariable = Mailjet::Contact.find($CONTACT_EMAIL)\np variable.attributes['Data']\n```\n\n#### Retrieve the count of objects matching the query\n\n```ruby\n\u003e Mailjet::Contact.count\n=\u003e 83\n```\n\n#### Retrieve the first object matching the query\n\n```ruby\n\u003e Mailjet::Contact.first\n=\u003e #\u003cMailjet::Contact\u003e\n````\n\n### PUT request\n\nA `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.\n\nHere's an example of a PUT request:\n\n```ruby\n\u003e recipient = Mailjet::Listrecipient.first\n=\u003e #\u003cMailjet::Listrecipient\u003e\n\u003e recipient.is_active = false\n=\u003e false\n\u003e recipient.attributes\n=\u003e {...} # attributes hash\n\u003e recipient.save\n=\u003e true\n\u003e recipient.update_attributes(is_active: true)\n=\u003e true\n```\n\n### DELETE request\n\nHere's an example of a `DELETE` request:\n\n```ruby\n\u003e recipient = Mailjet::Listrecipient.first\n=\u003e #\u003cMailjet::Listrecipient\u003e\n\u003e recipient.delete\n\u003e Mailjet::Listrecipient.delete(123)\n=\u003e #\u003cMailjet::Listrecipient\u003e\n```\n\nUpon a successful `DELETE` request the response will not include a response body, but only a `204 No Content` response code.\n\n## Send emails with ActionMailer\n\nA quick walkthrough to use Rails Action Mailer [here](http://guides.rubyonrails.org/action_mailer_basics.html).\n\nFirst set your delivery method (here Mailjet SMTP relay servers):\n\n```ruby\n# application.rb or config/environments specific settings, which take precedence\nconfig.action_mailer.delivery_method = :mailjet\n\n```\n\nOr if you prefer sending messages through [Mailjet Send API](http://dev.mailjet.com/guides/#send-transactional-email):\n\n```ruby\n# application.rb\nconfig.action_mailer.delivery_method = :mailjet_api\n```\n\nYou can use Mailjet specific options with `delivery_method_options` as detailed in the official [ActionMailer doc](http://guides.rubyonrails.org/action_mailer_basics.html#sending-emails-with-dynamic-delivery-options):\n\n```ruby\nclass AwesomeMailer \u003c ApplicationMailer\n\n  def awesome_mail(user)\n\n    mail(\n      to: user.email,\n      delivery_method_options: { api_key: 'your-api-key', secret_key: 'your-secret-key' }\n    )\n  end\nend\n```\n\nKeep in mind that to use the latest version of the Send API, you need to specify the version via `delivery_method_options`:\n\n```ruby\ndelivery_method_options: { version: 'v3.1' }\n```\n\nOther supported options are:\n\n```ruby\n# For v3_1 API\n\n* :api_key\n* :secret_key\n* :'Priority'\n* :'CustomCampaign'\n* :'DeduplicateCampaign'\n* :'TemplateLanguage'\n* :'TemplateErrorReporting'\n* :'TemplateErrorDeliver'\n* :'TemplateID'\n* :'TrackOpens'\n* :'TrackClicks'\n* :'CustomID'\n* :'EventPayload'\n* :'Variables'\n* :'Headers'\n\n# For v3_0 API\n\n* :recipients\n* :'mj-prio'\n* :'mj-campaign'\n* :'mj-deduplicatecampaign'\n* :'mj-templatelanguage'\n* :'mj-templateerrorreporting'\n* :'mj-templateerrordeliver'\n* :'mj-templateid'\n* :'mj-trackopen'\n* :'mj-trackclick',\n* :'mj-customid'\n* :'mj-eventpayload'\n* :vars\n* :headers\n```\n\nOtherwise, you can pass the custom Mailjet SMTP headers directly:\n```ruby\nheaders['X-MJ-CustomID'] = 'rubyPR_Test_ID_1469790724'\nheaders['X-MJ-EventPayload'] = 'rubyPR_Test_Payload'\nheaders['X-MJ-TemplateLanguage'] = 'true'\n```\n\nCreating a Mailer:\n```ruby\n$ rails generate mailer UserMailer\n\ncreate  app/mailers/user_mailer.rb\ncreate  app/mailers/application_mailer.rb\ninvoke  erb\ncreate    app/views/user_mailer\ncreate    app/views/layouts/mailer.text.erb\ncreate    app/views/layouts/mailer.html.erb\ninvoke  test_unit\ncreate    test/mailers/user_mailer_test.rb\ncreate    test/mailers/previews/user_mailer_preview.rb\n```\n\nIn the UserMailer class you can set up your email method:\n```ruby\n#app/mailers/user_mailer.rb\nclass UserMailer \u003c ApplicationMailer\n  def welcome_email()\n     mail(from: \"me@mailjet.com\", to: \"you@mailjet.com\",\n          subject: \"This is a nice welcome email\")\n   end\nend\n```\n\nNext, create your templates in the views folder:\n```ruby\n#app/views/user_mailer/welcome_email.html.erb\nHello world in HTML!\n\n#app/views/user_mailer/welcome_email.text.erb\nHello world in plain text!\n```\n\nThere's also the ability to set [Mailjet custom headers](http://dev.mailjet.com/guides/#send-api-json-properties)\n```ruby\n#app/mailers/user_mailer.rb\nclass UserMailer \u003c ApplicationMailer\n  def welcome_email()\n    headers['X-MJ-CustomID'] = 'custom value'\n    headers['X-MJ-EventPayload'] = 'custom payload'\n\n    mail(\n    from: \"me@mailjet.com\",\n    to: \"you@mailjet.com\",\n    subject: \"This is a nice welcome email\"\n    )\n  end\nend\n```\nFor sending email, you can call the method:\n```ruby\n# In this example, we are sending the email immediately\nUserMailer.welcome_email.deliver_now!\n```\n\nFor more information on `ActionMailer::MessageDelivery`, see the documentation [HERE](http://edgeapi.rubyonrails.org/classes/ActionMailer/MessageDelivery.html)\n\n#### Manage contacts via CSV Upload\nCreate the CSV content in a format compatible with the Mailjet API, see the documentation [HERE](https://dev.mailjet.com/email/guides/contact-management/#manage-contacts-via-csv-upload)\n```ruby\nMailjet::ContactslistCsv.send_data(ID_CONTACTLIST, File.open('some_csvdata.csv', 'r'))\n```\n\n#### [Delete the Contact](https://dev.mailjet.com/email/guides/contact-management/#gdpr-delete-contacts)\n```ruby\nMailjet::ContactPii.delete(contact_ID)\n```\n\n## Track email delivery\n\nYou can setup your Rack application in order to receive feedback on emails you sent (clicks, etc.)\n\nFirst notify Mailjet of your desired endpoint (say: 'http://www.my_domain.com/mailjet/callback') at https://www.mailjet.com/account/triggers\n\nThen configure Mailjet's Rack application to catch these callbacks.\n\nA typical Rails/ActiveRecord installation would look like that:\n\n```ruby\n# application.rb\n\nconfig.middleware.use Mailjet::Rack::Endpoint, '/mailjet/callback' do |params|  # using the same URL you just set in Mailjet's administration\n\n  email = params['email'].presence || params['original_address'] # original_address is for typofix events\n\n  if user = User.find_by_email(email)\n    user.process_email_callback(params)\n  else\n    Rails.logger.fatal \"[Mailjet] User not found: #{email} -- DUMP #{params.inspect}\"\n  end\nend\n\n# user.rb\nclass User \u003c ActiveRecord::Base\n\n  def process_email_callback(params)\n\n    # Returned events and options are described at https://eu.mailjet.com/docs/event_tracking\n    case params['event']\n    when 'open'\n      # Mailjet's invisible pixel was downloaded: user allowed for images to be seen\n    when 'click'\n      # a link (tracked by Mailjet) was clicked\n    when 'bounce'\n      # is user's email valid? Recipient not found\n    when 'spam'\n      # gateway or user flagged you\n    when 'blocked'\n      # gateway or user blocked you\n    when 'typofix'\n      # email routed from params['original_address'] to params['new_address']\n    else\n      Rails.logger.fatal \"[Mailjet] Unknown event #{params['event']} for User #{self.inspect} -- DUMP #{params.inspect}\"\n    end\n  end\n```\n\nNote that since it's a Rack application, any Ruby Rack framework (say: Sinatra, Padrino, etc.) is compatible.\n\n## Testing\n\nFor maximum reliability, the gem is tested against Mailjet's server for some parts, which means that valid credentials are needed.\nDo NOT use your production account (create a new one if needed), because some tests are destructive.\n\n```yml\n# GEM_ROOT/config.yml\nmailjet:\n  api_key: YOUR_API_KEY\n  secret_key: YOUR_SECRET_KEY\n  default_from: YOUR_REGISTERED_SENDER_EMAIL # the email you used to create the account should do it\n```\n\nThen at the root of the gem, simply run:\n\n```bash\nbundle\nbundle exec rake\n```\n\n## Contribute\n\nMailjet loves developers. You can be part of this project!\n\nThis wrapper is a great introduction to the open source world, check out the code!\n\nFeel free to ask anything, and contribute:\n\n - Fork the project.\n - Create a new branch.\n - Implement your feature or bug fix.\n - Add documentation for it.\n - Add specs for your feature or bug fix.\n - Commit and push your changes.\n - Submit a pull request. Please do not include changes to the gemspec, or version file.\n\n If you have suggestions on how to improve the guides, please submit an issue in our [Official API Documentation repo](https://github.com/mailjet/api-documentation).\n","funding_links":[],"categories":["Ruby"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailjet%2Fmailjet-gem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmailjet%2Fmailjet-gem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailjet%2Fmailjet-gem/lists"}