Add files via upload

This commit is contained in:
Tomáš Dvořák
2025-05-19 09:52:43 +02:00
committed by GitHub
parent f4c0ed512d
commit 2e72ea8227
+117 -117
View File
@@ -1,117 +1,117 @@
package main package main
import ( import (
"fmt" "fmt"
"log" "log"
"net/http" "net/http"
"net/smtp" "net/smtp"
"github.com/gin-contrib/cors" "github.com/gin-contrib/cors"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type TripEntry struct { type TripEntry struct {
Name string `json:"name" binding:"required"` Name string `json:"name" binding:"required"`
Destination string `json:"destination" binding:"required"` Destination string `json:"destination" binding:"required"`
Date string `json:"date" binding:"required"` Date string `json:"date" binding:"required"`
Purpose string `json:"purpose" binding:"required"` Purpose string `json:"purpose" binding:"required"`
KmStart int `json:"km_start" binding:"required"` KmStart int `json:"km_start" binding:"required"`
KmEnd int `json:"km_end" binding:"required"` KmEnd int `json:"km_end" binding:"required"`
} }
func main() { func main() {
r := gin.Default() r := gin.Default()
// Enable CORS for all origins // Enable CORS for all origins
r.Use(cors.Default()) r.Use(cors.Default())
r.POST("/submit", func(c *gin.Context) { r.POST("/submit", func(c *gin.Context) {
var entry TripEntry var entry TripEntry
if err := c.ShouldBindJSON(&entry); err != nil { if err := c.ShouldBindJSON(&entry); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return return
} }
// Send email with trip details // Send email with trip details
err := sendEmail(entry) err := sendEmail(entry)
if err != nil { if err != nil {
log.Println("Failed to send email:", err) log.Println("Failed to send email:", err)
c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to send email"}) c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to send email"})
return return
} }
c.JSON(http.StatusOK, gin.H{"message": "Entry submitted and email sent successfully"}) c.JSON(http.StatusOK, gin.H{"message": "Entry submitted and email sent successfully"})
}) })
r.Run(":8080") r.Run(":8080")
} }
func sendEmail(entry TripEntry) error { func sendEmail(entry TripEntry) error {
smtpHost := "smtp.example.com" smtpHost := "smtp.gmail.com"
smtpPort := "587" smtpPort := "465"
sender := "your@email.com" sender := "contact.dvorak@gmail.com"
password := "yourpassword" password := "pnhkcsahbwsbpyqj"
recipient := "fleet@company.com" recipient := "contact.dvorak@gmail.com"
auth := smtp.PlainAuth("", sender, password, smtpHost) auth := smtp.PlainAuth("", sender, password, smtpHost)
subject := "Nový záznam o jízdě služebním autem" subject := "Nový záznam o jízdě služebním autem"
body := fmt.Sprintf(` body := fmt.Sprintf(`
<html> <html>
<head> <head>
<style> <style>
body { body {
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
background-color: #f9f9f9; background-color: #f9f9f9;
padding: 20px; padding: 20px;
} }
.container { .container {
background-color: #ffffff; background-color: #ffffff;
border: 1px solid #ddd; border: 1px solid #ddd;
border-radius: 8px; border-radius: 8px;
padding: 20px; padding: 20px;
max-width: 600px; max-width: 600px;
margin: auto; margin: auto;
} }
h2 { h2 {
color: #2c3e50; color: #2c3e50;
border-bottom: 2px solid #3498db; border-bottom: 2px solid #3498db;
padding-bottom: 10px; padding-bottom: 10px;
} }
p { p {
font-size: 16px; font-size: 16px;
color: #34495e; color: #34495e;
line-height: 1.5; line-height: 1.5;
} }
.label { .label {
font-weight: bold; font-weight: bold;
color: #2980b9; color: #2980b9;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<h2>Záznam o jízdě služebním autem</h2> <h2>Záznam o jízdě služebním autem</h2>
<p><span class="label">Řidič:</span> %s</p> <p><span class="label">Řidič:</span> %s</p>
<p><span class="label">Kam:</span> %s</p> <p><span class="label">Kam:</span> %s</p>
<p><span class="label">Datum:</span> %s</p> <p><span class="label">Datum:</span> %s</p>
<p><span class="label">Účel jízdy:</span> %s</p> <p><span class="label">Účel jízdy:</span> %s</p>
<p><span class="label">Kilometry na začátku:</span> %d km</p> <p><span class="label">Kilometry na začátku:</span> %d km</p>
<p><span class="label">Kilometry na konci:</span> %d km</p> <p><span class="label">Kilometry na konci:</span> %d km</p>
<p><span class="label">Ujeté kilometry:</span> %d km</p> <p><span class="label">Ujeté kilometry:</span> %d km</p>
</div> </div>
</body> </body>
</html> </html>
`, entry.Name, entry.Destination, entry.Date, entry.Purpose, entry.KmStart, entry.KmEnd, entry.KmEnd-entry.KmStart) `, entry.Name, entry.Destination, entry.Date, entry.Purpose, entry.KmStart, entry.KmEnd, entry.KmEnd-entry.KmStart)
msg := []byte( msg := []byte(
"MIME-Version: 1.0\r\n" + "MIME-Version: 1.0\r\n" +
"Content-Type: text/html; charset=\"UTF-8\"\r\n" + "Content-Type: text/html; charset=\"UTF-8\"\r\n" +
"To: " + recipient + "\r\n" + "To: " + recipient + "\r\n" +
"Subject: " + subject + "\r\n" + "Subject: " + subject + "\r\n" +
"\r\n" + body + "\r\n", "\r\n" + body + "\r\n",
) )
return smtp.SendMail(smtpHost+":"+smtpPort, auth, sender, []string{recipient}, msg) return smtp.SendMail(smtpHost+":"+smtpPort, auth, sender, []string{recipient}, msg)
} }