From 5edb9b97b334024fcdac811ba05386f23d2ab008 Mon Sep 17 00:00:00 2001 From: Rvn0xsy Date: Fri, 14 Jan 2022 12:05:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81SSL=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 5 +++- go.sum | 2 ++ main.go | 68 +++++++++++++++++++++++++++++++++++++++++--- templates/index.html | 14 +++++++-- 4 files changed, 81 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 37be0b7..df3d53d 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,10 @@ module github.com/Rvn0xsy/SMTP-NC go 1.17 -require github.com/gin-gonic/gin v1.7.7 +require ( + github.com/gin-gonic/gin v1.7.7 + github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible +) require ( github.com/gin-contrib/sse v0.1.0 // indirect diff --git a/go.sum b/go.sum index 5ee9be1..3d1287b 100644 --- a/go.sum +++ b/go.sum @@ -16,6 +16,8 @@ github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible h1:jdpOPRN1zP63Td1hDQbZW73xKmzDvZHzVdNYxhnTMDA= +github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= diff --git a/main.go b/main.go index e75ef9c..d12f02d 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "crypto/tls" "embed" "flag" "fmt" @@ -8,6 +9,7 @@ import ( "html/template" "io/fs" "log" + "net" "net/http" "net/smtp" "os" @@ -25,17 +27,75 @@ type ProcessData struct { Port string `json:"port"` To []string `json:"to"` Body string `json:"body"` + EnableSSL bool `json:"enable_ssl"` } func SendSMTP(Data * ProcessData){ auth := smtp.PlainAuth("", Data.Username, Data.Password, Data.Hostname) msg := []byte(Data.Body) - err := smtp.SendMail(Data.Hostname +":" + Data.Port, auth, Data.SMTPFrom, Data.To, msg) - if err != nil { - log.Println(err) - }else { + servername := Data.Hostname +":" + Data.Port + if !Data.EnableSSL { + err := smtp.SendMail(servername, auth, Data.SMTPFrom, Data.To, msg) + if err != nil { + log.Println(err) + }else { + log.Println("Send Success!") + } + }else{ + host, _, _ := net.SplitHostPort(servername) + // TLS config + tlsconfig := &tls.Config { + InsecureSkipVerify: true, + ServerName: host, + } + conn, err := tls.Dial("tcp", servername, tlsconfig) + if err != nil { + log.Println(err) + return + } + c, err := smtp.NewClient(conn, host) + if err != nil { + log.Println(err) + return + } + + // Auth + if err = c.Auth(auth); err != nil { + log.Println(err) + return + } + + // To && From + if err = c.Mail(Data.SMTPFrom); err != nil { + log.Println(err) + return + } + + if err = c.Rcpt(Data.To[0]); err != nil { + log.Println(err) + return + } + + // Data + w, err := c.Data() + if err != nil { + log.Println(err) + return + } + _, err = w.Write(msg) + if err != nil { + log.Println(err) + return + } + err = w.Close() + if err != nil { + log.Println(err) + return + } + c.Quit() log.Println("Send Success!") } + } func init() { diff --git a/templates/index.html b/templates/index.html index 306dfce..cbdc4ef 100644 --- a/templates/index.html +++ b/templates/index.html @@ -20,13 +20,20 @@

SMTP NetCat

+

+ SMTP PORT: 25
+ SMTP SSL PORT: 465 +

+
- + - + + + Enable SSL
- +
@@ -71,6 +78,7 @@

SMTP NetCat

ObjData.username = $("#email").val() ObjData.password = $("#pwd").val() ObjData.to = $("#to").val() + ObjData.enable_ssl = $("#enable_ssl").is(":checked") mailList = ObjData.to.split(",") ObjData.to = mailList ObjData.smtp_from = $("#smtp_from").val()