2014-04-16 11:50:15 +08:00
|
|
|
#!/usr/bin/env ruby
|
2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
2014-04-16 11:50:15 +08:00
|
|
|
|
|
|
|
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,
|
2018-12-04 17:48:16 +08:00
|
|
|
password: @DISCOURSE_SMTP_PASSWORD || nil,
|
|
|
|
address: DISCOURSE_SMTP_ADDRESS,
|
|
|
|
port: @DISCOURSE_SMTP_PORT || nil,
|
|
|
|
openssl_verify_mode: @DISCOURSE_SMTP_OPENSSL_VERIFY_MODE || nil,
|
|
|
|
}
|
2014-04-16 11:50:15 +08:00
|
|
|
|
|
|
|
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
|
2014-10-15 15:04:47 +08:00
|
|
|
message.deliver_now()
|
2014-04-16 11:50:15 +08:00
|
|
|
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
|