mirror of
https://github.com/lingble/chatwoot.git
synced 2025-12-04 20:05:22 +00:00
We first added conversation continuity for the live chat widget, and then carried the same logic over to email channels. The problem was that this added a reply+conversationUUID@domain.com as the reply-to for emails, which was unnecessary. For email channels, the reply-to can just be the channel’s own email address. That extra layer made things more complex than it needed to be. In this PR, I’ve cleaned up the config so it’s simpler. The table below shows how it’ll work going forward. --- | Type | From Email | Reply To Email | | -- | -- | -- | | Standard IMAP, SMTP email channel | channel.email | channel.email | | Google OAuth Email channel | channel.email | channel.email | | Microsoft OAuth Email channel | channel.email | channel.email | | Email forwarded to Chatwoot, brought their own SMTP | channel.email | channel.email | | Imap to fetch email, Use Chatwoot's SMTP | channel.email if verified with Chatwoot's SMTP provider. Otherwise account support email | channel.email | | Email forwarded to Chatwoot, Use Chatwoot's SMTP | channel.email if verified with Chatwoot's SMTP provider. Otherwise account support email | channel.email | | -- | -- | -- | | Website Live Chat - Conversation Continuity Inbound Emails enabled| Account Support Email | reply+{conversation-uuid}@{account_domain} | | Website Live Chat - Conversation Continuity Inbound Emails disabled| Account Support Email | Account Support Email | Fixes https://github.com/chatwoot/chatwoot/issues/10614 Fixes https://github.com/chatwoot/chatwoot/issues/10521 Fixes https://github.com/chatwoot/chatwoot/issues/10300 Fixes https://github.com/chatwoot/chatwoot/issues/10091 Fixes https://github.com/chatwoot/chatwoot/issues/4890 Fixes https://github.com/chatwoot/chatwoot/issues/10676 Fixes https://github.com/chatwoot/chatwoot/issues/10756 Fixes https://github.com/chatwoot/chatwoot/issues/11515 Fixes https://github.com/chatwoot/chatwoot/issues/9471 --------- Co-authored-by: Sojan Jose <sojan@pepalo.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
75 lines
2.6 KiB
Ruby
75 lines
2.6 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: channel_email
|
|
#
|
|
# id :bigint not null, primary key
|
|
# email :string not null
|
|
# forward_to_email :string not null
|
|
# imap_address :string default("")
|
|
# imap_enable_ssl :boolean default(TRUE)
|
|
# imap_enabled :boolean default(FALSE)
|
|
# imap_login :string default("")
|
|
# imap_password :string default("")
|
|
# imap_port :integer default(0)
|
|
# provider :string
|
|
# provider_config :jsonb
|
|
# smtp_address :string default("")
|
|
# smtp_authentication :string default("login")
|
|
# smtp_domain :string default("")
|
|
# smtp_enable_ssl_tls :boolean default(FALSE)
|
|
# smtp_enable_starttls_auto :boolean default(TRUE)
|
|
# smtp_enabled :boolean default(FALSE)
|
|
# smtp_login :string default("")
|
|
# smtp_openssl_verify_mode :string default("none")
|
|
# smtp_password :string default("")
|
|
# smtp_port :integer default(0)
|
|
# verified_for_sending :boolean default(FALSE), not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# account_id :integer not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_channel_email_on_email (email) UNIQUE
|
|
# index_channel_email_on_forward_to_email (forward_to_email) UNIQUE
|
|
#
|
|
|
|
class Channel::Email < ApplicationRecord
|
|
include Channelable
|
|
include Reauthorizable
|
|
|
|
AUTHORIZATION_ERROR_THRESHOLD = 10
|
|
|
|
self.table_name = 'channel_email'
|
|
EDITABLE_ATTRS = [:email, :imap_enabled, :imap_login, :imap_password, :imap_address, :imap_port, :imap_enable_ssl,
|
|
:smtp_enabled, :smtp_login, :smtp_password, :smtp_address, :smtp_port, :smtp_domain, :smtp_enable_starttls_auto,
|
|
:smtp_enable_ssl_tls, :smtp_openssl_verify_mode, :smtp_authentication, :provider, :verified_for_sending].freeze
|
|
|
|
validates :email, uniqueness: true
|
|
validates :forward_to_email, uniqueness: true
|
|
|
|
before_validation :ensure_forward_to_email, on: :create
|
|
|
|
def name
|
|
'Email'
|
|
end
|
|
|
|
def microsoft?
|
|
provider == 'microsoft'
|
|
end
|
|
|
|
def google?
|
|
provider == 'google'
|
|
end
|
|
|
|
def legacy_google?
|
|
imap_enabled && imap_address == 'imap.gmail.com'
|
|
end
|
|
|
|
private
|
|
|
|
def ensure_forward_to_email
|
|
self.forward_to_email ||= "#{SecureRandom.hex}@#{account.inbound_email_domain}"
|
|
end
|
|
end
|