{"id":23091,"date":"2019-07-16T00:00:00","date_gmt":"2019-07-16T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/sdk-oficial-ruby-chegou\/"},"modified":"2026-09-16T01:28:29","modified_gmt":"2026-09-16T01:28:29","slug":"sdk-oficial-ruby-chegou","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/","title":{"rendered":"A gem oficial do Mailgun para Ruby chegou"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hoje, temos a alegria de anunciar que adicionamos o Ruby \u00e0 lista de SDKs oficiais do Mailgun. Assim como em nosso SDK para PHP, inclu\u00edmos alguns utilit\u00e1rios, como Message Builder, Batch Sending e Opt-in Handler, para simplificar tarefas comuns de desenvolvimento. Esperamos colaborar com a comunidade Ruby para tornar o SDK ainda melhor com o tempo.\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\" target=\"_tabs\" rel=\"noopener noreferrer\">Voc\u00ea pode acessar o SDK no Github<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para quem n\u00e3o tem familiaridade com um SDK, vamos primeiro revisar o que \u00e9 necess\u00e1rio para enviar uma mensagem usando a biblioteca HTTPS padr\u00e3o do Ruby.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hoje, temos a alegria de anunciar que adicionamos o Ruby \u00e0 lista de SDKs oficiais do Mailgun. Assim como em nosso SDK para PHP, inclu\u00edmos alguns utilit\u00e1rios, como Message Builder, Batch Sending e Opt-in Handler, para simplificar tarefas comuns de desenvolvimento. Esperamos colaborar com a comunidade Ruby para tornar o SDK ainda melhor com o tempo.\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\" target=\"_tabs\" rel=\"noopener noreferrer\">Voc\u00ea pode acessar o SDK no Github<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para quem n\u00e3o tem familiaridade com um SDK, vamos primeiro revisar o que \u00e9 necess\u00e1rio para enviar uma mensagem usando a biblioteca HTTPS padr\u00e3o do Ruby.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviando uma mensagem:<\/p>\n\n\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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\n\n<p class=\"wp-block-paragraph\">O exemplo acima enviar\u00e1 uma mensagem usando a API do Mailgun. No entanto, h\u00e1 muito c\u00f3digo ali que, embora importante, \u00e9 complicado e um tanto confuso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com nosso novo SDK, conseguimos reduzir a quantidade de c\u00f3digo necess\u00e1ria para apenas algumas linhas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviando uma mensagem com o SDK do Mailgun para Ruby:<\/p>\n\n\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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\n\n<p class=\"wp-block-paragraph\">Obtendo eventos com o SDK do Mailgun para Ruby:<\/p>\n\n\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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\n\n<p class=\"wp-block-paragraph\">Todas as a\u00e7\u00f5es HTTP retornam um objeto de resposta, que pode ser convertido em um hash ou YAML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Digamos que queremos obter os pr\u00f3ximos 25 resultados usando a mesma consulta. Basta emitir &#8220;next&#8221; no objeto &#8220;mg_events&#8221;. O SDK acompanha os links de pagina\u00e7\u00e3o da Events API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>result = mg_events.next<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aviso: se o conjunto de resultados for menor que o seu limite, n\u00e3o se preocupe. Uma consulta subsequente de &#8220;next&#8221; retornar\u00e1 os pr\u00f3ximos 25 resultados desde a \u00faltima vez que voc\u00ea chamou &#8220;next&#8221; ou &#8220;get&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Message Builder<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A cria\u00e7\u00e3o de uma matriz de par\u00e2metros pode ser dif\u00edcil para algumas implementa\u00e7\u00f5es de c\u00f3digo, por isso inclu\u00edmos uma classe que permite fazer chamadas de m\u00e9todo que constroem automaticamente uma matriz de par\u00e2metros de mensagem formatada corretamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviando uma mensagem com o SDK do Mailgun para Ruby + Message Builder:<\/p>\n\n\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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\n\n<p class=\"wp-block-paragraph\">Para conferir uma lista de todas as fun\u00e7\u00f5es dispon\u00edveis, acesse a\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/blob\/master\/docs\/Messages.md\" target=\"_tabs\" rel=\"noopener noreferrer\">lista no Github<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Batch Message<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m do Message Builder, temos o Batch Message. Essa classe permite compilar uma mensagem e enviar uma mensagem de modelo em lotes para at\u00e9 1.000 destinat\u00e1rios por postagem. O benef\u00edcio de usar essa classe \u00e9 que a contagem de destinat\u00e1rios \u00e9 monitorada e a mensagem \u00e9 enviada automaticamente para o endpoint quando voc\u00ea adiciona o mil\u00e9simo destinat\u00e1rio. Isso significa que voc\u00ea pode compilar sua mensagem e come\u00e7ar a iterar em seu banco de dados. N\u00e3o se preocupe em enviar a mensagem, pois o SDK se encarregar\u00e1 de fazer a postagem na API quando necess\u00e1rio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviando uma mensagem com o SDK do Mailgun para Ruby + Batch Message:<\/p>\n\n\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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\n\n<p class=\"wp-block-paragraph\">Como \u00e9 poss\u00edvel ver, o Batch Message na verdade \u00e9 uma extens\u00e3o do Message Builder. Todas as fun\u00e7\u00f5es dispon\u00edveis no Message Builder tamb\u00e9m est\u00e3o dispon\u00edveis no Batch Message. Confira a\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/tree\/master\/docs\" target=\"_tabs\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o completa no Github<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Opt-In Handler<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Por fim, criamos um manipulador de duplo opt-in simples para ajudar voc\u00ea a gerar links de opt-in exclusivos. O manipulador de opt-in tamb\u00e9m usa o nosso<a href=\"\/?blog_category=free-email-validation-api-for-web-forms\" target=\"_tabs\" rel=\"noopener noreferrer\">\u00a0servi\u00e7o de valida\u00e7\u00e3o de endere\u00e7os<\/a>\u00a0para validar a precis\u00e3o dos endere\u00e7os de e-mail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O fluxo t\u00edpico de uso desta classe seria o seguinte:<br>\n<b>Destinat\u00e1rio solicita cadastro<\/b>\u00a0-&gt; [Validar endere\u00e7o do destinat\u00e1rio] -&gt; [Gerar link de opt-in] -&gt; [Enviar link de opt-in por e-mail ao destinat\u00e1rio]<br>\n<b>Destinat\u00e1rio clica no link de opt-in<\/b>\u00a0-&gt; [Validar link de opt-in] -&gt; [Cadastrar usu\u00e1rio] -&gt; [Enviar confirma\u00e7\u00e3o final]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O ideal \u00e9 usar essa classe para os formul\u00e1rios de assinatura do seu site, portanto voc\u00ea precisar\u00e1 de um servidor web acess\u00edvel pela internet para lidar com o clique no link de valida\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como cada implementa\u00e7\u00e3o ser\u00e1 um tanto \u00fanica, confira a\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/blob\/master\/docs\/OptInHandler.md\" target=\"_tabs\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o do Github<\/a>\u00a0para ver exemplos de uso dessa classe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deixe-nos saber o que voc\u00ea acha. H\u00e1 algo mais que voc\u00ea gostaria de ver no SDK? Ou algo de que voc\u00ea gosta muito. Agradecemos o seu feedback!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bons envios!<\/p>\n\n\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_6ab4f14bdb495d7ec6d71f753064cc7e\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Cadastre-se            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_6ab4f14bdb495d7ec6d71f753064cc7e\">\r\n                \u00c9 f\u00e1cil come\u00e7ar. E \u00e9 gr\u00e1tis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Veja o que voc\u00ea pode alcan\u00e7ar com a melhor plataforma de entrega de e-mail do mundo.<\/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>O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais&#8230;<\/p>\n","protected":false},"author":13,"featured_media":4555,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[22],"class_list":["post-23091","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>O gem oficial do Mailgun para Ruby chegou - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais...\" \/>\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\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"O gem oficial do Mailgun para Ruby chegou - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T01:28:29+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 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/\",\"name\":\"O gem oficial do Mailgun para Ruby chegou - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/#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-16T01:28:29+00:00\",\"description\":\"O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/#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\\\/pt\\\/blog\\\/product\\\/sdk-oficial-ruby-chegou\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"A gem oficial do Mailgun para Ruby chegou\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/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\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"O gem oficial do Mailgun para Ruby chegou - Transactional Email API Service For Developers | Mailgun","description":"O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais...","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\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/","og_locale":"pt_BR","og_type":"article","og_title":"O gem oficial do Mailgun para Ruby chegou - Transactional Email API Service For Developers | Mailgun","og_description":"O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais...","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T01:28:29+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 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/","name":"O gem oficial do Mailgun para Ruby chegou - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/#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-16T01:28:29+00:00","description":"O Ruby foi adicionado \u00e0 nossa lista de SDKs! Quer saber mais sobre como enviar e-mail pelo Mailgun com Ruby? Leia mais...","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/#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\/pt\/blog\/product\/sdk-oficial-ruby-chegou\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"A gem oficial do Mailgun para Ruby chegou"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/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\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/23091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/23091\/revisions"}],"predecessor-version":[{"id":23092,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/23091\/revisions\/23092"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=23091"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=23091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}