[#114] SMTP deps and config.
authorIvan Tashkinov <ivantashkinov@gmail.com>
Mon, 10 Dec 2018 17:20:50 +0000 (20:20 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Wed, 12 Dec 2018 14:01:34 +0000 (17:01 +0300)
config/config.exs
config/prod.exs
lib/pleroma/emails/mailer.ex [new file with mode: 0644]
mix.exs
mix.lock

index 1401b0a3dadabe90c276c04b97df163aee154c11..410b3c618d84b81d6478ce131cc43f5de456417a 100644 (file)
@@ -101,6 +101,8 @@ config :pleroma, :instance,
   finmoji_enabled: true,
   mrf_transparency: true
 
+config :pleroma, Pleroma.Mailer, adapter: Swoosh.Adapters.Local
+
 config :pleroma, :markup,
   # XXX - unfortunately, inline images must be enabled by default right now, because
   # of custom emoji.  Issue #275 discusses defanging that somehow.
index d0cfd1ac2f895ce7cea4905e74542a67e72f0efd..e281a4a03a6a8be35f234d058fbfd5bb2c64fd36 100644 (file)
@@ -17,6 +17,47 @@ config :pleroma, Pleroma.Web.Endpoint,
   http: [port: 4000],
   protocol: "http"
 
+# Supported adapters: https://github.com/swoosh/swoosh#adapters
+mailer_settings =
+  case String.downcase(System.get_env("PLEROMA_SWOOSH_ADAPTER") || "") do
+    "mailgun" ->
+      [
+        adapter: Swoosh.Adapters.Mailgun,
+        api_key: System.get_env("PLEROMA_MAILGUN_API_KEY"),
+        domain: System.get_env("PLEROMA_MAILGUN_DOMAIN")
+      ]
+
+    "mandrill" ->
+      [
+        adapter: Swoosh.Adapters.Mandrill,
+        api_key: System.get_env("PLEROMA_MANDRILL_API_KEY")
+      ]
+
+    "sendgrid" ->
+      [
+        adapter: Swoosh.Adapters.Sendgrid,
+        api_key: System.get_env("PLEROMA_SENDGRID_API_KEY")
+      ]
+
+    "smtp" ->
+      [
+        adapter: Swoosh.Adapters.SMTP,
+        relay: System.get_env("PLEROMA_SMTP_RELAY"),
+        username: System.get_env("PLEROMA_SMTP_USERNAME"),
+        password: System.get_env("PLEROMA_SMTP_PASSWORD"),
+        port: System.get_env("PLEROMA_SMTP_PORT") || 1025,
+        ssl: true,
+        tls: :always,
+        auth: :always,
+        retries: 3
+      ]
+
+    _ ->
+      [adapter: Swoosh.Adapters.Local]
+  end
+
+config :pleroma, Pleroma.Mailer, mailer_settings
+
 # Do not print debug messages in production
 config :logger, level: :info
 
diff --git a/lib/pleroma/emails/mailer.ex b/lib/pleroma/emails/mailer.ex
new file mode 100644 (file)
index 0000000..14ed32e
--- /dev/null
@@ -0,0 +1,3 @@
+defmodule Pleroma.Mailer do
+  use Swoosh.Mailer, otp_app: :pleroma
+end
diff --git a/mix.exs b/mix.exs
index b5bcd027fb16d300d5108d07137bee3318064d59..0fb40e07b11387b98ae161f5d83ddb939d6d2d5d 100644 (file)
--- a/mix.exs
+++ b/mix.exs
@@ -75,7 +75,9 @@ defmodule Pleroma.Mixfile do
        git: "https://github.com/msantos/crypt", ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"},
       {:cors_plug, "~> 1.5"},
       {:ex_doc, "> 0.18.3 and < 0.20.0", only: :dev, runtime: false},
-      {:web_push_encryption, "~> 0.2.1"}
+      {:web_push_encryption, "~> 0.2.1"},
+      {:swoosh, "~> 0.20"},
+      {:gen_smtp, "~> 0.13"}
     ]
   end
 
index ff8e9fdcaabf50eeeefb593c9442e0030358b6b1..d9ae9a83b22ddf0ae6050244f0dd7ed03684fc4d 100644 (file)
--- a/mix.lock
+++ b/mix.lock
@@ -20,6 +20,7 @@
   "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.1", "9e09366e77f25d3d88c5393824e613344631be8db0d1839faca49686e99b6704", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm"},
   "ex_doc": {:hex, :ex_doc, "0.19.1", "519bb9c19526ca51d326c060cb1778d4a9056b190086a8c6c115828eaccea6cf", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.7", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},
   "ex_machina": {:hex, :ex_machina, "2.2.0", "fec496331e04fc2db2a1a24fe317c12c0c4a50d2beb8ebb3531ed1f0d84be0ed", [:mix], [{:ecto, "~> 2.1", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"},
+  "gen_smtp": {:hex, :gen_smtp, "0.13.0", "11f08504c4bdd831dc520b8f84a1dce5ce624474a797394e7aafd3c29f5dcd25", [:rebar3], [], "hexpm"},
   "gettext": {:hex, :gettext, "0.15.0", "40a2b8ce33a80ced7727e36768499fc9286881c43ebafccae6bab731e2b2b8ce", [:mix], [], "hexpm"},
   "hackney": {:hex, :hackney, "1.13.0", "24edc8cd2b28e1c652593833862435c80661834f6c9344e84b6a2255e7aeef03", [:rebar3], [{:certifi, "2.3.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.2", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
   "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"},
@@ -49,6 +50,7 @@
   "postgrex": {:hex, :postgrex, "0.13.5", "3d931aba29363e1443da167a4b12f06dcd171103c424de15e5f3fc2ba3e6d9c5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"},
   "ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"},
   "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
+  "swoosh": {:hex, :swoosh, "0.20.0", "9a6c13822c9815993c03b6f8fccc370fcffb3c158d9754f67b1fdee6b3a5d928", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.12", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm"},
   "tesla": {:hex, :tesla, "1.2.1", "864783cc27f71dd8c8969163704752476cec0f3a51eb3b06393b3971dc9733ff", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm"},
   "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},
   "tzdata": {:hex, :tzdata, "0.5.17", "50793e3d85af49736701da1a040c415c97dc1caf6464112fd9bd18f425d3053b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},