Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

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 &
Release History

Release History

This version
History Node

1.0.1

History Node

1.0.0

History Node

0.9.5

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
amane-1.0.1-py2.py3-none-any.whl (40.3 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Jul 4, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting