Replace mail send with ntfy
This commit is contained in:
parent
a76f6bfb0c
commit
222fc32816
5 changed files with 33 additions and 69 deletions
|
@ -10,7 +10,7 @@ RUN go mod download
|
|||
|
||||
COPY *.go ./
|
||||
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /docker-mail-reminder
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /main
|
||||
|
||||
# Run the tests in the container
|
||||
FROM build-stage AS run-test-stage
|
||||
|
@ -21,10 +21,10 @@ FROM gcr.io/distroless/base-debian11 AS build-release-stage
|
|||
|
||||
WORKDIR /
|
||||
|
||||
COPY --from=build-stage /docker-mail-reminder /docker-mail-reminder
|
||||
COPY --from=build-stage /main /main
|
||||
|
||||
#EXPOSE 8080
|
||||
|
||||
USER nonroot:nonroot
|
||||
|
||||
ENTRYPOINT ["/docker-mail-reminder"]
|
||||
ENTRYPOINT ["/main"]
|
||||
|
|
12
README.md
12
README.md
|
@ -1,6 +1,6 @@
|
|||
# Your Go Application
|
||||
# GO ical ntfy reminder
|
||||
|
||||
This is a simple Go application that does iCalendar files (.ics) analyzes and sends notifications by email based on the events in these iCalendar files.
|
||||
This is a simple Go application that does iCalendar files (.ics) analyzes and sends notifications by ntfy based on the events in these iCalendar files.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
@ -14,7 +14,7 @@ Before you begin, ensure you have the following installed:
|
|||
1. **Clone the repository:**
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
git clone https://code.brothertec.eu/simono41/go-ical-ntfy-reminder.git
|
||||
```
|
||||
|
||||
2. **Create an environment variables file:**
|
||||
|
@ -22,11 +22,9 @@ Before you begin, ensure you have the following installed:
|
|||
Create a file named `.env` in your project directory. Fill this file with the required environment variables:
|
||||
|
||||
```env
|
||||
FROM_EMAIL=user@example.com
|
||||
TO_EMAIL=recipient@example.com
|
||||
EMAIL_PASSWORD=your_password
|
||||
SMTP_HOST=smtp.example.com
|
||||
SMTP_PORT=587
|
||||
NTFY_AUTH=echo "Basic $(echo -n 'testuser:fakepassword' | base64)"
|
||||
NTFY_HOST=https://ntfy.sh/alerts
|
||||
ICS_DIR=/path/to/ics/files
|
||||
```
|
||||
|
||||
|
|
2
go.mod
2
go.mod
|
@ -5,12 +5,10 @@ go 1.21
|
|||
require (
|
||||
github.com/apognu/gocal v0.9.0
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
gopkg.in/mail.v2 v2.3.1
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/ChannelMeter/iso8601duration v0.0.0-20150204201828-8da3af7a2a61 // indirect
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0 // indirect
|
||||
)
|
||||
|
|
4
go.sum
4
go.sum
|
@ -17,11 +17,7 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
|
|||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
||||
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
|
||||
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
|
78
main.go
78
main.go
|
@ -1,23 +1,19 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/apognu/gocal"
|
||||
log "github.com/sirupsen/logrus"
|
||||
gomail "gopkg.in/mail.v2"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
fromString string
|
||||
toAddresses []string
|
||||
passwordString string
|
||||
hostString string
|
||||
hostPortString int
|
||||
toAddresses []string
|
||||
authString string
|
||||
hostString string
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
@ -28,22 +24,10 @@ func main() {
|
|||
|
||||
log.Info("Hello World!")
|
||||
|
||||
// Initialisiere err mit einem Fehlerwert
|
||||
var err error
|
||||
|
||||
// Read environment variables
|
||||
fromString = os.Getenv("FROM_EMAIL")
|
||||
toAddresses = strings.Split(os.Getenv("TO_EMAIL"), ",")
|
||||
passwordString = os.Getenv("EMAIL_PASSWORD")
|
||||
hostString = os.Getenv("SMTP_HOST")
|
||||
hostPortString, err = strconv.Atoi(os.Getenv("SMTP_PORT"))
|
||||
|
||||
// Überprüfung auf Fehler
|
||||
if err != nil {
|
||||
fmt.Println("Fehler bei der Umwandlung. Verwende Standardwert 587.")
|
||||
// Setze einen Standardwert, zum Beispiel 0
|
||||
hostPortString = 587
|
||||
}
|
||||
authString = os.Getenv("NTFY_AUTH")
|
||||
hostString = os.Getenv("NTFY_HOST")
|
||||
|
||||
// Get the current working directory
|
||||
dir, err := os.Getwd()
|
||||
|
@ -54,13 +38,13 @@ func main() {
|
|||
|
||||
// Read and split multiple folders
|
||||
folderList := os.Getenv("ICS_DIR")
|
||||
if folderList == "" || fromString == "" || len(toAddresses) == 0 || passwordString == "" || hostString == "" {
|
||||
log.Fatal("Es fehlen noch einige Parameter!!!\nICS_DIR, FROM_EMAIL, TO_EMAIL, EMAIL_PASSWORD, SMTP_HOST")
|
||||
if folderList == "" || len(toAddresses) == 0 || authString == "" || hostString == "" {
|
||||
log.Fatal("Es fehlen noch einige Parameter!!!\nICS_DIR, TO_EMAIL, NTFY_AUTH, NTFY_HOST")
|
||||
}
|
||||
|
||||
folders := strings.Split(folderList, ",")
|
||||
for _, folder := range folders {
|
||||
log.Infof("folder: %s from: %s to: %s password: %s host: %s", folder, fromString, toAddresses, passwordString, hostString)
|
||||
log.Infof("folder: %s to: %s password: %s host: %s", folder, toAddresses, authString, hostString)
|
||||
listFilesForFolder(folder)
|
||||
}
|
||||
}
|
||||
|
@ -131,10 +115,10 @@ func getNotifications(file string) {
|
|||
if len(e.Description) != 0 {
|
||||
messageText += fmt.Sprintf("\n\nFolgende Notiz existiert in diesen Eintrag: \n%s", e.Description)
|
||||
}
|
||||
messageText += "\n\n This email is a service from mail-reminder Version 1.0 written in Golang. \n Delivered by Simon Rieger"
|
||||
messageText += "\n\n This message is a service from go-ical-ntfy-reminder Version 1.0 written in Golang. \n Delivered by Simon Rieger"
|
||||
|
||||
for _, toAddress := range toAddresses {
|
||||
sendMail(messageSubject, messageText, toAddress)
|
||||
sendMessage(messageSubject, messageText, toAddress)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -143,32 +127,20 @@ func truncateToDay(t time.Time) time.Time {
|
|||
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
|
||||
}
|
||||
|
||||
func sendMail(messageSubject string, messageText string, toAddress string) {
|
||||
m := gomail.NewMessage()
|
||||
func sendMessage(messageSubject string, messageText string, toAddress string) {
|
||||
|
||||
// Set E-Mail sender
|
||||
m.SetHeader("From", fromString)
|
||||
|
||||
// Set E-Mail receivers
|
||||
m.SetHeader("To", toAddress)
|
||||
|
||||
// Set E-Mail subject
|
||||
m.SetHeader("Subject", messageSubject)
|
||||
|
||||
// Set E-Mail body. You can set plain text or html with text/html
|
||||
m.SetBody("text/plain", messageText)
|
||||
|
||||
// Settings for SMTP server
|
||||
d := gomail.NewDialer(hostString, hostPortString, fromString, passwordString)
|
||||
|
||||
// This is only needed when SSL/TLS certificate is not valid on server.
|
||||
// In production this should be set to false.
|
||||
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||||
|
||||
// Now send E-Mail
|
||||
if err := d.DialAndSend(m); err != nil {
|
||||
log.Fatal(err)
|
||||
panic(err)
|
||||
req, _ := http.NewRequest("POST", hostString,
|
||||
strings.NewReader(messageText))
|
||||
req.Header.Set("Title", messageSubject)
|
||||
req.Header.Set("Authorization", "Basic "+authString)
|
||||
req.Header.Set("Email", toAddress)
|
||||
req.Header.Set("Tags", "date,octopus")
|
||||
req.Header.Set("Priority", "high")
|
||||
do, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
log.Fatal("Ntfy Message not Sent Successfully, Error: " + err.Error())
|
||||
return
|
||||
}
|
||||
log.Infof("Email Message Sent Successfully")
|
||||
|
||||
log.Infof("Ntfy Message Sent Successfully, Status: " + do.Status)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue