mirror of
https://github.com/discourse/discourse.git
synced 2024-12-30 17:23:43 +08:00
48d13cb231
Our old group SMTP SSL option was a checkbox, but this was not ideal because there are actually 3 different ways SSL can be used when sending SMTP: * None * SSL/TLS * STARTTLS We got around this before with specific overrides for Gmail, but it's not flexible enough and now people want to use other providers. It's best to be clear, though it is a technical detail. We provide a way to test the SMTP settings before saving them so there should be little chance of messing this up. This commit also converts GroupEmailSettings to a glimmer component.
77 lines
2.7 KiB
Ruby
77 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class GroupSmtpMailer < ActionMailer::Base
|
|
include Email::BuildEmailHelper
|
|
|
|
def send_mail(from_group, to_address, post, cc_addresses: nil, bcc_addresses: nil)
|
|
raise "SMTP is disabled" if !SiteSetting.enable_smtp
|
|
|
|
op_incoming_email = post.topic.first_post.incoming_email
|
|
recipient_user = User.find_by_email(to_address, primary: true)
|
|
|
|
delivery_options = {
|
|
address: from_group.smtp_server,
|
|
port: from_group.smtp_port,
|
|
domain: from_group.email_username_domain,
|
|
user_name: from_group.email_username,
|
|
password: from_group.email_password,
|
|
# NOTE: Might be better at some point to store this authentication method in the database
|
|
# against the group.
|
|
authentication: SmtpProviderOverrides.authentication_override(from_group.smtp_server),
|
|
enable_starttls_auto: from_group.smtp_ssl_mode == Group.smtp_ssl_modes[:starttls],
|
|
enable_ssl: from_group.smtp_ssl_mode == Group.smtp_ssl_modes[:ssl_tls],
|
|
return_response: true,
|
|
open_timeout: GlobalSetting.group_smtp_open_timeout,
|
|
read_timeout: GlobalSetting.group_smtp_read_timeout,
|
|
}
|
|
|
|
group_name = from_group.name_full_preferred
|
|
|
|
build_email(
|
|
to_address,
|
|
message: post.raw,
|
|
url: post.url(without_slug: SiteSetting.private_email?),
|
|
post_id: post.id,
|
|
topic_id: post.topic_id,
|
|
context: "",
|
|
username: post.user.username,
|
|
group_name: group_name,
|
|
allow_reply_by_email: true,
|
|
only_reply_by_email: true,
|
|
use_from_address_for_reply_to: SiteSetting.enable_smtp && from_group.smtp_enabled?,
|
|
private_reply: post.topic.private_message?,
|
|
participants: UserNotifications.participants(post, recipient_user, reveal_staged_email: true),
|
|
include_respond_instructions: true,
|
|
template: "user_notifications.user_posted_pm",
|
|
use_topic_title_subject: true,
|
|
topic_title: op_incoming_email&.subject || post.topic.title,
|
|
add_re_to_subject: !post.is_first_post?,
|
|
locale: SiteSetting.default_locale,
|
|
delivery_method_options: delivery_options,
|
|
from: from_group.smtp_from_address,
|
|
from_alias: I18n.t("email_from_without_site", group_name: group_name),
|
|
html_override: html_override(post),
|
|
cc: cc_addresses,
|
|
bcc: bcc_addresses,
|
|
)
|
|
end
|
|
|
|
private
|
|
|
|
def html_override(post)
|
|
UserNotificationRenderer.render(
|
|
template: "email/notification",
|
|
format: :html,
|
|
locals: {
|
|
context_posts: nil,
|
|
reached_limit: nil,
|
|
post: post,
|
|
in_reply_to_post: nil,
|
|
classes: Rtl.new(nil).css_class,
|
|
first_footer_classes: "",
|
|
reply_above_line: true,
|
|
},
|
|
)
|
|
end
|
|
end
|