Eddie
2 years ago
10 changed files with 170 additions and 78 deletions
@ -0,0 +1,8 @@
|
||||
EMAIL_SERVER=dein.server.com |
||||
EMAIL_ADDRESS=email@server.com |
||||
EMAIL_USERNAME=username |
||||
EMAIL_PASSWORD=password |
||||
BOT_API=https://deine.nextcloud.de/ocs/v1.php/apps/spreed/api/v1/chat/ |
||||
BOT_USERNAME=botusername |
||||
BOT_PASSWORD=botpassword |
||||
BOT_ROOMTOKEN=28fu49fg |
@ -1,3 +1,48 @@
|
||||
# email_util |
||||
# Maily |
||||
## Inhaltsverzeichnis |
||||
- [Einleitung](#einleitung) |
||||
- [Installation](#installation) |
||||
- [Code Rundown](#codeRundown) |
||||
|
||||
--- |
||||
|
||||
## Einleitung <a name="einleitung"></a> |
||||
Maily wurde entwickelt um auf unseren Email Postfächern automatisch zu antworten und uns darüber zu informieren wer uns geschrieben hat. |
||||
|
||||
Wichtig war auch das Maily neuen Kontakten nur ein mal schreibt. Beim eingebauten Autoresponder unseres Email-Servers konnte man nur eine 'Sperrstunde' einstellen in der automatisch geantwortet wird. Auf alles. Und jeden. Immer. Sogar in einem aktiven Email-Verlauf hätte dieser Autoresponder einfach geantwortet. |
||||
|
||||
Irgendwie sollte Maily uns wissen lassen wann und was sie macht damit wir im Bilde sind. Hier habe ich mich dazu entschieden dass Maily ein kleines 'Chatbot' modul bekommt und uns in Nextcloud-Talk schreibt. Der Vorteil dabei ist das man Maily direkt in den richtigen Channel schreiben lassen kann, so das alle Leute informiert werden die mit dem Postfach arbeiten. |
||||
|
||||
Keiner hat zeit alle 2 Tage Logdaten auf einem Server nachzuschauen. |
||||
## Installation <a name="installation"></a> |
||||
Die installation einer Dev-Umgebung ist relativ straight forward, allerdings sollte beachtet werden das man Maily auf einer `UNIX` Maschine entwickeln sollte. Das interface zwischen Maily und Nextcloud wird mit einem `.sh` Skript ausgeführt der auf Windows nur schwer zum Laufen gebracht werden kann. |
||||
### Step 1 |
||||
Als erstes muss das Repository heruntergeladen werden |
||||
``` |
||||
$ git clone https://git.sommerschein.de/Sommerschein/email_util.git |
||||
``` |
||||
### Step 2 |
||||
Es muss eine `Virtuelle Umgebung` erstellt und die benötigten Module installiert werden. |
||||
``` |
||||
$ python3 -m venv .venv |
||||
``` |
||||
Mit diesem befehl wird eine sperierte version von `Python` im `Projekt` abgelegt, so dass keine Probleme mit neuen Versionen in den Modulen auftreten. |
||||
Dann noch aktivieren: |
||||
``` |
||||
$ source .venv/bin/activate |
||||
``` |
||||
Als nächstes muss die `requirements.txt` Datei installiert werden, damit wir alle Module bereit haben. |
||||
``` |
||||
$ pip install -r requirements.txt |
||||
``` |
||||
### Step 3 |
||||
Die `.env.example` Datei in `.env` umbenennen und anpassen. |
||||
Das `BOT_PASSWORD` wird in der Cloud als `APP-Passwort` eingerichtet. So muss nicht der ganze User übergeben werden. Ausserdem kann der zugriff auf die Dateien begrenzt werden. |
||||
Der `BOT_ROOMTOKEN` ist der `Token` zu dem Raum in dem Maily schreibt. Man findet ihn am Ende der `URL` wen man den gewünschten Raum im Browser öffnet. |
||||
Die `BOT_API` ist immer gleich, hier muss nur die `URL` am anfang auf die gewünschte Cloud angepasst werden |
||||
Die `EMAIL` Variablen sind im grunde standart Login daten zu einem Email Server. |
||||
### Step 4 |
||||
Im grunde sind wir fertig, ab jetzt kann an Maily entwickelt werden. Wenn man den `autoResponder.py` skript ausführt wird Maily angewendet und versucht seinen Job zu machen. |
||||
## Code Rundown <a name="codeRundown"></a> |
||||
Wird angepasst wen 1.0 fertig ist. |
||||
|
||||
Kleies Utility programm für unsere Email verwaltung |
@ -1,29 +1,43 @@
|
||||
import codecs |
||||
from mail_util import checkFor_unkownContacts, sendEmails, jsonAddContacts |
||||
""" |
||||
This file will run Maily. |
||||
It will try to scan for new Contacts and if it found any it will write them an email. |
||||
Also Maily will inform us about any written emails via Nextcloud-Talk |
||||
""" |
||||
import os |
||||
from mail_util import checkFor_unkownContacts, sendEmails, jsonAddContacts, lastExecutionDate_Load, jsonCreateContacts, lastExecutionDate_Safe |
||||
from chatbot import sendMessage |
||||
from config import today, yesterday |
||||
|
||||
#! This function reads the response text-file |
||||
def getResponseText(): |
||||
with open('responses/bookingResponse.txt', 'r') as file: |
||||
data = file.read() |
||||
return data |
||||
|
||||
|
||||
contacts = checkFor_unkownContacts() |
||||
#contacts.append('e.neug@icloud.com') |
||||
responseText = getResponseText() |
||||
print(responseText) |
||||
sendEmails(responseText, contacts) |
||||
jsonAddContacts(contacts) |
||||
lastExecutionDate = lastExecutionDate_Load() |
||||
|
||||
chatTextIntro = f"Hey! ich wurde Heute ({today}) ausgeführt und suche für Gestern({yesterday}) nach neuen Kontakten auf der booking@" |
||||
chatTextAmmount = f"Ich habe {len(contacts)} neue Kontakte gefunden und automatisch geschrieben" |
||||
chatTextNone = f"Ich habe keine neuen Kontakte gefunden" |
||||
chatTextNew = f"Hey! Ich wurde Heute ({today}) ausgeführt. Ich suche nach nicht beantworteten Emails, seit meiner letzten ausführung ({lastExecutionDate})" |
||||
|
||||
sendMessage(chatTextIntro) |
||||
if len(contacts) > 0: |
||||
if os.path.isfile('./contacts.json'): |
||||
contacts = checkFor_unkownContacts() |
||||
sendMessage(chatTextNew) |
||||
if len(contacts) > 0: |
||||
chatTextAmmount = f"Ich habe {len(contacts)} unbeantwortete Emails gefunden und automatisch geantwortet" |
||||
sendMessage(chatTextAmmount) |
||||
for c in contacts: |
||||
sendMessage(c) |
||||
|
||||
else: |
||||
sendEmails(responseText, contacts) |
||||
jsonAddContacts(contacts) |
||||
lastExecutionDate_Safe(str(today)) |
||||
|
||||
|
||||
else: |
||||
sendMessage(chatTextNone) |
||||
else: |
||||
jsonCreateContacts() |
||||
print("I created the Contacts, run me again.") |
||||
|
||||
|
@ -1,5 +1,10 @@
|
||||
""" |
||||
This File will use the 'sender.sh' shell script to send messages to Nextcloud-Talk |
||||
""" |
||||
|
||||
import subprocess |
||||
from config import botAPI, botUsername, botPassword, botRoomToken |
||||
|
||||
def sendMessage(message): |
||||
subprocess.call(['sh','./sender2.sh', message]) |
||||
subprocess.call(['sh','./sender.sh', botAPI, botUsername, botPassword, botRoomToken, message]) |
||||
|
||||
|
@ -1,20 +1,34 @@
|
||||
""" |
||||
This file holds all the important variables used accross this programm |
||||
""" |
||||
|
||||
import os |
||||
from dotenv import load_dotenv |
||||
from datetime import date, timedelta |
||||
|
||||
load_dotenv() |
||||
|
||||
pw = os.getenv('PASSWORD') |
||||
server ="w00e1ce2.kasserver.com" |
||||
username ="booking@sommerschein.de" |
||||
# Setup Email Credentials |
||||
server = os.getenv('EMAIL_SERVER') |
||||
address = os.getenv('EMAIL_ADDRESS') |
||||
username = os.getenv('EMAIL_USERNAME') |
||||
password = os.getenv('EMAIL_PASSWORD') |
||||
|
||||
# Setup Chatbot Credentials |
||||
botAPI = os.getenv('BOT_API') |
||||
botUsername = os.getenv('BOT_USERNAME') |
||||
botPassword = os.getenv('BOT_PASSWORD') |
||||
botRoomToken = os.getenv('BOT_ROOMTOKEN') |
||||
|
||||
# Setup important Times and Formatting them |
||||
today = date.today() |
||||
yesterday = today - timedelta(days=1) |
||||
dateStringToday = today.strftime("%d-%b-%Y") |
||||
dateStringYesterday = yesterday.strftime("%d-%b-%Y") |
||||
|
||||
searchUnawnsered = "UNANSWERED SENTSINCE 01-Sep-2022" |
||||
# Setup Search parameter |
||||
searchUnawnsered = "UNANSWERED SENTSINCE " |
||||
searchAll = 'ALL' |
||||
searchSentsince = 'SENTSINCE 01-Sep-2022' |
||||
searchSentsince = 'SENTSINCE ' |
||||
searchToday = 'SENTON ' + dateStringToday |
||||
searchYesterday = 'SENTON ' + dateStringYesterday |
@ -1,7 +1,9 @@
|
||||
#!/bin/bash |
||||
|
||||
API=https://cloud1.sommerschein.de/ocs/v1.php/apps/spreed/api/v1/chat/xzntzmuh |
||||
LOGIN="Maily:Gtjik-qP48b-y62bC-r8yos-qJT9Y" |
||||
MESSAGE=$1 |
||||
API=$1 |
||||
USERNAME=$2 |
||||
PASSWORD=$3 |
||||
TOKEN=$4 |
||||
MESSAGE=$5 |
||||
|
||||
curl -d '{"token":"xzntzmuh", "message":"'"$MESSAGE"'"}' -H "Content-Type: application/json" -H "Accept:application/json" -H "OCS-APIRequest:true" -u "$LOGIN" $API 2> /dev/null | > /dev/null |
||||
curl -d '{"token":"'"$TOKEN"'", "message":"'"$MESSAGE"'"}' -H "Content-Type: application/json" -H "Accept:application/json" -H "OCS-APIRequest:true" -u "$USERNAME:$PASSWORD" $API$TOKEN 2> /dev/null | > /dev/null |
@ -1,7 +0,0 @@
|
||||
#!/bin/bash |
||||
|
||||
API=https://cloud1.sommerschein.de/ocs/v1.php/apps/spreed/api/v1/chat/onxr79pz |
||||
LOGIN="Maily:Gtjik-qP48b-y62bC-r8yos-qJT9Y" |
||||
MESSAGE=$1 |
||||
|
||||
curl -d '{"token":"onxr79pz", "message":"'"$MESSAGE"'"}' -H "Content-Type: application/json" -H "Accept:application/json" -H "OCS-APIRequest:true" -u "$LOGIN" $API 2> /dev/null | > /dev/null |
Loading…
Reference in new issue