Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
96
Task/Send-email/Wren/send-email-1.wren
Normal file
96
Task/Send-email/Wren/send-email-1.wren
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
/* send_email.wren */
|
||||
|
||||
foreign class Authority {
|
||||
construct plainAuth(identity, username, password, host) {}
|
||||
}
|
||||
|
||||
class SMTP {
|
||||
foreign static sendMail(address, auth, from, to, msg)
|
||||
}
|
||||
|
||||
class Message {
|
||||
static check(host, user, pass) {
|
||||
if (host == "") Fiber.abort("Bad host")
|
||||
if (user == "") Fiber.abort("Bad username")
|
||||
if (pass == "") Fiber.abort("Bad password")
|
||||
}
|
||||
|
||||
construct new(from, to, cc, subject, content) {
|
||||
_from = from
|
||||
_to = to
|
||||
_cc = cc
|
||||
_subject = subject
|
||||
_content = content
|
||||
}
|
||||
|
||||
toString {
|
||||
var to = _to.join(",")
|
||||
var cc = _cc.join(",")
|
||||
var s1 = "From: " + _from + "\n"
|
||||
var s2 = "To: " + to + "\n"
|
||||
var s3 = "Cc: " + cc + "\n"
|
||||
var s4 = "Subject: " + _subject + "\n\n"
|
||||
return s1 + s2 + s3 + s4 + _content
|
||||
}
|
||||
|
||||
send(host, port, user, pass) {
|
||||
Message.check(host, user, pass)
|
||||
SMTP.sendMail(
|
||||
"%(host):%(port)",
|
||||
Authority.plainAuth("", user, pass, host),
|
||||
_from,
|
||||
_to,
|
||||
toString
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
foreign class Reader {
|
||||
construct new() {}
|
||||
|
||||
foreign readString(delim)
|
||||
}
|
||||
|
||||
var host = "smtp.gmail.com"
|
||||
var port = 587
|
||||
var user = "some.user@gmail.com"
|
||||
var pass = "secret"
|
||||
|
||||
var bufin = Reader.new()
|
||||
var NL = 10
|
||||
|
||||
System.write("From: ")
|
||||
var from = bufin.readString(NL).trim()
|
||||
|
||||
var to = []
|
||||
while (true) {
|
||||
System.write("To (Blank to finish): ")
|
||||
var tmp = bufin.readString(NL).trim()
|
||||
if (tmp == "") break
|
||||
to.add(tmp)
|
||||
}
|
||||
|
||||
var cc = []
|
||||
while (true) {
|
||||
System.write("Cc (Blank to finish): ")
|
||||
var tmp = bufin.readString(NL).trim()
|
||||
if (tmp == "") break
|
||||
cc.add(tmp)
|
||||
}
|
||||
|
||||
System.write("Subject: ")
|
||||
var subject = bufin.readString(NL).trim()
|
||||
|
||||
var contentLines = []
|
||||
while (true) {
|
||||
System.write("Content line (Blank to finish): ")
|
||||
var line = bufin.readString(NL).trim()
|
||||
if (line == "") break
|
||||
contentLines.add(line)
|
||||
}
|
||||
var content = contentLines.join("\r\n")
|
||||
|
||||
var m = Message.new(from, to, cc, subject, content)
|
||||
System.print("\nSending message...")
|
||||
m.send(host, port, user, pass)
|
||||
System.print("Message sent.")
|
||||
76
Task/Send-email/Wren/send-email-2.wren
Normal file
76
Task/Send-email/Wren/send-email-2.wren
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
/* 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()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue