{"id":2087,"date":"2018-03-19T07:00:06","date_gmt":"2018-03-19T01:30:06","guid":{"rendered":"http:\/\/www.upnxtblog.com\/?p=2087"},"modified":"2018-03-04T19:44:42","modified_gmt":"2018-03-04T14:14:42","slug":"go-guerrilla-lightweight-smtp-server","status":"publish","type":"post","link":"https:\/\/www.upnxtblog.com\/index.php\/2018\/03\/19\/go-guerrilla-lightweight-smtp-server\/","title":{"rendered":"Go-Guerrilla lightweight SMTP server"},"content":{"rendered":"<div class='booster-block booster-read-block'><\/div><p><a href=\"https:\/\/github.com\/flashmob\/go-guerrilla\" target=\"_blank\" rel=\"noopener\">Go-Guerrilla<\/a> is a lightweight SMTP server written in Go, made for receiving large volumes of mail. It started as a project for GuerrillaMail.com which processes millions of emails every day, and needed a daemon with less bloat &amp; written in a more memory-safe language that can take advantage of modern multi-core architectures.<\/p>\n<p>The purpose of this daemon is to grab the email, save it, and disconnect as quickly as possible, essentially performing the services of a Mail Transfer Agent (MTA) without the sending functionality.<\/p>\n<p>The software also includes a modular backend implementation, which can extend the email processing functionality to whatever needs you may require.<\/p>\n<p>To be used as a package in your Go project, or as a stand-alone daemon by running the <code>guerrillad<\/code> binary.<\/p>\n<p>Supports MySQL and Redis out-of-the-box, with many other vendor provided\u00a0<em>processors<\/em>, such as\u00a0<a href=\"https:\/\/github.com\/flashmob\/maildir-processor\" target=\"_blank\" rel=\"noopener\">MailDir<\/a>\u00a0and even\u00a0<a href=\"https:\/\/github.com\/flashmob\/fastcgi-processor\" target=\"_blank\" rel=\"noopener\">FastCGI<\/a>!<\/p>\n<figure style=\"width: 220px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-src=\"https:\/\/i0.wp.com\/github.com\/flashmob\/go-guerrilla\/raw\/master\/GoGuerrilla.png?resize=220%2C288&#038;ssl=1\" alt=\"Go-Guerrilla SMTP Project\" width=\"220\" height=\"288\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 220px; --smush-placeholder-aspect-ratio: 220\/288;\" \/><figcaption class=\"wp-caption-text\">Image &#8211; Go-Guerrilla SMTP Project<\/figcaption><\/figure>\n<p><strong>Key Features :<\/strong><\/p>\n<ul>\n<li>Multi-server. Can spawn multiple servers, all sharing the same backend for saving email.<\/li>\n<li>Config hot-reloading. Add\/Remove\/Enable\/Disable servers without restarting. Reload TLS configuration, change most other settings on the fly.<\/li>\n<li>Graceful shutdown: Minimise loss of email if you need to shutdown\/restart.<\/li>\n<li>Be a gentleman to the garbage collector: resources are pooled &amp; recycled where possible.<\/li>\n<li>Modular\u00a0Backend system<\/li>\n<li>Modern TLS support (STARTTLS or SMTPS).<\/li>\n<li>Can be\u00a0<a href=\"https:\/\/github.com\/flashmob\/go-guerrilla\/wiki\/Using-as-a-package\" target=\"_blank\" rel=\"noopener\">used as a package<\/a>\u00a0in your Go project. Get started in just a few lines of code!<\/li>\n<li><a href=\"https:\/\/github.com\/flashmob\/go-guerrilla\/wiki\/Fuzz-testing\" target=\"_blank\" rel=\"noopener\">Fuzz tested<\/a>.\u00a0<a href=\"https:\/\/travis-ci.org\/flashmob\/go-guerrilla\" rel=\"nofollow noopener\" target=\"_blank\">Auto-tested<\/a>. Battle Tested.<\/li>\n<li>Arranged as workers running in parallel, using a producer\/consumer type structure, taking advantage of Go&#8217;s channels and go-routines.<\/li>\n<li>Modular\u00a0backend system\u00a0structured using a\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Decorator_pattern\" rel=\"nofollow noopener\" target=\"_blank\">decorator-like pattern<\/a>\u00a0which allows the chaining of components (a.k.a.\u00a0<em>Processors<\/em>) via the config.<\/li>\n<li>Different ways for processing \/ delivering email: Supports MySQL and Redis out-of-the box, many other vendor provided processors available.<\/li>\n<\/ul>\n<p><strong>Resources<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/flashmob\/go-guerrilla\/wiki\/Using-as-a-package\" target=\"_blank\" rel=\"noopener\">Official documentation<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/flashmob\/go-guerrilla\/wiki\/Running-from-command-line#guerrillad-command\" target=\"_blank\" rel=\"noopener\">Command<\/a> reference<\/li>\n<\/ul>\n<p><em><strong>Like this post? Don\u2019t forget to share it!<\/strong><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go-Guerrilla is a lightweight SMTP server written in Go, made for receiving large volumes of mail. It started as a project for GuerrillaMail.com which processes millions of emails every day, and needed a daemon with less bloat &amp; written in a more memory-safe language that can take advantage of modern multi-core architectures. The purpose of [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2091,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[225],"class_list":["post-2087","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-new-tools","tag-go-guerrilla"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/03\/GoGuerrilla.png?fit=297%2C389&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9fbQS-xF","jetpack-related-posts":[{"id":2080,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/03\/14\/5-best-disposable-email-services\/","url_meta":{"origin":2087,"position":0},"title":"5 BEST Disposable email services","author":"Karthik","date":"March 14, 2018","format":false,"excerpt":"As you're already aware, every time you come across something useful on the internet and you plan to grab it, they want your email address in return. And once you give them your email address you are done. They will spam your mailbox and you will regret what you have\u2026","rel":"","context":"In &quot;Regain Your Privacy&quot;","block_context":{"text":"Regain Your Privacy","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/privacy\/"},"img":{"alt_text":"Stop Spam","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/03\/road-sign-464655_1920.jpg?fit=1200%2C848&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/03\/road-sign-464655_1920.jpg?fit=1200%2C848&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/03\/road-sign-464655_1920.jpg?fit=1200%2C848&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/03\/road-sign-464655_1920.jpg?fit=1200%2C848&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/03\/road-sign-464655_1920.jpg?fit=1200%2C848&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1863,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/02\/02\/build-docker-images-using-jenkins\/","url_meta":{"origin":2087,"position":1},"title":"Docker tutorial : Build Docker images using Jenkins","author":"Karthik","date":"February 2, 2018","format":false,"excerpt":"Docker as we know, is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. Today we are going to check how to configure Jenkins to build Docker Images based on a Dockerfile. Below are the steps\u2026","rel":"","context":"In &quot;Docker Guides&quot;","block_context":{"text":"Docker Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/docker\/"},"img":{"alt_text":"Docker ps command to review status of the containers","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/01\/jen1.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/01\/jen1.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/01\/jen1.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/01\/jen1.png?resize=700%2C400 2x"},"classes":[]},{"id":3048,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/11\/26\/kaniko-tutorial-build-container-images-without-docker-daemon\/","url_meta":{"origin":2087,"position":2},"title":"Kaniko Tutorial : Build container images without Docker Daemon","author":"Karthik","date":"November 26, 2018","format":false,"excerpt":"Google has recently introduced\u00a0Kaniko, an open-source tool for building container images from a Dockerfile even without privileged root access. If you've noticed, Docker daemon always runs as the root user. It actually binds to a Unix socket instead of a TCP port. By default, Unix socket is owned by the\u2026","rel":"","context":"In &quot;Docker Guides&quot;","block_context":{"text":"Docker Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/docker\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/10\/google_chrome-logo.png?fit=800%2C473&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/10\/google_chrome-logo.png?fit=800%2C473&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/10\/google_chrome-logo.png?fit=800%2C473&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/10\/google_chrome-logo.png?fit=800%2C473&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2913,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/09\/12\/how-to-install-docker-on-ubuntu\/","url_meta":{"origin":2087,"position":3},"title":"How to install Docker on Ubuntu ?","author":"Karthik","date":"September 12, 2018","format":false,"excerpt":"Docker as we know, is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. In this post, we are going to take look at how to install Docker on Ubuntu 18 LTS. Requisites Ubuntu OS requirements:\u2026","rel":"","context":"In &quot;Docker Guides&quot;","block_context":{"text":"Docker Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/docker\/"},"img":{"alt_text":"Uninstall Docker","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock1.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock1.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock1.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock1.png?resize=700%2C400 2x"},"classes":[]},{"id":3897,"url":"https:\/\/www.upnxtblog.com\/index.php\/2019\/06\/12\/how-to-run-java-application-as-service-on-linux\/","url_meta":{"origin":2087,"position":4},"title":"How to run Java application as service on Linux","author":"Karthik","date":"June 12, 2019","format":false,"excerpt":"In this post, we check out how to run Java application as service on Linux and also start automatically if and when the system restarts. Before we move on to the article, let us understand what is systemd .It is part of Linux kernel that provides the System and Service\u2026","rel":"","context":"In &quot;Best Tools\/Open Source Libs&quot;","block_context":{"text":"Best Tools\/Open Source Libs","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/new-tools\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/06\/1200px-Tux.svg.png?fit=1018%2C1200&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/06\/1200px-Tux.svg.png?fit=1018%2C1200&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/06\/1200px-Tux.svg.png?fit=1018%2C1200&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/06\/1200px-Tux.svg.png?fit=1018%2C1200&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":4831,"url":"https:\/\/www.upnxtblog.com\/index.php\/2020\/01\/29\/take-look-at-podman-red-hats-daemon-less-docker-alternative\/","url_meta":{"origin":2087,"position":5},"title":"Take look at Podman, Red Hat&#8217;s daemon-less Docker Alternative","author":"Karthik","date":"January 29, 2020","format":false,"excerpt":"Podman is a new, open-source, container engine that works seamlessly with containers as well as pods. This project is different because it doesn\u2019t actually depend on a daemon(like Docker), but instead launches containers and pods as child processes. Podman is the CLI tool for interacting with libpod, a library that\u2026","rel":"","context":"In &quot;Docker Guides&quot;","block_context":{"text":"Docker Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/docker\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2020\/01\/podman.jpg?fit=880%2C218&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2020\/01\/podman.jpg?fit=880%2C218&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2020\/01\/podman.jpg?fit=880%2C218&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2020\/01\/podman.jpg?fit=880%2C218&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2087","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/comments?post=2087"}],"version-history":[{"count":7,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2087\/revisions"}],"predecessor-version":[{"id":2127,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2087\/revisions\/2127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/media\/2091"}],"wp:attachment":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/media?parent=2087"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/categories?post=2087"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/tags?post=2087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}