# mail2deck
Provides an "email in" solution for the Nextcloud Deck app
# 🚀 A. For users
Follow the above steps to add a new card from email.
* Deck Bot is the user who will create the cards and it will be set up by your nextcloud admin.
* In this tutorial email address for Deck Bot will be: bot@ncserver.com
## 1) Assign Deck Bot to the board.
Deck Bot must be assigned and must have edit permission inside the board.
## 2) Mail subject & content
Let's assume you want to add a card with title "Update website logo" on board "Website" and stack "To do".
You can do this in two ways.
### 2.1: Set stack and board in the email subject
Here's how the email subject should look like:
Update website logo b-'website' s-'to do'
* *You can use single or double quotes.*
* *Case-insensitive for board and stack respectively.*
### 2.2: Set the board in the email address
At the end of the email address prefix (before @) add "+website"
Example: bot+website@ncserver.com
* *If board has multiple words e.g. "some project"
, you'll have to send the email to bot+some+project@ncserver.com
*
In this case, if you don't specify the stack in the email subject, the card will be added in the first stack (if it exists).
Note:
* Email content will be card description
* You can add attachments in the email and those will be integrated in the created card
### 2.3: Specify assignee
Here's how the email subject should look like:
`Update website logo b-'website' s-'to do' u-'bob'`
* *You can use single or double quotes.*
* *Case-insensitive for board, stack and user respectively.*
### 2.4: Specify due date
You can use the optional parameter `d-` to add a due date to a card.
Here's how the email subject should look like if you want to set a due date to the card:
`Update website logo b-'website' s-'to do' u-'bob' d-'2022-08-22T19:29:30+00:00'`
* *You can use single or double quotes.*
# ⚙️ B. For NextCloud admins to setup
## Requirements
This app requires php-curl, php-mbstring ,php-imap and some sort of imap server (e.g. Postfix with Courier).
## NC new user
Create a new user from User Management on your NC server, which shall to function as a bot to post cards received as mail. We chose to call it *deckbot*, but you can call it whatever you want.
__Note__: that you have to give *deckbot* permissions on each board you want to add new cards from email.
## Configure Email
### Option 1 - Set up Postfix for incoming email
You can setup Posfix mail server folowing the instructions on [Posfix setup](https://docs.gitlab.com/ee/administration/reply_by_email_postfix_setup.html), and after that add "+" delimiter (which separates the user from the board name in the email address) using the command:
```
sudo postconf -e "recipient_delimiter = +"
```
### Option 2 - Use an existing email server
This could be any hosted email service. The only requirement is that you can connect to it via the IMAP protocol.
*Please note this option may not be as flexible as a self-hosted server. For example your email service may not support the "+"delimiter for directing messages to a specific board.*
## Download and install
### Bare-metal installation
If using a self-hosted Postfix server, clone this repository into the home directory of the *incoming* user. If not self-hosting, you may need to create a new user on your system and adjust the commands in future steps to match that username.
```
su - incoming
git clone https://github.com/newroco/mail2deck.git mail2deck
```
Create config.php file and edit it for your needs:
```
cd /home/incoming/mail2deck
cp config.example.php config.php
sudo vim config.php
```
*You can refer to https://www.php.net/manual/en/function.imap-open.php for setting the value of MAIL_SERVER_FLAGS*
#### Add a cronjob to run mail2deck.
```
sudo crontab -u incoming -e
```
Add the following line in the opened file (in this example, it runs every 5 minutes):
*/5 * * * * /usr/bin/php /home/incoming/mail2deck/index.php >/dev/null 2>&1
### Docker installation
Clone and edit the config.example.php you find in this repository and move it as config.php
```
git clone https://github.com/newroco/mail2deck.git mail2deck
cd mail2deck
cp config.example.php config.php
nano config.php
```
Build your image locally
```
docker build -t mail2deck:latest .
```
Run the docker image mapping the config.json as volume
```
docker run -d --name mail2deck mail2deck:latest
```
Edit your crontab
```
crontab -e
```
And add this line
```
*/5 * * * * /usr/bin/docker start mail2deck
```
## Finish
Now __mail2deck__ will add new cards every five minutes if new emails are received.