{"id":22894,"date":"2019-07-16T00:00:00","date_gmt":"2019-07-16T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/the-official-mailgun-ruby-sdk-is-here-2\/"},"modified":"2026-09-16T02:52:09","modified_gmt":"2026-09-16T02:52:09","slug":"the-official-mailgun-ruby-sdk-is-here","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","title":{"rendered":"Le gem Ruby officiel de Mailgun est disponible"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Today, we\u2019re happy to announce that we\u2019ve added Ruby to the list of official Mailgun SDKs. Just like our PHP SDK, we\u2019ve included some utilities like Message Builder, Batch Sending and Opt-in Hander to simplify common development tasks. We\u2019re looking forward to collaborating with the Ruby community to make the SDK even better over time.\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\" target=\"_tabs\" rel=\"noopener noreferrer\">You can access the SDK on Github<\/a>.<\/p>\n\n<p class=\"wp-block-paragraph\">For those not familiar with an SDK, let\u2019s first review what\u2019s required to send a message using the standard HTTPS Ruby library.<\/p>\n\n<p class=\"wp-block-paragraph\">Today, we\u2019re happy to announce that we\u2019ve added Ruby to the list of official Mailgun SDKs. Just like our PHP SDK, we\u2019ve included some utilities like Message Builder, Batch Sending and Opt-in Hander to simplify common development tasks. We\u2019re looking forward to collaborating with the Ruby community to make the SDK even better over time.\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\" target=\"_tabs\" rel=\"noopener noreferrer\">You can access the SDK on Github<\/a>.<\/p>\n\n<p class=\"wp-block-paragraph\">For those not familiar with an SDK, let\u2019s first review what\u2019s required to send a message using the standard HTTPS Ruby library.<\/p>\n\n<p class=\"wp-block-paragraph\">Sending a message:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Ruby                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Ruby\">\r\n                                <code id=\"code_0_content\" class=\"language-Ruby\">\r\n\r\n                                    require &quot;net\/https&quot;  \r\nrequire &quot;uri&quot;\r\n\r\nuri = URI.parse(&quot;https:\/\/api.mailgun.net\/v2\/samples.mailgun.org\/messages&quot;)\r\n\r\ndata = {&#039;to&#039;        =&gt; &#039;joe.sample@example.com&#039;,  \r\n        &#039;from&#039;      =&gt; &#039;bill.sample@example.com&#039;,\r\n        &#039;subject&#039;   =&gt; &#039;Hello from Ruby!&#039;,\r\n        &#039;text&#039;      =&gt; &#039;Sent via Mailgun.&#039;}\r\n\r\nhttp = Net::HTTP.new(uri.host, uri.port)  \r\nhttp.use_ssl = true\r\n\r\nrequest = Net::HTTP::Post.new(uri.request_uri)  \r\nrequest.basic_auth(&quot;api&quot;, &quot;key-3ax6xnjp29jd6fds4gc373sgvjxteol0&quot;)  \r\nrequest.set_form_data(data)\r\n\r\nresponse = http.request(request)  \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">The above will send a message using the Mailgun API, however, there\u2019s a lot of code there that, while important, is complicated, and rather confusing.<\/p>\n\n<p class=\"wp-block-paragraph\">Using our new SDK, we\u2019ve managed to reduce the amount of code required to just a few lines.<\/p>\n\n<p class=\"wp-block-paragraph\">Sending a message with Mailgun Ruby SDK:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Ruby                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Ruby\">\r\n                                <code id=\"code_0_content\" class=\"language-Ruby\">\r\n\r\n                                        require &#039;mailgun&#039;\r\n\r\n    # First, instantiate the Mailgun Client with your API key\r\n    mg_client = Mailgun::Client.new &quot;your-api-key&quot;\r\n\r\n    # Define your message parameters\r\n    message_params = {:from    =&gt; &#039;bob@sending_domain.com&#039;,  \r\n              :to      =&gt; &#039;sally@example.com&#039;,\r\n              :subject =&gt; &#039;The Ruby SDK is awesome!&#039;,\r\n              :text    =&gt; &#039;It is really easy to send a message!&#039;}\r\n\r\n    # Send your message through the client\r\n    mg_client.send_message &quot;sending_domain.com&quot;, message_params\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">Obtaining Events with the Mailgun Ruby SDK:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Ruby                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Ruby\">\r\n                                <code id=\"code_0_content\" class=\"language-Ruby\">\r\n\r\n                                        # First, instantiate the Client, then instantiate the Events helper.  \r\n    mg_client = Mailgun::Client.new(&quot;your-api-key&quot;)  \r\n    mg_events = Mailgun::Events.new(mg_client, &quot;your-domain&quot;)\r\n\r\n    result = mg_events.get({&#039;limit&#039; =&gt; 25,  \r\n                    &#039;recipient&#039; =&gt; &#039;joe@example.com&#039;})\r\n\r\n    result.to_h[&#039;items&#039;].each do | item |  \r\n    # outputs &quot;Delivered - 20140509184016.12571.48844@example.com&quot;\r\n    puts &quot;#{item[&#039;event&#039;]} - #{item[&#039;message&#039;][&#039;headers&#039;][&#039;message-id&#039;]}&quot;\r\nend\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">All HTTP actions return a response object, which can be converted to a hash or YAML.<\/p>\n\n<p class=\"wp-block-paragraph\">Let\u2019s say we\u2019d like to get the next 25 results, using the same query. Just issue \u201cnext\u201d on the \u201cmg_events\u201d object. The SDK keeps track of the Events API pagination links.<\/p>\n\n<p class=\"wp-block-paragraph\"><code>result = mg_events.next<\/code><\/p>\n\n<p class=\"wp-block-paragraph\">Note: If the result set is less than your limit, do not worry. A subsequent query of \u201cnext\u201d will return the next 25 results since the last time you called \u201cnext\u201d or \u201cget\u201d.<\/p>\n\n<h2 class=\"wp-block-heading\">Message Builder<\/h2>\n\n<p class=\"wp-block-paragraph\">Creating an array of parameters can be difficult for some code implementations, so we\u2019ve included a class that allows you to make method calls that automatically build a properly formed array of message parameters.<\/p>\n\n<p class=\"wp-block-paragraph\">Sending a message with Mailgun Ruby SDK + Message Builder:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Ruby                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Ruby\">\r\n                                <code id=\"code_0_content\" class=\"language-Ruby\">\r\n\r\n                                        # First, instantiate the Mailgun Client with your API key  \r\n    mg_client = Mailgun::Client.new(&quot;your-api-key&quot;)  \r\n    mb_obj = Mailgun::MessageBuilder.new()\r\n\r\n    # Define the from address\r\n    mb_obj.set_from_address(&quot;me@example.com&quot;, {&quot;first&quot;=&gt;&quot;Ruby&quot;, &quot;last&quot; =&gt; &quot;SDK&quot;});  \r\n    # Define a to recipient\r\n    mb_obj.add_recipient(:to, &quot;john.doe@example.com&quot;, {&quot;first&quot; =&gt; &quot;John&quot;, &quot;last&quot; =&gt; &quot;Doe&quot;});  \r\n    # Define a cc recipient\r\n    mb_obj.add_recipient(:cc, &quot;sally.doe@example.com&quot;, {&quot;first&quot; =&gt; &quot;Sally&quot;, &quot;last&quot; =&gt; &quot;Doe&quot;});  \r\n    # Define the subject\r\n    mb_obj.set_subject(&quot;A message from the Ruby SDK using Message Builder!&quot;);  \r\n    # Define the body of the message\r\n    mb_obj.set_text_body(&quot;This is the text body of the message!&quot;);\r\n\r\n    # Campaign and other headers\r\n    mb_obj.add_campaign_id(&quot;My-Awesome-Campaign&quot;);  \r\n    mb_obj.add_custom_parameter(&quot;h:Customer-Id&quot;, &quot;12345&quot;);\r\n\r\n    # Attach a file and rename it\r\n    mb_obj.add_attachment(&quot;\/path\/to\/file\/receipt_123491820.pdf&quot;, &quot;Receipt.pdf&quot;);\r\n\r\n    # Schedule message in the future\r\n    mb_obj.set_delivery_time(&quot;tomorrow 8:00AM&quot;, &quot;PST&quot;);\r\n\r\n    # Finally, send your message using the client\r\n    result = mg_client.send_message(&quot;sending_domain.com&quot;, mb_obj)\r\n\r\n    puts result.body.to_s\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">For a list of all available functions, check out the\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/blob\/master\/docs\/Messages.md\" target=\"_tabs\" rel=\"noopener noreferrer\">list on Github<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\">Batch Message<\/h2>\n\n<p class=\"wp-block-paragraph\">In addition to Message Builder, we have Batch Message. This class allows you to build a message and submit a template message in batches, up to 1,000 recipients per post. The benefit of using this class is that the recipients tally is monitored and will automatically submit the message to the endpoint when you\u2019ve added the 1,000th recipient. This means you can build your message and begin iterating through your database. Forget about sending the message, the SDK will keep track of posting to the API when necessary.<\/p>\n\n<p class=\"wp-block-paragraph\">Sending a message with Mailgun Ruby SDK + Batch Message:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Ruby                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Ruby\">\r\n                                <code id=\"code_0_content\" class=\"language-Ruby\">\r\n\r\n                                        # First, instantiate the Mailgun Client with your API key  \r\n    mg_client = Mailgun::Client.new(&quot;your-api-key&quot;)  \r\n    mb_obj = Mailgun::BatchMessage.new(@mb_client, &quot;example.com&quot;)\r\n\r\n    # Define the from address\r\n    mb_obj.set_from_address(&quot;me@example.com&quot;,  \r\n                             {&quot;first&quot;=&gt;&quot;Ruby&quot;, \r\n                              &quot;last&quot; =&gt; &quot;SDK&quot;});\r\n    # Define the subject\r\n    mb_obj.set_subject(&quot;A message from the Ruby SDK using Message Builder!&quot;);\r\n\r\n    # Define the body of the message\r\n    mb_obj.set_text_body(&quot;Hello %recipient.first%,  \r\n                 This is the text body of the message \r\n                 using recipient variables!\r\n                 If you needed to reference the account-id\r\n                 recipient variable, you could do it like \r\n                 this: %account-id%.&quot;);\r\n\r\n    # Add several recipients\r\n    mb_obj.add_recipient(:to, &quot;john.doe@example.com&quot;,  \r\n                                  {&quot;first&quot;      =&gt; &quot;John&quot;, \r\n                                   &quot;last&quot;       =&gt; &quot;Doe&quot;, \r\n                                   &quot;account-id&quot; =&gt; 1234});\r\n\r\n    mb_obj.add_recipient(:to, &quot;jane.doe@example.com&quot;,  \r\n                                  {&quot;first&quot;      =&gt; &quot;Jane&quot;, \r\n                                   &quot;last&quot;       =&gt; &quot;Doe&quot;, \r\n                                   &quot;account-id&quot; =&gt; 5678});\r\n\r\n    mb_obj.add_recipient(:to, &quot;bob.doe@example.com&quot;,  \r\n                                  {&quot;first&quot;       =&gt; &quot;Bob&quot;, \r\n                                   &quot;last&quot;        =&gt; &quot;Doe&quot;, \r\n                                   &quot;account-id&quot;  =&gt; 91011});\r\n    ... etc ...\r\n\r\n    mb_obj.add_recipient(:to, &quot;sally.doe@example.com&quot;,  \r\n                                  {&quot;first&quot;      =&gt; &quot;Sally&quot;, \r\n                                   &quot;last&quot;       =&gt; &quot;Doe&quot;, \r\n                                   &quot;account-id&quot; =&gt; 121314});\r\n\r\n    # Send your message through the client\r\n    message_ids = mg_client.finalize\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">As you can see, Batch Message actually extends Message Builder. All functions available in Message Builder are available in Batch Message. Check out the\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/tree\/master\/docs\" target=\"_tabs\" rel=\"noopener noreferrer\">full documentation on Github<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\">Opt-In Handler<\/h2>\n\n<p class=\"wp-block-paragraph\">Finally, we have built a simple double opt-in handler to help you generate unique opt-in links. The opt-in handler also uses our<a href=\"https:\/\/www.mailgun.com\/fr\/blog\/free-email-validation-api-for-web-forms\" target=\"_tabs\" rel=\"noopener noreferrer\">\u00a0address validation service<\/a>\u00a0to validate the accuracy of the email addresses.<\/p>\n\n<p class=\"wp-block-paragraph\">The typical flow for using this class would be as follows:<br \/>\n<b>Recipient Requests Subscribe<\/b>\u00a0-&gt; [Validate Recipient Address] -&gt; [Generate Opt In Link] -&gt; [Email Recipient Opt In Link]<br \/>\n<b>Recipient Clicks Opt In Link<\/b>\u00a0-&gt; [Validate Opt In Link] -&gt; [Subscribe User] -&gt; [Send final confirmation]<\/p>\n\n<p class=\"wp-block-paragraph\">It is best to use this class for your website subscription forms, so you\u2019ll need a web server accessible to the internet to handle the validation link click.<\/p>\n\n<p class=\"wp-block-paragraph\">Since each implementation will be rather unique, see the\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/blob\/master\/docs\/OptInHandler.md\" target=\"_tabs\" rel=\"noopener noreferrer\">Github documentation<\/a>\u00a0for usage examples of this class.<\/p>\n\n<p class=\"wp-block-paragraph\">Let us know what you think. Is there something else you\u2019d like to see in the SDK? Or something you love. We\u2019d appreciate your feedback!<\/p>\n\n<p class=\"wp-block-paragraph\">Happy Sending!<\/p>\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_e9cb9101b74e2555063e385b62536b36\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Sign Up            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_e9cb9101b74e2555063e385b62536b36\">\r\n                It&rsquo;s easy to get started. And it&rsquo;s free.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">See what you can accomplish with the world\u2019s best email delivery platform.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d&rsquo;envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus&#8230;<\/p>\n","protected":false},"author":13,"featured_media":4555,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"blog_category":[22],"class_list":["post-22894","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-product"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Le gem Ruby officiel de Mailgun est disponible - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d&#039;envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Le gem Ruby officiel de Mailgun est disponible - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d&#039;envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T02:52:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/\",\"name\":\"Le gem Ruby officiel de Mailgun est disponible - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"datePublished\":\"2019-07-16T00:00:00+00:00\",\"dateModified\":\"2026-09-16T02:52:09+00:00\",\"description\":\"Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d'envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Le gem Ruby officiel de Mailgun est disponible\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Le gem Ruby officiel de Mailgun est disponible - Transactional Email API Service For Developers | Mailgun","description":"Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d'envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","og_locale":"fr_FR","og_type":"article","og_title":"Le gem Ruby officiel de Mailgun est disponible - Transactional Email API Service For Developers | Mailgun","og_description":"Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d'envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus...","og_url":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T02:52:09+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","url":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","name":"Le gem Ruby officiel de Mailgun est disponible - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","datePublished":"2019-07-16T00:00:00+00:00","dateModified":"2026-09-16T02:52:09+00:00","description":"Ruby a \u00e9t\u00e9 ajout\u00e9 \u00e0 notre liste de SDK\u00a0! Vous souhaitez en savoir plus sur la fa\u00e7on d'envoyer un email via Mailgun avec Ruby\u00a0? En savoir plus...","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/fr\/blog\/"},{"@type":"ListItem","position":3,"name":"Le gem Ruby officiel de Mailgun est disponible"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/fr\/#website","url":"https:\/\/www.mailgun.com\/fr\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !","publisher":{"@id":"https:\/\/www.mailgun.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/fr\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/22894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":3,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/22894\/revisions"}],"predecessor-version":[{"id":23279,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/22894\/revisions\/23279"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media?parent=22894"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog_category?post=22894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}