Project

messengerr

0.0
The project is in a healthy, maintained state
Interactive CLI that renders {{placeholder}} messages against a CSV contact list and dispatches through pluggable services scoped by delivery method (email, sms).
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 13.0
~> 3.13
~> 3.23

Runtime

~> 0.2
~> 3.3
~> 0.8
~> 1.25
~> 2.6
 Project Readme

messengerr

Send templated email and SMS to a CSV contact list, safely, from your terminal.

Write one message with {{placeholders}}, point messengerr at a CSV, and it validates the contacts, shows you exactly what will go out, sends through your provider, and keeps a record of every result.

Documentation: jalappeno-apps.github.io/messengerr

Install

Requires Ruby 3.2 or newer.

gem install messengerr

Quick start

messengerr credentials setup postmark   # or clicksend; keys are verified live, then stored encrypted
messengerr send --dry-run               # walk the wizard and preview, sending nothing
messengerr send                         # preview, confirm, send

Every wizard question also has a flag, so a send can be one command. Preview it anywhere with --dry-run, then run the same command without it in a terminal:

messengerr send --method email --csv contacts.csv --contact email --map name=name \
  --message "Hi {{name}}, your invoice is ready." --subject "Invoice for {{name}}" --dry-run

A real send is refused unless a person is at a terminal (so an automated shell can prepare and preview, but not send).

Given a CSV like

name,email,plan
Ann,ann@example.com,Pro
Bob,bob@example.com,Team

and the message Hi {{name}}, your {{plan}} invoice is ready., the preview shows:

--- Preview (2 messages) ---
To: ann@example.com
Subject: Invoice for Ann
Body: Hi Ann, your Pro invoice is ready.
...

Why it is safe to point at a real list

  • Preview first. You see the count and the first rendered messages, then confirm. --dry-run sends nothing.
  • Bad data is surfaced, not sent. Invalid contacts are listed by row. A malformed or empty placeholder aborts the run instead of going out as literal text.
  • See the real thing. HTML emails (--html letter.html) are written to a preview file you can open in a browser before you confirm. Values from the CSV are HTML-escaped.
  • A record of every result. Each outcome is appended to a ledger as it happens, so a crash or Ctrl-C never loses track of who was messaged.
  • Resume without guessing. --resume skips recipients already sent. Failures that might already have been delivered are marked uncertain and flagged before you retry.

Integrations

Integration Delivers
Postmark email
ClickSend SMS

New providers follow a small contract. See Writing an integration.

Good to know

messengerr sends plain-text messages (typed as one line, or multi-line from a file) and HTML email from a file, with no attachments, and does not track delivery. It adds no unsubscribe links and does not check consent: laws such as CAN-SPAM, GDPR/PECR and the TCPA are the sender's responsibility. Credentials are stored in an encrypted file under ~/.config/messengerr, with the key beside it by default, and gem uninstall does not remove them. Read Limitations and Credentials before a large send.

Contributing

Bug reports and pull requests are welcome. Start with CONTRIBUTING.md and STYLE.md.

License

Released under the MIT License.

Maintained by Daiwick. Questions and enquiries: developers@daiwick.com. Bugs and feature requests: GitHub issues. Security reports: see SECURITY.md.