1
0
mirror of https://github.com/mgerb/tmail synced 2026-01-08 08:52:48 +00:00
This commit is contained in:
2018-02-01 12:01:05 -06:00
commit a6af3d11e2
9 changed files with 294 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
vendor
*.db
tmail

101
Gopkg.lock generated Normal file
View File

@@ -0,0 +1,101 @@
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
name = "github.com/asdine/storm"
packages = [
".",
"codec",
"codec/json",
"index",
"internal",
"q"
]
revision = "68fc73b635f890fe7ba2f3b15ce80c85b28a744f"
version = "v2.0.2"
[[projects]]
name = "github.com/coreos/bbolt"
packages = ["."]
revision = "583e8937c61f1af6513608ccc75c97b6abdf4ff9"
version = "v1.3.0"
[[projects]]
branch = "master"
name = "github.com/gin-contrib/sse"
packages = ["."]
revision = "22d885f9ecc78bf4ee5d72b937e4bbcdc58e8cae"
[[projects]]
name = "github.com/gin-gonic/gin"
packages = [
".",
"binding",
"render"
]
revision = "d459835d2b077e44f7c9b453505ee29881d5d12d"
version = "v1.2"
[[projects]]
name = "github.com/golang/protobuf"
packages = ["proto"]
revision = "925541529c1fa6821df4e44ce2723319eb2be768"
version = "v1.0.0"
[[projects]]
name = "github.com/mattn/go-isatty"
packages = ["."]
revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
version = "v0.0.3"
[[projects]]
branch = "master"
name = "github.com/mhale/smtpd"
packages = ["."]
revision = "1f9c0adefd94a30cab2ffcc25587b90a6b7a50c1"
[[projects]]
name = "github.com/sirupsen/logrus"
packages = ["."]
revision = "d682213848ed68c0a260ca37d6dd5ace8423f5ba"
version = "v1.0.4"
[[projects]]
name = "github.com/ugorji/go"
packages = ["codec"]
revision = "9831f2c3ac1068a78f50999a30db84270f647af6"
version = "v1.1"
[[projects]]
branch = "master"
name = "golang.org/x/crypto"
packages = ["ssh/terminal"]
revision = "1875d0a70c90e57f11972aefd42276df65e895b9"
[[projects]]
branch = "master"
name = "golang.org/x/sys"
packages = [
"unix",
"windows"
]
revision = "8f27ce8a604014414f8dfffc25cbcde83a3f2216"
[[projects]]
name = "gopkg.in/go-playground/validator.v8"
packages = ["."]
revision = "5f1438d3fca68893a817e4a66806cea46a9e4ebf"
version = "v8.18.2"
[[projects]]
branch = "v2"
name = "gopkg.in/yaml.v2"
packages = ["."]
revision = "d670f9405373e636a5a2765eea47fac0c9bc91a4"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "466f07b37f7df05f3425d1710259c615b219c5ebb3bd49dfaa4a1d5520a3804c"
solver-name = "gps-cdcl"
solver-version = 1

34
Gopkg.toml Normal file
View File

@@ -0,0 +1,34 @@
# Gopkg.toml example
#
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
#
# [[constraint]]
# name = "github.com/user/project"
# version = "1.0.0"
#
# [[constraint]]
# name = "github.com/user/project2"
# branch = "dev"
# source = "github.com/myfork/project2"
#
# [[override]]
# name = "github.com/x/y"
# version = "2.4.0"
#
# [prune]
# non-go = false
# go-tests = true
# unused-packages = true
[[constraint]]
branch = "master"
name = "github.com/mhale/smtpd"
[prune]
go-tests = true
unused-packages = true

20
db/db.go Normal file
View File

@@ -0,0 +1,20 @@
package db
import (
"log"
"github.com/asdine/storm"
)
var Conn *storm.DB
func Init() {
var err error
Conn, err = storm.Open("mail.db")
if err != nil {
log.Fatal(err)
}
}

22
mail/mail.go Normal file
View File

@@ -0,0 +1,22 @@
package mail
import (
"github.com/mgerb/tmail/db"
log "github.com/sirupsen/logrus"
)
type Mail struct {
ID int `storm:"increment" json:"id"`
From string `json:"from"`
To string `storm:"index" json:"to"`
Subject string `json:"subject"`
Content string `json:"content"`
}
func (m *Mail) Save() {
err := db.Conn.Save(m)
if err != nil {
log.Error(err)
}
}

37
main.go Normal file
View File

@@ -0,0 +1,37 @@
package main
import (
"os"
"github.com/asdine/storm"
"github.com/mgerb/tmail/db"
"github.com/mgerb/tmail/smtpserver"
"github.com/mgerb/tmail/webserver"
log "github.com/sirupsen/logrus"
)
//DB - database instance
var DB *storm.DB
func init() {
// Log as JSON instead of the default ASCII formatter.
log.SetFormatter(&log.JSONFormatter{})
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
log.SetOutput(os.Stdout)
// Only log the warning severity or above.
log.SetLevel(log.DebugLevel)
}
func main() {
db.Init()
defer db.Conn.Close()
// start webserver
go webserver.Start()
// start smtp server
smtpserver.Start()
}

12
readme.md Normal file
View File

@@ -0,0 +1,12 @@
# TMail
A throwaway smtp mail server.
## Check email
```
All mail:
http://host:8090/api/mail
Specific mail:
http://host:8090/api/mail?to=<address>
```

35
smtpserver/smtpserver.go Normal file
View File

@@ -0,0 +1,35 @@
package smtpserver
import (
"bytes"
"net"
"net/mail"
mymail "github.com/mgerb/tmail/mail"
"github.com/mhale/smtpd"
log "github.com/sirupsen/logrus"
)
func Start() {
log.Error(smtpd.ListenAndServe("0.0.0.0:25", mailHandler, "tmail", ""))
}
func mailHandler(origin net.Addr, from string, to []string, data []byte) {
msg, err := mail.ReadMessage(bytes.NewReader(data))
if err != nil {
log.Error(err)
return
}
subject := msg.Header.Get("Subject")
m := &mymail.Mail{
Content: string(data),
From: from,
To: to[0],
Subject: subject,
}
m.Save()
}

30
webserver/webserver.go Normal file
View File

@@ -0,0 +1,30 @@
package webserver
import (
"log"
"github.com/gin-gonic/gin"
"github.com/mgerb/tmail/db"
"github.com/mgerb/tmail/mail"
)
func Start() {
r := gin.Default()
r.GET("/api/mail", mailHander)
r.Run("0.0.0.0:8090")
}
func mailHander(c *gin.Context) {
to := c.Query("to")
var mail []mail.Mail
log.Println(to)
if to != "" {
db.Conn.Find("To", to, &mail)
} else {
db.Conn.All(&mail)
}
c.JSON(200, mail)
}