|
||
---|---|---|
bin | ||
config | ||
private | ||
public | ||
src | ||
templates | ||
.env | ||
.gitignore | ||
.php-version | ||
README.md | ||
composer.json | ||
symfony.lock |
README.md
Mail RSS
This application allows you to transform emails into an RSS feed without connecting to a mailbox.
Installation
Requirements:
- PHP >= 8.0
- Symfony requirements
- MySQL, PostgreSQL or SQLite
- Mailparse module (php-mailparse)
$ git clone https://gitnet.fr/deblan/mail-rss.git
$ cd mail-rss
$ cp .env env.local
$ composer install
Populate .env.local
:
APP_ENV
:prod
ordev
DATABASE_URL
: read the documentationAPP_DEFAULT_URI
: URI of the application (without trailing slash)
Be sure that the webserver can read/write private/
, var/
and migrations/
.
$ php bin/console -e dev doctrine:migrations:diff
$ php bin/console -e dev doctrine:migrations:exe --up DoctrineMigrations\\VersionXXXXXXXXXXXXX
And read the doc to publish a symfony app: https://symfony.com/doc/5.3/deployment.html
Usage
Use case: you want to create a feed of a newsletter named "Foo Bar".
$ sudo mkdir /var/lib/mailrss
$ sudo chmod 0770 /var/lib/mailrss
$ sudo chown you-web-user:nogroup
Add an alias into your mailserver:
# /etc/aliases
mailrss-foobar: "| > /var/lib/mailrss/foobar-$(date +%s) && chmod o+rw /var/lib/mailrss/foobar-$(date +%s)"
Then run $ sudo newaliases
.
Add a mailing in the app:
$ php bin/console mailing:new "Fo Bar"
# Oops, you made a mistake in the label, let's fix it
$ php bin/console mailing:list
$ php bin/console mailing:rename xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx "Foo bar"
With php bin/console mailing:list --feed
, you retrieve the URL of the feed.
In case of you want to delete the mailing:
$ php bin/console mailing:delete xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Finally, create a script run in a cron:
#!/bin/sh
cd "/path/to/app"
find /var/lib/mailrss -name "foobar-*" | while read MAIL_FILE; do
MAILING_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
php bin/console mail:import "$MAILING_ID" -f "$MAIL_FILE" && rm "$MAIL_FILE"
done
You also can import a mail using stdin:
$ php bin/console mail:import "$MAILING_ID" < "$MAIL_FILE"
$ command | php bin/console mail:import "$MAILING_ID"
The feed can be published therefore accessible via the home page:
$ php bin/console mailing:publish xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# php bin/console mailing:new "Foo bar" --public
# php bin/console mailing:new "Foo bar" -p
…and it can be private:
$ php bin/console mailing:unpublish xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
If you want to create another feed then:
- Create an aliase
- Create a mailing
- Update your script run in the cron
- Get the URI using
mailing:list