kopia lustrzana https://github.com/newroco/mail2deck
Basic implementation of Dockerfile + fix mail used if userId differ from original sender
rodzic
127b61addf
commit
2d0bfb5b70
|
@ -0,0 +1,13 @@
|
||||||
|
# Ignore everything
|
||||||
|
**
|
||||||
|
|
||||||
|
# Allow files and directories
|
||||||
|
!lib/
|
||||||
|
!docker-utils/
|
||||||
|
!composer*
|
||||||
|
!config*
|
||||||
|
!index.php
|
||||||
|
|
||||||
|
# Ignore unnecessary files inside allowed directories
|
||||||
|
# This should go after the allowed directories
|
||||||
|
docker-utils/test_mail.php
|
|
@ -0,0 +1,48 @@
|
||||||
|
FROM php:alpine3.15 AS builder
|
||||||
|
|
||||||
|
# Install all dependencies required for API calls and mail handling
|
||||||
|
RUN apk add --no-cache git php-curl php-mbstring php-imap php-xml ssmtp gawk
|
||||||
|
|
||||||
|
# Install PHP ext-imap
|
||||||
|
RUN set -eux; \
|
||||||
|
persistentDeps=" \
|
||||||
|
c-client \
|
||||||
|
"; \
|
||||||
|
buildDeps=" \
|
||||||
|
imap-dev \
|
||||||
|
krb5-dev \
|
||||||
|
openssl-dev \
|
||||||
|
"; \
|
||||||
|
apk add --no-cache --virtual .imap-persistent-deps ${persistentDeps}; \
|
||||||
|
apk add --no-cache --virtual .imap-build-deps ${buildDeps}; \
|
||||||
|
\
|
||||||
|
docker-php-ext-configure imap \
|
||||||
|
--with-imap-ssl \
|
||||||
|
--with-kerberos \
|
||||||
|
; \
|
||||||
|
docker-php-ext-install -j$(nproc) imap; \
|
||||||
|
\
|
||||||
|
apk del --no-cache --no-network .imap-build-deps
|
||||||
|
|
||||||
|
# Create a non-root user to own the files and run our server
|
||||||
|
RUN adduser -D -g "Mail2deck" deckbot
|
||||||
|
WORKDIR /home/deckbot/mail2deck
|
||||||
|
|
||||||
|
# Copy scripts
|
||||||
|
# Use the .dockerignore file to control what ends up inside the image!
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN docker-utils/install_composer.sh && \
|
||||||
|
./composer.phar update && \
|
||||||
|
rm docker-utils/install_composer.sh composer.phar
|
||||||
|
|
||||||
|
# Setup SMTP Server
|
||||||
|
RUN docker-utils/configure_smtp.sh && \
|
||||||
|
rm docker-utils/configure_smtp.sh
|
||||||
|
|
||||||
|
# Use our non-root user
|
||||||
|
USER deckbot
|
||||||
|
|
||||||
|
# Run script once
|
||||||
|
CMD ["php", "index.php"]
|
32
README.md
32
README.md
|
@ -50,6 +50,7 @@ sudo postconf -e "recipient_delimiter = +"
|
||||||
This could be any hosted email service. The only requirement is that you can connect to it via the IMAP protocol.
|
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.*
|
*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
|
## 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.<br>
|
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.<br>
|
||||||
```
|
```
|
||||||
su - incoming
|
su - incoming
|
||||||
|
@ -62,12 +63,41 @@ cp config.example.php config.php
|
||||||
sudo vim 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*
|
*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 which will run mail2deck.
|
#### Add a cronjob which will run mail2deck.
|
||||||
```
|
```
|
||||||
sudo crontab -u incoming -e
|
sudo crontab -u incoming -e
|
||||||
```
|
```
|
||||||
Add the following line in the opened file:
|
Add the following line in the opened file:
|
||||||
<code>*/5 * * * * /usr/bin/php /home/incoming/mail2deck/index.php >/dev/null 2>&1</code>
|
<code>*/5 * * * * /usr/bin/php /home/incoming/mail2deck/index.php >/dev/null 2>&1</code>
|
||||||
|
|
||||||
|
### 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
|
## Finish
|
||||||
Now __mail2deck__ will add new cards every five minutes if new emails are received.
|
Now __mail2deck__ will add new cards every five minutes if new emails are received.
|
||||||
|
|
|
@ -104,5 +104,5 @@
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": [],
|
"platform": [],
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.1.0"
|
"plugin-api-version": "2.3.0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ define("NC_PASSWORD", "****");
|
||||||
define("MAIL_SERVER", "localhost"); // server.domain
|
define("MAIL_SERVER", "localhost"); // server.domain
|
||||||
define("MAIL_SERVER_FLAGS", "/novalidate-cert"); // flags needed to connect to server. Refer to https://www.php.net/manual/en/function.imap-open.php for a list of valid flags.
|
define("MAIL_SERVER_FLAGS", "/novalidate-cert"); // flags needed to connect to server. Refer to https://www.php.net/manual/en/function.imap-open.php for a list of valid flags.
|
||||||
define("MAIL_SERVER_PORT", "143");
|
define("MAIL_SERVER_PORT", "143");
|
||||||
|
define("MAIL_SERVER_SMTPPORT", "587"); // port for outgoing smtp server. Actually only used to configure Docker image outgoing SMTP Server
|
||||||
define("MAIL_USER", "incoming");
|
define("MAIL_USER", "incoming");
|
||||||
define("MAIL_PASSWORD", "****");
|
define("MAIL_PASSWORD", "****");
|
||||||
define("DECODE_SPECIAL_CHARACTERS", true); //requires mbstring, if false special characters (like öäüß) won't be displayed correctly
|
define("DECODE_SPECIAL_CHARACTERS", true); //requires mbstring, if false special characters (like öäüß) won't be displayed correctly
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
CONFIG_FILE_PATH="config.php"
|
||||||
|
|
||||||
|
cat > /etc/ssmtp/ssmtp.conf <<EOM
|
||||||
|
root=postmaster
|
||||||
|
mailhub=$(cat "$CONFIG_FILE_PATH" | gawk 'match($0, /"MAIL_SERVER".{3}(.+)"/,a) {print a[1]}'):$(cat "$CONFIG_FILE_PATH" | gawk 'match($0, /"MAIL_SERVER_SMTPPORT".{3}(.+)"/,a) {print a[1]}')
|
||||||
|
FromLineOverride=NO
|
||||||
|
rewriteDomain=$(cat "$CONFIG_FILE_PATH" | gawk 'match($0, /"MAIL_USER".+@(.+)"/,a) {print a[1]}')
|
||||||
|
hostname=$(cat "$CONFIG_FILE_PATH" | gawk 'match($0, /"MAIL_USER".+@(.+)"/,a) {print a[1]}')
|
||||||
|
AuthUser=$(cat "$CONFIG_FILE_PATH" | gawk 'match($0, /"MAIL_USER".{3}(.+)"/,a) {print a[1]}')
|
||||||
|
AuthPass=$(cat "$CONFIG_FILE_PATH" | gawk 'match($0, /"MAIL_PASSWORD".{3}(.+)"/,a) {print a[1]}')
|
||||||
|
UseSTARTTLS=YES
|
||||||
|
EOM
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')"
|
||||||
|
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
||||||
|
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
|
||||||
|
|
||||||
|
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
|
||||||
|
then
|
||||||
|
>&2 echo 'ERROR: Invalid installer checksum'
|
||||||
|
rm composer-setup.php
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
php composer-setup.php --quiet
|
||||||
|
RESULT=$?
|
||||||
|
rm composer-setup.php
|
||||||
|
exit $RESULT
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
// Run it as > php docker-utils/test_mail.php test@example.com
|
||||||
|
|
||||||
|
$to = $argv[1];
|
||||||
|
$subject = 'An issue has been reported!';
|
||||||
|
$message = '<html><head><title>Mail2Deck response</title></head><body><h1>You created a new issue on board XXXXX.</h1><p>Check out this <a href="https://example.com/">link</a> to see your newly created card.</p></body></html>';
|
||||||
|
$headers = array(
|
||||||
|
'From' => 'no-reply@example.com',
|
||||||
|
'MIME-Version' => '1.0',
|
||||||
|
'Content-Type' => 'text/html'
|
||||||
|
);
|
||||||
|
|
||||||
|
mail($to, $subject, $message, $headers);
|
|
@ -98,13 +98,13 @@ if ($emails)
|
||||||
|
|
||||||
$newcard = new DeckClass();
|
$newcard = new DeckClass();
|
||||||
$response = $newcard->addCard($data, $mailSender, $board);
|
$response = $newcard->addCard($data, $mailSender, $board);
|
||||||
$mailSender->userId .= "@{$overview->reply_to[0]->host}";
|
$mailSender->origin .= "{$overview->reply_to[0]->mailbox}@{$overview->reply_to[0]->host}";
|
||||||
|
|
||||||
if(MAIL_NOTIFICATION) {
|
if(MAIL_NOTIFICATION) {
|
||||||
if($response) {
|
if($response) {
|
||||||
$inbox->reply($mailSender->userId, $response);
|
$inbox->reply($mailSender->origin, $response);
|
||||||
} else {
|
} else {
|
||||||
$inbox->reply($mailSender->userId);
|
$inbox->reply($mailSender->origin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!$response) {
|
if(!$response) {
|
||||||
|
|
Ładowanie…
Reference in New Issue