From 0daa667b55fd9b948da643d37ec438e341809369 Mon Sep 17 00:00:00 2001 From: Adam Cooke Date: Mon, 4 Mar 2024 14:24:24 +0000 Subject: [PATCH] feat: support for additional SMTP client options --- config/initializers/smtp.rb | 15 +++++++++++---- doc/config/environment-variables.md | 5 +++++ doc/config/yaml.yml | 10 ++++++++++ lib/postal/config_schema.rb | 25 +++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/config/initializers/smtp.rb b/config/initializers/smtp.rb index f6203959..53f2d003 100644 --- a/config/initializers/smtp.rb +++ b/config/initializers/smtp.rb @@ -2,10 +2,17 @@ require "postal/config" +config = Postal::Config.smtp + ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { - address: Postal::Config.smtp.host, - user_name: Postal::Config.smtp.username, - password: Postal::Config.smtp.password, - port: Postal::Config.smtp.port + address: config.host, + user_name: config.username, + password: config.password, + port: config.port, + authentication: config.authentication_type&.to_sym, + enable_starttls: config.enable_starttls?, + enable_starttls_auto: config.enable_starttls_auto?, + openssl_verify_mode: config.openssl_verify_mode, + ssl: config.ssl? } diff --git a/doc/config/environment-variables.md b/doc/config/environment-variables.md index 540a2de3..57873c04 100644 --- a/doc/config/environment-variables.md +++ b/doc/config/environment-variables.md @@ -70,6 +70,11 @@ This document contains all the environment variables which are available for thi | `SMTP_PORT` | Integer | The port number to send application-level e-mails to | 25 | | `SMTP_USERNAME` | String | The username to use when authentication to the SMTP server | | | `SMTP_PASSWORD` | String | The password to use when authentication to the SMTP server | | +| `SMTP_AUTHENTICATION_TYPE` | String | The type of authentication to use | login | +| `SMTP_ENABLE_STARTTLS` | Boolean | Use STARTTLS when connecting to the SMTP server and fail if unsupported | false | +| `SMTP_ENABLE_STARTTLS_AUTO` | Boolean | Detects if STARTTLS is enabled in the SMTP server and starts to use it | true | +| `SMTP_OPENSSL_VERIFY_MODE` | String | When using TLS, you can set how OpenSSL checks the certificate. Use 'none' for no certificate checking | peer | +| `SMTP_SSL` | Boolean | Use an SSL/TLS connection to the SMTP server (SMTPS) | false | | `SMTP_FROM_NAME` | String | The name to use as the from name outgoing emails from Postal | Postal | | `SMTP_FROM_ADDRESS` | String | The e-mail to use as the from address outgoing emails from Postal | postal@example.com | | `RAILS_ENVIRONMENT` | String | The Rails environment to run the application in | production | diff --git a/doc/config/yaml.yml b/doc/config/yaml.yml index 9da0c78d..82eb582d 100644 --- a/doc/config/yaml.yml +++ b/doc/config/yaml.yml @@ -153,6 +153,16 @@ smtp: username: # The password to use when authentication to the SMTP server password: + # The type of authentication to use + authentication_type: login + # Use STARTTLS when connecting to the SMTP server and fail if unsupported + enable_starttls: false + # Detects if STARTTLS is enabled in the SMTP server and starts to use it + enable_starttls_auto: true + # When using TLS, you can set how OpenSSL checks the certificate. Use 'none' for no certificate checking + openssl_verify_mode: peer + # Use an SSL/TLS connection to the SMTP server (SMTPS) + ssl: false # The name to use as the from name outgoing emails from Postal from_name: Postal # The e-mail to use as the from address outgoing emails from Postal diff --git a/lib/postal/config_schema.rb b/lib/postal/config_schema.rb index 69b4a17e..42a547c5 100644 --- a/lib/postal/config_schema.rb +++ b/lib/postal/config_schema.rb @@ -360,6 +360,31 @@ module Postal description "The password to use when authentication to the SMTP server" end + string :authentication_type do + description "The type of authentication to use" + default "login" + end + + boolean :enable_starttls do + description "Use STARTTLS when connecting to the SMTP server and fail if unsupported" + default false + end + + boolean :enable_starttls_auto do + description "Detects if STARTTLS is enabled in the SMTP server and starts to use it" + default true + end + + string :openssl_verify_mode do + description "When using TLS, you can set how OpenSSL checks the certificate. Use 'none' for no certificate checking" + default "peer" + end + + boolean :ssl do + description "Use an SSL/TLS connection to the SMTP server (SMTPS)" + default false + end + string :from_name do description "The name to use as the from name outgoing emails from Postal" default "Postal"