76 lines
2 KiB
Text
76 lines
2 KiB
Text
/* go run Send_email.go */
|
|
|
|
package main
|
|
|
|
import(
|
|
wren "github.com/crazyinfin8/WrenGo"
|
|
"log"
|
|
"bufio"
|
|
"net/smtp"
|
|
"os"
|
|
)
|
|
|
|
type any = interface{}
|
|
|
|
func sendMail(vm *wren.VM, parameters []any) (any, error) {
|
|
address := parameters[1].(string)
|
|
handle := parameters[2].(*wren.ForeignHandle)
|
|
ifc, _ := handle.Get()
|
|
auth := ifc.(*smtp.Auth)
|
|
from := parameters[3].(string)
|
|
handle2 := parameters[4].(*wren.ListHandle)
|
|
le, _ := handle2.Count()
|
|
to := make([]string, le)
|
|
for i := 0; i < le; i++ {
|
|
ifc2, _ := handle2.Get(i)
|
|
to[i] = ifc2.(string)
|
|
}
|
|
msg := parameters[5].(string)
|
|
err := smtp.SendMail(address, *auth, from, to, []byte(msg))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func plainAuth(vm *wren.VM, parameters []any) (any, error) {
|
|
identity := parameters[1].(string)
|
|
username := parameters[2].(string)
|
|
password := parameters[3].(string)
|
|
host := parameters[4].(string)
|
|
auth := smtp.PlainAuth(identity, username, password, host)
|
|
return &auth, nil
|
|
}
|
|
|
|
func newReader(vm *wren.VM, parameters []any) (any, error) {
|
|
reader := bufio.NewReader(os.Stdin)
|
|
return &reader, nil
|
|
}
|
|
|
|
func readString(vm *wren.VM, parameters []any) (any, error) {
|
|
handle := parameters[0].(*wren.ForeignHandle)
|
|
ifc, _ := handle.Get()
|
|
bufin := ifc.(**bufio.Reader)
|
|
delim := byte(parameters[1].(float64))
|
|
s, _ := (*bufin).ReadString(delim)
|
|
return s, nil
|
|
}
|
|
|
|
func main() {
|
|
vm := wren.NewVM()
|
|
fileName := "Send_email.wren"
|
|
|
|
smtpMethodMap := wren.MethodMap { "static sendMail(_,_,_,_,_)": sendMail }
|
|
readerMethodMap := wren.MethodMap { "readString(_)": readString }
|
|
|
|
classMap := wren.ClassMap {
|
|
"Authority": wren.NewClass(plainAuth, nil, nil),
|
|
"SMTP" : wren.NewClass(nil, nil, smtpMethodMap),
|
|
"Reader" : wren.NewClass(newReader, nil, readerMethodMap),
|
|
}
|
|
|
|
module := wren.NewModule(classMap)
|
|
vm.SetModule(fileName, module)
|
|
vm.InterpretFile(fileName)
|
|
vm.Free()
|
|
}
|