diff --git a/script/test_email_settings.rb b/script/test_email_settings.rb new file mode 100644 index 00000000000..fe7fdb54d27 --- /dev/null +++ b/script/test_email_settings.rb @@ -0,0 +1,56 @@ +#!/usr/bin/env ruby + +require 'action_mailer' + +# Make this your email address. Poor example.com gets SO MUCH MAIL +YOUR_EMAIL = "nobody@example.com" + +# Change these to be the same settings as your Discourse environment +DISCOURSE_SMTP_ADDRESS = "smtp.example.com" # (mandatory) +@DISCOURSE_SMTP_PORT = 587 # (optional) +@DISCOURSE_SMTP_USER_NAME = "username" # (optional) +@DISCOURSE_SMTP_PASSWORD = "blah" # (optional) +#@DISCOURSE_SMTP_OPENSSL_VERIFY_MODE = "none" # (optional) none|peer|client_once|fail_if_no_peer_cert + +# Note that DISCOURSE_SMTP_ADDRESS should NOT BE ALLOWED to relay mail to +# YOUR_EMAIL without authentication +MAILFROM = @DISCOURSE_SMTP_USER_NAME || YOUR_EMAIL +MAILTO = YOUR_EMAIL + +### You shouldn't need to change anything below here +$delivery_options = { + user_name: @DISCOURSE_SMTP_USER_NAME || nil, + password: @DISCOURSE_SMTP_PASSWORD || nil, + address: DISCOURSE_SMTP_ADDRESS, + port: @DISCOURSE_SMTP_PORT || nil, + openssl_verify_mode: @DISCOURSE_SMTP_OPENSSL_VERIFY_MODE || nil } + +class EmailTestMailer < ActionMailer::Base + def email_test(mailfrom, mailto) + mail(from: mailfrom, + to: mailto, + body: "Testing email settings", + subject: "Discourse email settings test", + delivery_method_options: $delivery_options) + end +end + +message = EmailTestMailer.email_test(MAILFROM, MAILTO) + +begin + message.deliver() +rescue SocketError => e + print "Delivery failed: "+e.message.strip()+"\n" + print " Is the server hostname correct?\n" +rescue OpenSSL::SSL::SSLError => e + print "Delivery failed: "+e.message.strip()+"\n" + print " You probably need to change the ssl verify mode.\n" +rescue Net::SMTPAuthenticationError => e + print "Delivery failed: "+e.message.strip()+"\n" + print " Check to ensure your username and password are correct.\n" +rescue Net::SMTPFatalError => e + print "Delivery failed: "+e.message.strip()+"\n" + print " Check the above error and fix your settings.\n" +else + print "Successfully delivered.\n" +end