Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate ActionMailbox #8049

Draft
wants to merge 2 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/mailboxes/application_mailbox.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class ApplicationMailbox < ActionMailbox::Base

Check warning on line 1 in app/mailboxes/application_mailbox.rb

View workflow job for this annotation

GitHub Actions / build

[rubocop] reported by reviewdog 🐶 Missing top-level documentation comment for `class ApplicationMailbox`. Raw Output: app/mailboxes/application_mailbox.rb:1:1: C: Style/Documentation: Missing top-level documentation comment for `class ApplicationMailbox`.
routing all: :request
end
11 changes: 11 additions & 0 deletions app/mailboxes/request_mailbox.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class RequestMailbox < ApplicationMailbox

Check warning on line 1 in app/mailboxes/request_mailbox.rb

View workflow job for this annotation

GitHub Actions / build

[rubocop] reported by reviewdog 🐶 Missing top-level documentation comment for `class RequestMailbox`. Raw Output: app/mailboxes/request_mailbox.rb:1:1: C: Style/Documentation: Missing top-level documentation comment for `class RequestMailbox`.
def process
mail = MailHandler.mail_from_raw_email(inbound_email.source)

RequestMailer.new.receive(
mail,
inbound_email.source,
inbound_email.origin&.to_sym
)
end
end
6 changes: 4 additions & 2 deletions app/mailers/request_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -210,8 +210,10 @@ def self.receive(raw_email, source = :mailin)
unless logger.nil?
logger.debug "Received mail from #{source}:\n #{raw_email}"
end
mail = MailHandler.mail_from_raw_email(raw_email)
new.receive(mail, raw_email, source)

ActionMailbox::InboundEmail.create_and_extract_message_id!(
raw_email, origin: source
)
end

# Find which info requests the email is for
Expand Down
4 changes: 3 additions & 1 deletion config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
# require "action_mailbox/engine"
require "action_mailbox/engine"
require "action_text/engine"
require "action_view/railtie"
# require "action_cable/engine"
Expand Down Expand Up @@ -101,5 +101,7 @@ class Application < Rails::Application

# Allow the generation of full URLs in emails
config.action_mailer.default_url_options = { host: AlaveteliConfiguration.domain }

config.action_mailbox.storage_service = :inbound_emails
end
end
2 changes: 2 additions & 0 deletions config/sidekiq.yml-example
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ production:
- default
- xapian
- low
- action_mailbox_routing
- action_mailbox_incineration

:limits:
xapian: 1
Expand Down
19 changes: 19 additions & 0 deletions config/storage.yml-example
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,25 @@
# project: ''
# bucket: ''

## Inbound Emails ##

inbound_emails_disk: &inbound_emails_disk
service: Disk
root: <%= Rails.root.join('storage/inbound_emails') %>

inbound_emails_production: &inbound_emails_production
<<: *inbound_emails_disk

inbound_emails_development: &inbound_emails_development
<<: *inbound_emails_disk

inbound_emails_test: &inbound_emails_test
service: Disk
root: <%= Rails.root.join('tmp/storage/inbound_emails') %>

inbound_emails:
<<: *inbound_emails_<%= Rails.env %>

## Raw Emails ##

raw_emails_disk: &raw_emails_disk
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# This migration comes from action_mailbox (originally 20180917164000)
class CreateActionMailboxTables < ActiveRecord::Migration[6.0]
def change
create_table :action_mailbox_inbound_emails do |t|
t.integer :status, default: 0, null: false
t.string :message_id, null: false
t.string :message_checksum, null: false

t.timestamps

t.index [ :message_id, :message_checksum ], name: "index_action_mailbox_inbound_emails_uniqueness", unique: true

Check warning on line 11 in db/migrate/20231214125336_create_action_mailbox_tables.action_mailbox.rb

View workflow job for this annotation

GitHub Actions / build

[rubocop] reported by reviewdog 🐶 Do not use space inside array brackets. Raw Output: db/migrate/20231214125336_create_action_mailbox_tables.action_mailbox.rb:11:16: C: Layout/SpaceInsideArrayLiteralBrackets: Do not use space inside array brackets.

Check warning on line 11 in db/migrate/20231214125336_create_action_mailbox_tables.action_mailbox.rb

View workflow job for this annotation

GitHub Actions / build

[rubocop] reported by reviewdog 🐶 Do not use space inside array brackets. Raw Output: db/migrate/20231214125336_create_action_mailbox_tables.action_mailbox.rb:11:47: C: Layout/SpaceInsideArrayLiteralBrackets: Do not use space inside array brackets.

Check warning on line 11 in db/migrate/20231214125336_create_action_mailbox_tables.action_mailbox.rb

View workflow job for this annotation

GitHub Actions / build

[rubocop] reported by reviewdog 🐶 Line is too long. [118/80] (https://rubystyle.guide#max-line-length) Raw Output: db/migrate/20231214125336_create_action_mailbox_tables.action_mailbox.rb:11:81: C: Layout/LineLength: Line is too long. [118/80] (https://rubystyle.guide#max-line-length)
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddOriginToActionMailboxInboundEmails < ActiveRecord::Migration[7.0]
def change
add_column :action_mailbox_inbound_emails, :origin, :string
end
end
9 changes: 9 additions & 0 deletions doc/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Highlighted Features

* Integrate ActionMailbox for better inbound email processing (Graeme Porteous)
* Add basic Citation searching in admin UI (Gareth Rees)
* Improve citations admin to allow title and description updates (Graeme
Porteous)
Expand Down Expand Up @@ -109,6 +110,14 @@
DAEMON=puma.service`. For detailed instructions, refer to [the
documentation](https://alaveteli.org/docs/installing/cron_and_daemons/#puma).

* _Required:_ Please update your `config/storage.yml` file to include a
production configuration for `inbound_emails`. See
`config/storage.yml-example` as an example.

* _Required:_ Please update your `config/sidekiq.yml` file to include the
`action_mailbox_routing` and `action_mailbox_incineration` queues. See
`config/sidekiq.yml-example` as an example.

* _Optional:_ Bodies with not many requests will automatically get tagged
`not_many_requests` as they are updated. If you want to automatically tag them
all in one go, run the following from the app root directory:
Expand Down
5 changes: 5 additions & 0 deletions spec/mailboxes/request_mailbox_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require 'spec_helper'

RSpec.describe RequestMailbox, type: :mailbox do
pending "add some examples to (or delete) #{__FILE__}"
end
7 changes: 0 additions & 7 deletions spec/script/mailin_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,4 @@ def mailin_test(email_filename)
expect(r.status).to eq(0)
expect(r.out).to eq("")
end

# Destroy the incoming message so that it doesn't affect other tests
after do
ir = info_requests(:other_request)
incoming_message = ir.incoming_messages[0]
incoming_message.destroy
end
end
5 changes: 4 additions & 1 deletion spec/support/email_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ def receive_incoming_mail(email_name_or_string, **kargs)
content = load_file_fixture(email_name_or_string) || email_name_or_string
content = gsub_addresses(content.dup, **kargs)
content = ::Mail::Utilities.binary_unsafe_to_crlf(content)
RequestMailer.receive(content)

ActionMailbox::InboundEmail.create_and_extract_message_id!(
content, origin: :mailin, status: :processing
)&.route
end

def get_fixture_mail(filename, email_to = nil, email_from = nil)
Expand Down
Loading