Skip to main content

Instant Mailing List Manager for Support Centers

Project description

Introduction

Amane is an instant mailing list manager. Its basic idea has come from QuickML (https://github.com/masui/QuickML) but it’s not the same. QuickML is a common easy-to-use mailing list manager, but Amane has been developed to manage requests by email. So Amane is a kind of ticket management system like Redmine.

Difference between QuickML and Amane

  • Mail destination to create a new mailing list

    • QuickML: the first mail account will be used for further posts.

    • Amane: it has a specific mail account to create the new one. When a mail received, a new mail account will be created and used.

  • On Amane, you can define staff members to register new mailing lists automatically. They can’t be removed via member-removing mails.

  • Amane supports multi-tenancy. Each tenant has a mail account to create mailing lists, subject prefix, staff members, various message templates.

  • On Amane, each post will have a system message as an attachment. It can contain basic mailing-list usage and a list of members.

Difference between Redmine and Amane

  • Redmine is web-based, but Amane is mail-based.

  • Redmine users can customize ticket status, but Amane users cannot.

  • Redmine users can define importance of tickets, but Amane users cannot.

  • Redmine users can define ticket workflows, but Amane users cannot.

How to use Amane

Creating a new ticket

Send a mail to the specific mail address (e.g. ask@example.com *1) to create new one. Amane will create a new mailing list with its own mail address (e.g. ml-000001@example.com) and forward the initial mail to members including addresses at To:, Cc: and From: except *1.

Making a new post

Send a mail to the mailing list address (e.g. ml-000001@example.com).

Register new members

Send a mail with new addresses as Cc: to the mailing list address.

Unregister members

Send a mail with empty Subject: and addresses to be removed as Cc: to the mailing list address.

Closing the ticket

Send a mail with “Subject: close” to the mailing list address.

How to install Amane

Run commands below:

# yum install mongodb-server
# pip install amane

How to configure Amane

Amane has 2 confiugration files.

Amane confiugration file (/etc/amane/amane.conf)

A YAML file like below:

db_name: amane
db_url: mongodb://localhost/
relay_host: localhost
relay_port: 25
listen_address: 192.168.0.1
listen_port: 25
log_file: /var/log/amane.log
domain: example.com
  • db_url, db_name … URI and DB name of MongoDB

  • relay_host, relay_port … IP address and port number of the external SMTP server (relay host) for sending posts

  • listen_address, listen_port …IP address and port number that amane_smptd will listen

  • log_file … Path to a log file used by Amane commands

  • domain … Domain name of the mail addresses amane_smtpd will handle

Tenant confiugration file

A YAML file like below:

admins:
- staff1@staff.example.com
- staff2@staff.example.com
charset: iso-2022-jp
ml_name_format: ml-%06d
new_ml_account: ask
days_to_close: 7
days_to_orphan: 7
readme_msg: |
  Please send posts to {{ ml_address }}.
  To register new members: send a post with their mail addresses as Cc:
  To unregister members: send a post with their mail addresses as Cc: and empty Subject:
  To close a mailing list: send a post with "Subject: close"
  Current members (except staffs):
  {{ members | join('\r\n') }}
welcome_msg: |
  {{ mailfrom }} has created a new ticket. Please send further posts to {{ ml_address }}.
  To register new members: send a post with their mail addresses as Cc:
  To unregister members: send a post with their mail addresses as Cc: and empty Subject:
  To close a mailing list: send a post with "Subject: close"
  Current members (except staffs):
  {{ members | join('\r\n') }}
add_msg: |
  {{ mailfrom }} has registered members below:
  {{ cc | join('\r\n') }}
  To register new members: send a post with their mail addresses as Cc:
  To unregister members: send a post with their mail addresses as Cc: and empty Subject:
  To close a mailing list: send a post with "Subject: close"
  Current members (except staffs):
  {{ members | join('\r\n') }}
remove_msg: |
  {{ mailfrom }} has unregistered members below:
  {{ cc | join('\r\n') }}
  Current members and staffs only can register them again.
  To register new members: send a post with their mail addresses as Cc:
  To unregister members: send a post with their mail addresses as Cc: and empty Subject:
  To close a mailing list: send a post with "Subject: close"
  Current members (except staffs):
  {{ members | join('\r\n') }}
goodbye_msg: |
  {{ mailfrom }} has closed this ticket. Please send a post {{ new_ml_address }} for a new ticket.
  Current members (except staffs):
  {{ members | join('\r\n') }}
reopen_msg: |
  {{ mailfrom }} has reopened this ticket.
  To register new members: send a post with their mail addresses as Cc:
  To unregister members: send a post with their mail addresses as Cc: and empty Subject:
  To close a mailing list: send a post with "Subject: close"
  Current members (except staffs):
  {{ members | join('\r\n') }}
report_subject: Daily status report
report_msg: |
  Today's status:

  New Tickets
  ===========
  {% for m in new -%}
  - ml_name: {{ m.ml_name }} subject: {{ m.subject }}
    created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
  {% endfor %}

  Open Tickets
  ============
  {% for m in open -%}
  - ml_name: {{ m.ml_name }} subject: {{ m.subject }}
    created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
  {% endfor %}

  Orphaned Tickets
  ================
  {% for m in orphaned -%}
  - ml_name: {{ m.ml_name }} subject: {{ m.subject }}
    created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
  {% endfor %}

  Recently Closed Tickets
  =======================
  {% for m in closed -%}
  - ml_name: {{ m.ml_name }} subject: {{ m.subject }}
    created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
  {% endfor %}
orphaned_subject: This ticket will be closed soon
orphaned_msg: |
  This message was sent automatically.
  This ticket will be closed 7 days later if no post is sent.
closed_subject: This ticket was closed
closed_msg: |
  This message was sent automatically.
  This ticket was closed because it was inactive in the past week.
  Please send a post to {{ new_ml_address }} for a new ticket.
  • admins … List of staff’s mail addresses

  • charset … Default character set of the message body. For example: us-ascii

  • ml_name_format … Format of newly created mailing list account. For example, “ml-%06d” will cause a mail address like “ml-000001@<domain>”.

  • new_ml_account … A mail account for creating new mailing lists

  • days_to_orphan … Days from the last post that the system will change the status of open ticket as “orphaned”

  • days_to_close … Days that the system will close “orphaned” tickets

  • welcome_msg … Template of the attached text file for the new tickets

  • readme_msg … Template of the attached text file for the usual posts

  • remove_msg … Template of the attached text file for the posts removing members

  • reopen_msg … Template of the attached text file for the reopened tickets

  • goodbye_msg … Template of the attached text file for the posts closing tickets

  • report_subject, report_msg … Subject and message template of daily status reports for staffs

  • orphaned_subject, orphaned_msg … Subject and message template of notification mails on making tickets orphaned automatically

  • closed_subject, closed_msg … Subject and message template of notification mails on making tickets closed automatically

You can register a new tenant to the DB like below:

# amanectl tenant create <tenant_name> --yamlfile <tenant_configuration_file>

To modify tenant configuration

  1. Using a modified tenant configuration file:

    # amanectl tenant update <tenant_name> --yamlfile <tenant_configuration_file>
  2. Using command line options:

    # amanectl tenant update <tenant_name> <option> <new-value> [<option> <new-value> ...]

How to start the service

Run amane_smtpd like below:

# amane_smtpd &

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page