Repository Analysis

postalserver/postal

📮 A fully featured open source mail delivery platform for incoming & outgoing e-mail

5.5 Low AI signal View on GitHub
5.5
Adjusted Score
5.5
Raw Score
100%
Time Factor
2026-05-29
Last Push
16,583
Stars
Ruby
Language
27,767
Lines of Code
360
Files
125
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 12LOW 113

Pattern Findings

125 matches across 5 categories. Click a row to expand file-level details.

Over-Commented Block84 hits · 84 pts
SeverityFileLineSnippet
LOW.rubocop.yml21# There should always be empty lines inside a class. For example
LOW.rubocop.yml101Lint/BooleanSymbol:
LOWapp/models/user_invite.rb1# frozen_string_literal: true
LOWapp/models/organization_user.rb1# frozen_string_literal: true
LOWapp/models/track_domain.rb1# frozen_string_literal: true
LOWapp/models/credential.rb1# frozen_string_literal: true
LOWapp/models/smtp_endpoint.rb1# frozen_string_literal: true
LOWapp/models/ip_address.rb1# frozen_string_literal: true
LOWapp/models/ip_pool_rule.rb1# frozen_string_literal: true
LOWapp/models/address_endpoint.rb1# frozen_string_literal: true
LOWapp/models/http_endpoint.rb1# frozen_string_literal: true
LOWapp/models/webhook_event.rb1# frozen_string_literal: true
LOWapp/models/worker_role.rb1# frozen_string_literal: true
LOWapp/models/organization.rb1# frozen_string_literal: true
LOWapp/models/route.rb1# frozen_string_literal: true
LOWapp/models/queued_message.rb1# frozen_string_literal: true
LOWapp/models/webhook.rb1# frozen_string_literal: true
LOWapp/models/ip_pool.rb1# frozen_string_literal: true
LOWapp/models/webhook_request.rb1# frozen_string_literal: true
LOWapp/models/domain.rb1# frozen_string_literal: true
LOWapp/models/domain.rb21# dkim_error :string(255)
LOWapp/models/organization_ip_pool.rb1# frozen_string_literal: true
LOWapp/models/scheduled_task.rb1# frozen_string_literal: true
LOWapp/models/server.rb1# frozen_string_literal: true
LOWapp/models/server.rb21# send_limit :integer
LOWapp/models/user.rb1# frozen_string_literal: true
LOWapp/models/additional_route_endpoint.rb1# frozen_string_literal: true
LOWapp/models/concerns/has_locking.rb1# frozen_string_literal: true
LOWapp/senders/smtp_sender.rb161 # Return an array of server hostnames which should receive this message
LOWapp/lib/worker/process.rb1# frozen_string_literal: true
LOWapp/controllers/legacy_api/messages_controller.rb1# frozen_string_literal: true
LOWapp/controllers/legacy_api/base_controller.rb1# frozen_string_literal: true
LOWapp/controllers/legacy_api/send_controller.rb21 #
LOWapp/assets/config/manifest.js1//= link_tree ../images
LOWconfig/locales/en.yml1# Files in the config/locales directory are used for internationalization
LOWconfig/environments/production.rb21 config.public_file_server.enabled = true
LOWconfig/environments/development.rb41
LOWconfig/initializers/application_controller_renderer.rb1# frozen_string_literal: true
LOWconfig/initializers/backtrace_silencers.rb1# frozen_string_literal: true
LOWconfig/initializers/mime_types.rb1# frozen_string_literal: true
LOWconfig/initializers/wrap_parameters.rb1# frozen_string_literal: true
LOWconfig/initializers/assets.rb1# frozen_string_literal: true
LOWconfig/initializers/permissions_policy.rb1# frozen_string_literal: true
LOWconfig/initializers/content_security_policy.rb1# frozen_string_literal: true
LOWconfig/initializers/content_security_policy.rb21# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
LOWconfig/initializers/inflections.rb1# frozen_string_literal: true
LOWconfig/initializers/new_framework_defaults_7_0.rb1# frozen_string_literal: true
LOWconfig/initializers/new_framework_defaults_7_0.rb21# Changing this default means invalidate all encrypted messages generated by
LOWconfig/initializers/new_framework_defaults_7_0.rb41# and asynchronous queries will then be enabled.
LOWconfig/initializers/new_framework_defaults_7_0.rb61# regardless of whether they have a default or not.
LOWconfig/initializers/new_framework_defaults_7_0.rb81#
LOWconfig/initializers/new_framework_defaults_7_0.rb101# and you have no plans to rollback.
LOWconfig/initializers/new_framework_defaults_7_0.rb121#
LOWconfig/initializers/new_framework_defaults_7_0.rb141# See https://guides.rubyonrails.org/configuring.html#config-active-support-disable-to-s-conversion for more information
LOWspec/models/server_spec.rb1# frozen_string_literal: true
LOWspec/models/server_spec.rb21# send_limit :integer
LOWspec/models/queued_message_spec.rb1# frozen_string_literal: true
LOWspec/models/organization_spec.rb1# frozen_string_literal: true
LOWspec/models/domain_spec.rb1# frozen_string_literal: true
LOWspec/models/domain_spec.rb21# spf_error :string(255)
24 more matches not shown…
Self-Referential Comments12 hits · 36 pts
SeverityFileLineSnippet
MEDIUMapp/senders/smtp_sender.rb212 # Create a new result object
MEDIUMapp/lib/smtp_server/server.rb102 # Create a hash to contain a buffer for each client.
MEDIUMconfig/initializers/wrap_parameters.rb5# This file contains settings for ActionController::ParamsWrapper which
MEDIUMconfig/initializers/permissions_policy.rb2# Define an application-wide HTTP permissions policy. For further
MEDIUMconfig/initializers/content_security_policy.rb4# Define an application-wide content security policy.
MEDIUMlib/postal/signer.rb7 # Create a new Signer
MEDIUMlib/postal/message_db/provisioner.rb55 # Create a new table
MEDIUMlib/postal/message_db/message.rb351 # Create a new item in the message queue for this message
MEDIUMlib/postal/message_db/message.rb487 # Create a new link
MEDIUMlib/postal/message_db/database.rb62 # Create a new message with the given attributes. This won't be saved to the database
MEDIUMdb/schema.rb1# This file is auto-generated from the current state of the database. Instead
MEDIUMdb/schema.rb5# This file is the source Rails uses to define your schema when running `bin/rails
Hyper-Verbose Identifiers22 hits · 24 pts
SeverityFileLineSnippet
LOWapp/util/has_prometheus_metrics.rb5 def register_prometheus_counter(name, **kwargs)
LOWapp/util/has_prometheus_metrics.rb10 def register_prometheus_histogram(name, **kwargs)
LOWapp/util/has_prometheus_metrics.rb15 def increment_prometheus_counter(name, labels: {})
LOWapp/util/has_prometheus_metrics.rb22 def observe_prometheus_histogram(name, time, labels: {})
LOWapp/mailers/app_mailer.rb18 def server_send_limit_approaching(server)
LOWapp/mailers/app_mailer.rb23 def server_send_limit_exceeded(server)
LOWapp/models/server.rb223 def authenticated_domain_for_address(address)
LOWapp/models/server.rb251 def find_authenticated_domain_from_headers(headers)
LOWapp/models/concerns/has_authentication.rb29 def authenticate_with_previous_password_first(unencrypted_password)
LOWapp/senders/smtp_sender.rb87 def send_message_to_smtp_client(raw_message, mail_from, rcpt_to, retry_on_connection_error: true)
LOWapp/senders/smtp_sender.rb139 def determine_mail_from_for_message(message)
LOWapp/senders/smtp_sender.rb155 def determine_rcpt_to_for_message(message)
LOWapp/controllers/application_controller.rb50 def redirect_to_with_return_to(url, *args)
LOWapp/helpers/application_helper.rb28 def domain_options_for_select(server, selected_domain = nil, options = {})
LOWapp/helpers/application_helper.rb53 def endpoint_options_for_select(server, selected_value = nil, options = {})
LOWspec/helpers/general_helpers.rb5 def create_plain_text_message(server, text, to = "test@example.com", override_attributes = {})
LOWlib/tracking_middleware.rb61 def dispatch_redirect_request(request, server_token, link_token)
LOWlib/tracking_middleware.rb101 def get_message_db_from_server_token(token)
LOWlib/postal/config_schema.rb596 def substitute_config_file_root(string)
LOWlib/postal/config.rb144 def change_database_connection_pool_size(new_size)
LOWlib/postal/message_db/provisioner.rb114 def remove_raw_tables_older_than(max_age = 30)
LOWlib/postal/message_db/provisioner.rb147 def remove_raw_tables_until_less_than_size(size)
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippet
LOWapp/lib/smtp_server/server.rb171 # Increment prometheus
LOWconfig/environments/production.rb58 # Set this to true and configure the email server for immediate delivery to raise delivery errors.
LOWlib/postal/message_db/message.rb529 # Return the result
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippet
LOWspec/models/domain_spec.rb210 "admin@example.com",
LOWspec/models/user_spec.rb95 expect(user.name).to eq "John Doe"
LOWspec/factories/organization_factory.rb28 name { "Acme Inc" }
LOWspec/lib/smtp_server/client/data_spec.rb64 expect(client.headers["from"]).to eq ["test@test.com"]