{"id":23663,"date":"2026-09-16T06:17:00","date_gmt":"2026-09-16T06:17:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/the-official-mailgun-ruby-sdk-is-here-2\/"},"modified":"2026-09-16T06:17:00","modified_gmt":"2026-09-16T06:17:00","slug":"the-official-mailgun-ruby-sdk-is-here","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","title":{"rendered":"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hoy nos complace anunciar que hemos a\u00f1adido Ruby a la lista de SDK oficiales de Mailgun. Al igual que en nuestro SDK de PHP, hemos incluido algunas utilidades como Message Builder, el env\u00edo por lotes y Opt-in Handler para simplificar las tareas de desarrollo m\u00e1s comunes. Tenemos muchas ganas de colaborar con la comunidad de Ruby para mejorar el SDK con el tiempo.\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\" target=\"_tabs\" rel=\"noopener noreferrer\">Puedes acceder al SDK en Github<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para quienes no est\u00e9n familiarizados con un SDK, repasemos primero qu\u00e9 hace falta para enviar un mensaje usando la biblioteca HTTPS de Ruby est\u00e1ndar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hoy nos complace anunciar que hemos a\u00f1adido Ruby a la lista de SDK oficiales de Mailgun. Al igual que en nuestro SDK de PHP, hemos incluido algunas utilidades como Message Builder, el env\u00edo por lotes y Opt-in Handler para simplificar las tareas de desarrollo m\u00e1s comunes. Tenemos muchas ganas de colaborar con la comunidad de Ruby para mejorar el SDK con el tiempo.\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\" target=\"_tabs\" rel=\"noopener noreferrer\">Puedes acceder al SDK en Github<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para quienes no est\u00e9n familiarizados con un SDK, repasemos primero qu\u00e9 hace falta para enviar un mensaje usando la biblioteca HTTPS de Ruby est\u00e1ndar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviar un mensaje:<\/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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\">Lo anterior enviar\u00e1 un mensaje utilizando la API de Mailgun. Sin embargo, hay un mont\u00f3n de c\u00f3digo que, aunque es importante, resulta complicado y bastante confuso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con nuestro nuevo SDK, hemos logrado reducir el c\u00f3digo necesario a tan solo unas l\u00edneas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviar un mensaje con el SDK de Ruby de Mailgun:<\/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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\">Obtener eventos con el SDK de Ruby de Mailgun:<\/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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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 las acciones HTTP devuelven un objeto de respuesta, que se puede convertir a hash o YAML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supongamos que queremos obtener los siguientes 25 resultados utilizando la misma consulta. Solo tienes que emitir \u201cnext\u201d en el objeto \u201cmg_events\u201d. El SDK realiza un seguimiento de los enlaces de paginaci\u00f3n de la 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\">Nota: Si el conjunto de resultados es inferior a tu l\u00edmite, no te preocupes. Una consulta posterior de \u201cnext\u201d devolver\u00e1 los siguientes 25 resultados desde la \u00faltima vez que llamaste a \u201cnext\u201d o \u201cget\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Message Builder<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crear un array de par\u00e1metros puede resultar dif\u00edcil para algunas implementaciones de c\u00f3digo, por lo que hemos incluido una clase que te permite hacer llamadas a m\u00e9todos para compilar autom\u00e1ticamente un array de par\u00e1metros de mensajes bien formado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviar un mensaje con el SDK de Ruby de Mailgun y 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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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 ver una lista de todas las funciones disponibles, echa un vistazo a la\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/blob\/master\/docs\/Messages.md\" target=\"_tabs\" rel=\"noopener noreferrer\">lista en Github<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Batch Message<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s de Message Builder, disponemos de Batch Message. Esta clase te permite compilar un mensaje y enviar un mensaje de plantilla por lotes a un m\u00e1ximo de 1000 destinatarios por env\u00edo. La ventaja de usar esta clase es que hace un seguimiento del recuento de destinatarios y enviar\u00e1 autom\u00e1ticamente el mensaje al punto de conexi\u00f3n cuando a\u00f1adas el destinatario n\u00famero 1000. As\u00ed podr\u00e1s compilar tu mensaje y empezar a iterar a trav\u00e9s de tu base de datos. Olv\u00eddate de enviar el mensaje, el SDK se encargar\u00e1 de enviarlo a la API cuando sea necesario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviar un mensaje con el SDK de Ruby de Mailgun y 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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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 puedes comprobar, Batch Message en realidad ampl\u00eda Message Builder. Todas las funciones disponibles en Message Builder lo est\u00e1n en Batch Message. Consulta la\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/tree\/master\/docs\" target=\"_tabs\" rel=\"noopener noreferrer\">documentaci\u00f3n completa en 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 \u00faltimo, hemos compilado un sencillo gestor de opt in doble para ayudarte a generar enlaces de opt in \u00fanicos. El gestor de opt in tambi\u00e9n usa nuestro<a href=\"\/?blog_category=free-email-validation-api-for-web-forms\" target=\"_tabs\" rel=\"noopener noreferrer\">\u00a0servicio de validaci\u00f3n de direcciones<\/a>\u00a0para validar la exactitud de las direcciones de email.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El flujo habitual para usar esta clase ser\u00eda el siguiente:<br>\n<b>El destinatario solicita suscribirse<\/b>\u00a0-&gt; [Validar direcci\u00f3n del destinatario] -&gt; [Generar enlace de opt in] -&gt; [Enviar enlace de opt in al destinatario]<br>\n<b>El destinatario hace clic en el enlace de opt in<\/b>\u00a0-&gt; [Validar enlace de opt in] -&gt; [Suscribir al usuario] -&gt; [Enviar confirmaci\u00f3n final]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo ideal es usar esta clase para los formularios de suscripci\u00f3n de tu sitio web, as\u00ed que necesitar\u00e1s un servidor web con acceso a internet para gestionar el clic en el enlace de validaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dado que cada implementaci\u00f3n ser\u00e1 bastante \u00fanica, consulta la\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-ruby\/blob\/master\/docs\/OptInHandler.md\" target=\"_tabs\" rel=\"noopener noreferrer\">documentaci\u00f3n de Github<\/a>\u00a0para ver ejemplos de uso de esta clase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hacednos saber qu\u00e9 pens\u00e1is. \u00bfHay algo m\u00e1s que te gustar\u00eda ver en el SDK? O algo que te encante. \u00a1Nos encantar\u00eda conocer tu opini\u00f3n!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Feliz env\u00edo!<\/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_a93b2e6acd3109e22ba5d96937a3f6d9\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Reg\u00edstrate            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_a93b2e6acd3109e22ba5d96937a3f6d9\">\r\n                Empezar es facil\u00edsimo. Y gratis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Descubre todo lo que puedes lograr con la mejor plataforma de entrega de emails del 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>\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n&#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-23663","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>La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n...\" \/>\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\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/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=\"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\\\/es\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/\",\"name\":\"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/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\":\"2026-09-16T06:17:00+00:00\",\"description\":\"\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/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\\\/es\\\/blog\\\/product\\\/the-official-mailgun-ruby-sdk-is-here\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/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\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed - Transactional Email API Service For Developers | Mailgun","description":"\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n...","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\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","og_locale":"es_ES","og_type":"article","og_title":"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed - Transactional Email API Service For Developers | Mailgun","og_description":"\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n...","og_url":"https:\/\/www.mailgun.com\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","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\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","url":"https:\/\/www.mailgun.com\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/","name":"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/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":"2026-09-16T06:17:00+00:00","description":"\u00a1Hemos a\u00f1adido Ruby a nuestra lista de SDK! \u00bfQuieres saber m\u00e1s sobre c\u00f3mo enviar emails mediante Mailgun con Ruby? M\u00e1s informaci\u00f3n...","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/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\/es\/blog\/product\/the-official-mailgun-ruby-sdk-is-here\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"La gema de Ruby oficial de Mailgun ya est\u00e1 aqu\u00ed"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/23663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/23663\/revisions"}],"predecessor-version":[{"id":23664,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/23663\/revisions\/23664"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=23663"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=23663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}