{"id":1765,"date":"2017-09-13T04:37:00","date_gmt":"2017-09-13T04:37:00","guid":{"rendered":"https:\/\/www.gmass.co\/blog\/?p=1765"},"modified":"2017-09-13T04:37:00","modified_gmt":"2018-07-11T06:34:34","slug":"upgrading-mimekit-broke-our-email-address-parser","status":"publish","type":"post","link":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/","title":{"rendered":"Upgrading MimeKit broke our email address parser"},"content":{"rendered":"<p><em>This article is intended for software developers or those interested in the code behind GMass.<\/em><\/p>\n<p>GMass is written mostly in <strong>C#<\/strong> and <strong>JavaScript<\/strong>, and the C# backend makes heavy use of a popular email parsing component called <a href=\"http:\/\/www.mimekit.net\/\">MimeKit<\/a>. In face, MimeKit, has become so popular that <a href=\"https:\/\/www.infoq.com\/news\/2017\/04\/MailKit-MimeKit-Official\">Microsoft is now recommending that developers use it as the standard<\/a> instead of Microsoft&#8217;s own\u00a0SmtpClient library.<\/p>\n<p>Over the weekend, we updated some of the software components that GMass is built on in preparation for a big feature launch, and in doing so, we <strong>updated MimeKit from version 1.12 to the latest release 1.18<\/strong>. That upgrade unfortunately broke some of our email address validation code, and many users\u00a0saw a &#8220;token offset&#8221;\u00a0error as a result.<\/p>\n<p>Here&#8217;s what happened. Previously, in version 1.12, the following scenarios would pass without throwing an exception:<\/p>\n<figure id=\"attachment_1767\" aria-describedby=\"caption-attachment-1767\" style=\"width: 720px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1.gif\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-1767\" src=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif\" alt=\"MimeKit Sample 1\" width=\"720\" height=\"388\" srcset=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif 1024w, https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-300x162.gif 300w, https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-768x414.gif 768w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><figcaption id=\"caption-attachment-1767\" class=\"wp-caption-text\">MimeKit Code Sample: These scenarios pass, and no exception is thrown.<\/figcaption><\/figure>\n<p>After updating to version 1.18, the\u00a0top two of the three scenarios do throw an exception:<\/p>\n<figure id=\"attachment_1768\" aria-describedby=\"caption-attachment-1768\" style=\"width: 720px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-2.gif\" data-rel=\"lightbox-image-1\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-1768\" src=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-2-1024x418.gif\" alt=\"MimeKit Sample 2\" width=\"720\" height=\"294\" srcset=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-2-1024x418.gif 1024w, https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-2-300x122.gif 300w, https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-2-768x314.gif 768w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><figcaption id=\"caption-attachment-1768\" class=\"wp-caption-text\">MimeKit Code Sample: After updating to version 1.18, these throw a parsing exception.<\/figcaption><\/figure>\n<p>The impact on GMass is such that if you&#8217;re connecting to a Google Sheets spreadsheet, and your column containing email addresses has a bad data value\u00a0that is an invalid email address, such as &#8220;test@test.com;test@test.com&#8221;, whereas before our code would handle this appropriately and eventually filter the bad entry out, now all of a sudden, our code was throwing an exception.<\/p>\n<p>Making matters more complex was that the MimeKit <strong>TryParse<\/strong> didn&#8217;t always catch a string that could not be converted into a <strong>MimeKit.MailboxAddress<\/strong> object. For example:<\/p>\n<figure id=\"attachment_1770\" aria-describedby=\"caption-attachment-1770\" style=\"width: 720px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-3.gif\" data-rel=\"lightbox-image-2\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-1770\" src=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-3-1024x626.gif\" alt=\"MimeKit Sample 3\" width=\"720\" height=\"440\" srcset=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-3-1024x626.gif 1024w, https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-3-300x183.gif 300w, https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-3-768x469.gif 768w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><figcaption id=\"caption-attachment-1770\" class=\"wp-caption-text\">MimeKit Code Sample: TryParse returns true, but the string still can&#8217;t be converted to a MailboxAddress object.<\/figcaption><\/figure>\n<p>In the above samples, <strong>TryParse<\/strong> returns <strong>false<\/strong> for &#8220;test@test.com;test@test.com&#8221; but returns <strong>true<\/strong> for &#8220;test&lt;test@test.com&gt;&#8221;. It returns <strong>true<\/strong> for the latter because it assumes that the part outside the angle brackets is the <strong>Name<\/strong>, and so <strong>Name=test<\/strong> and<strong> Address=test@test.com<\/strong>. Our code though attempts to create a <strong>MailboxAddress<\/strong> object\u00a0from the whole string, and in this case, the parse into <strong>Name<\/strong> and <strong>Address<\/strong> doesn&#8217;t happen, as the constructor assumes that the entire string represents just the <strong>Address<\/strong> portion of the object.<\/p>\n<p>We did check the\u00a0<a href=\"https:\/\/github.com\/jstedfast\/MimeKit\/blob\/master\/ReleaseNotes.md\">Release Notes for MimeKit<\/a> before deploying the update, but there was nothing indicating the change in email parsing rules. Still however, we are eternally grateful to <a href=\"https:\/\/twitter.com\/jstedfast\"><strong>Jeffrey Stedfast<\/strong><\/a> for building and maintaining the <strong>MimeKit<\/strong> library for the .NET framework. Without it, my job as a software developer parsing and assembling email messages would be far more difficult.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article is intended for software developers or those interested in the code behind GMass. GMass is written mostly in C# and JavaScript, and the C# backend makes\u2026<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4260,26],"tags":[],"class_list":["post-1765","post","type-post","status-publish","format-standard","hentry","category-bugs","category-gmass"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\r\n<title>Upgrading MimeKit broke our email address parser<\/title>\r\n<meta name=\"description\" content=\"GMass is written in C# and JavaScript and makes heavy use of a C# component called MimeKit. We recently upgraded to version 1.18, and it broke our code.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Upgrading MimeKit broke our email address parser\" \/>\r\n<meta property=\"og:description\" content=\"GMass is written in C# and JavaScript and makes heavy use of a C# component called MimeKit. We recently upgraded to version 1.18, and it broke our code.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/\" \/>\r\n<meta property=\"og:site_name\" content=\"GMass Blog\" \/>\r\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/GmailMailMerge\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2017-09-13T04:37:00+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2018-07-11T06:34:34+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif\" \/>\r\n<meta name=\"author\" content=\"Ajay Goel\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@PartTimeSnob\" \/>\r\n<meta name=\"twitter:site\" content=\"@GMassForGmail\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ajay Goel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/\"},\"author\":{\"name\":\"Ajay Goel\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/#\\\/schema\\\/person\\\/b5fa74f8765b860701158fd77162fff8\"},\"headline\":\"Upgrading MimeKit broke our email address parser\",\"datePublished\":\"2017-09-13T04:37:00+00:00\",\"dateModified\":\"2018-07-11T06:34:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/\"},\"wordCount\":471,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/MimeKit-Code-1-1024x552.gif\",\"articleSection\":[\"Bugs\",\"GMass\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/\",\"url\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/\",\"name\":\"Upgrading MimeKit broke our email address parser\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/MimeKit-Code-1-1024x552.gif\",\"datePublished\":\"2017-09-13T04:37:00+00:00\",\"dateModified\":\"2018-07-11T06:34:34+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/#\\\/schema\\\/person\\\/b5fa74f8765b860701158fd77162fff8\"},\"description\":\"GMass is written in C# and JavaScript and makes heavy use of a C# component called MimeKit. We recently upgraded to version 1.18, and it broke our code.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/MimeKit-Code-1-1024x552.gif\",\"contentUrl\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/MimeKit-Code-1-1024x552.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/upgrading-mimekit-broke-our-email-address-parser\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upgrading MimeKit broke our email address parser\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/\",\"name\":\"GMass Blog\",\"description\":\"Tips and tricks for sending mail merge and mass email campaigns directly from Gmail\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/#\\\/schema\\\/person\\\/b5fa74f8765b860701158fd77162fff8\",\"name\":\"Ajay Goel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f3a70af05bbabe47925150d5a1320540e801b78055a74da20658fc97cd0706a2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f3a70af05bbabe47925150d5a1320540e801b78055a74da20658fc97cd0706a2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f3a70af05bbabe47925150d5a1320540e801b78055a74da20658fc97cd0706a2?s=96&d=mm&r=g\",\"caption\":\"Ajay Goel\"},\"description\":\"Ajay is the founder of GMass and has been developing email sending software for 20 years.\",\"sameAs\":[\"https:\\\/\\\/twitter.com\\\/PartTimeSnob\",\"https:\\\/\\\/x.com\\\/PartTimeSnob\"],\"url\":\"https:\\\/\\\/www.gmass.co\\\/blog\\\/author\\\/ajay-goel\\\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Upgrading MimeKit broke our email address parser","description":"GMass is written in C# and JavaScript and makes heavy use of a C# component called MimeKit. We recently upgraded to version 1.18, and it broke our code.","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.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/","og_locale":"en_US","og_type":"article","og_title":"Upgrading MimeKit broke our email address parser","og_description":"GMass is written in C# and JavaScript and makes heavy use of a C# component called MimeKit. We recently upgraded to version 1.18, and it broke our code.","og_url":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/","og_site_name":"GMass Blog","article_publisher":"https:\/\/www.facebook.com\/GmailMailMerge\/","article_published_time":"2017-09-13T04:37:00+00:00","article_modified_time":"2018-07-11T06:34:34+00:00","og_image":[{"url":"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif","type":"","width":"","height":""}],"author":"Ajay Goel","twitter_card":"summary_large_image","twitter_creator":"@PartTimeSnob","twitter_site":"@GMassForGmail","twitter_misc":{"Written by":"Ajay Goel","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#article","isPartOf":{"@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/"},"author":{"name":"Ajay Goel","@id":"https:\/\/www.gmass.co\/blog\/#\/schema\/person\/b5fa74f8765b860701158fd77162fff8"},"headline":"Upgrading MimeKit broke our email address parser","datePublished":"2017-09-13T04:37:00+00:00","dateModified":"2018-07-11T06:34:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/"},"wordCount":471,"commentCount":1,"image":{"@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#primaryimage"},"thumbnailUrl":"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif","articleSection":["Bugs","GMass"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/","url":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/","name":"Upgrading MimeKit broke our email address parser","isPartOf":{"@id":"https:\/\/www.gmass.co\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#primaryimage"},"image":{"@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#primaryimage"},"thumbnailUrl":"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif","datePublished":"2017-09-13T04:37:00+00:00","dateModified":"2018-07-11T06:34:34+00:00","author":{"@id":"https:\/\/www.gmass.co\/blog\/#\/schema\/person\/b5fa74f8765b860701158fd77162fff8"},"description":"GMass is written in C# and JavaScript and makes heavy use of a C# component called MimeKit. We recently upgraded to version 1.18, and it broke our code.","breadcrumb":{"@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#primaryimage","url":"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif","contentUrl":"https:\/\/www.gmass.co\/blog\/wp-content\/uploads\/2017\/09\/MimeKit-Code-1-1024x552.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/www.gmass.co\/blog\/upgrading-mimekit-broke-our-email-address-parser\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.gmass.co\/blog\/"},{"@type":"ListItem","position":2,"name":"Upgrading MimeKit broke our email address parser"}]},{"@type":"WebSite","@id":"https:\/\/www.gmass.co\/blog\/#website","url":"https:\/\/www.gmass.co\/blog\/","name":"GMass Blog","description":"Tips and tricks for sending mail merge and mass email campaigns directly from Gmail","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.gmass.co\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.gmass.co\/blog\/#\/schema\/person\/b5fa74f8765b860701158fd77162fff8","name":"Ajay Goel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f3a70af05bbabe47925150d5a1320540e801b78055a74da20658fc97cd0706a2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f3a70af05bbabe47925150d5a1320540e801b78055a74da20658fc97cd0706a2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f3a70af05bbabe47925150d5a1320540e801b78055a74da20658fc97cd0706a2?s=96&d=mm&r=g","caption":"Ajay Goel"},"description":"Ajay is the founder of GMass and has been developing email sending software for 20 years.","sameAs":["https:\/\/twitter.com\/PartTimeSnob","https:\/\/x.com\/PartTimeSnob"],"url":"https:\/\/www.gmass.co\/blog\/author\/ajay-goel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/posts\/1765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/comments?post=1765"}],"version-history":[{"count":5,"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/posts\/1765\/revisions"}],"predecessor-version":[{"id":1773,"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/posts\/1765\/revisions\/1773"}],"wp:attachment":[{"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/media?parent=1765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/categories?post=1765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gmass.co\/blog\/wp-json\/wp\/v2\/tags?post=1765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}