mirror of
https://github.com/discourse/discourse.git
synced 2025-02-06 11:28:18 +00:00
20fe5eceb8
This commit adds a check that runs regularly as per 2d68e5d942fa9312655d3d5abacf15d8a9fca948 which tests the credentials of groups with SMTP or IMAP enabled. If any issues are found with those credentials a high priority problem is added to the admin dashboard. This commit also formats the admin dashboard differently if there are high priority problems, bringing them to the top of the list and highlighting them. The problem will be cleared if the issue is fixed before the next problem check, or if the group's settings are updated with a valid credential.
61 lines
1.7 KiB
Ruby
61 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
##
|
|
# If group SMTP or IMAP has been configured, we want to make sure the
|
|
# credentials are always valid otherwise emails will not be sending out
|
|
# from group inboxes. This check is run as part of scheduled AdminDashboardData
|
|
# problem checks, and if any credentials have issues they will show up on
|
|
# the admin dashboard as a high priority issue.
|
|
class GroupEmailCredentialsCheck
|
|
def self.run
|
|
errors = []
|
|
|
|
if SiteSetting.enable_smtp
|
|
Group.with_smtp_configured.find_each do |group|
|
|
errors << try_validate(group) do
|
|
EmailSettingsValidator.validate_smtp(
|
|
host: group.smtp_server,
|
|
port: group.smtp_port,
|
|
username: group.email_username,
|
|
password: group.email_password
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
if SiteSetting.enable_imap
|
|
Group.with_imap_configured.find_each do |group|
|
|
errors << try_validate(group) do
|
|
EmailSettingsValidator.validate_imap(
|
|
host: group.smtp_server,
|
|
port: group.smtp_port,
|
|
username: group.email_username,
|
|
password: group.email_password
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
errors.compact
|
|
end
|
|
|
|
def self.try_validate(group, &blk)
|
|
begin
|
|
blk.call
|
|
nil
|
|
rescue *EmailSettingsExceptionHandler::EXPECTED_EXCEPTIONS => err
|
|
{
|
|
group_id: group.id,
|
|
group_name: group.name,
|
|
group_full_name: group.full_name,
|
|
message: EmailSettingsExceptionHandler.friendly_exception_message(err, group.smtp_server)
|
|
}
|
|
rescue => err
|
|
Discourse.warn_exception(
|
|
err, message: "Unexpected error when checking SMTP credentials for group #{group.id} (#{group.name})."
|
|
)
|
|
nil
|
|
end
|
|
end
|
|
end
|