github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/tests/plugin_tests/test_send_mail_plugin/main.go (about) 1 // Copyright (c) 2015-present Xenia, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package main 5 6 import ( 7 "fmt" 8 "strings" 9 10 "github.com/xzl8028/xenia-server/model" 11 "github.com/xzl8028/xenia-server/plugin" 12 "github.com/xzl8028/xenia-server/services/mailservice" 13 ) 14 15 type MyPlugin struct { 16 plugin.XeniaPlugin 17 } 18 19 func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { 20 to := "{{.BasicUser.Email}}" 21 subject := "testing plugin api sending email" 22 body := "this is a test." 23 24 if err := p.API.SendMail(to, subject, body); err != nil { 25 return nil, err.Error() 26 } 27 28 // Check if we received the email 29 var resultsMailbox mailservice.JSONMessageHeaderInbucket 30 if errMail := mailservice.RetryInbucket(5, func() error { 31 var err error 32 resultsMailbox, err = mailservice.GetMailBox(to) 33 return err 34 }); errMail != nil { 35 return nil, errMail.Error() 36 } 37 if len(resultsMailbox) == 0 { 38 return nil, fmt.Sprintf("No mailbox results. Should be %v", len(resultsMailbox)) 39 } 40 if !strings.ContainsAny(resultsMailbox[len(resultsMailbox)-1].To[0], to) { 41 return nil, "Result doesn't contain recipient" 42 } 43 44 resultsEmail, err1 := mailservice.GetMessageFromMailbox(to, resultsMailbox[len(resultsMailbox)-1].ID) 45 if err1 != nil { 46 return nil, err1.Error() 47 } 48 if resultsEmail.Subject != subject { 49 return nil, fmt.Sprintf("subject differs: %v vs %s", resultsEmail.Subject, subject) 50 } 51 if resultsEmail.Body.Text != body { 52 return nil, fmt.Sprintf("body differs: %v vs %s", resultsEmail.Body.Text, body) 53 } 54 return nil, "" 55 } 56 57 func main() { 58 plugin.ClientMain(&MyPlugin{}) 59 }