github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/plugin_api_tests/test_send_mail_plugin/main.go (about) 1 // Copyright (c) 2015-present Mattermost, 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/masterhung0112/hk_server/v5/app/plugin_api_tests" 11 "github.com/masterhung0112/hk_server/v5/model" 12 "github.com/masterhung0112/hk_server/v5/plugin" 13 "github.com/masterhung0112/hk_server/v5/shared/mail" 14 ) 15 16 type MyPlugin struct { 17 plugin.MattermostPlugin 18 configuration plugin_api_tests.BasicConfig 19 } 20 21 func (p *MyPlugin) OnConfigurationChange() error { 22 if err := p.API.LoadPluginConfiguration(&p.configuration); err != nil { 23 return err 24 } 25 return nil 26 } 27 28 func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) { 29 to := p.configuration.BasicUserEmail 30 subject := "testing plugin api sending email" 31 body := "this is a test." 32 33 if err := p.API.SendMail(to, subject, body); err != nil { 34 return nil, err.Error() 35 } 36 37 // Check if we received the email 38 var resultsMailbox mail.JSONMessageHeaderInbucket 39 if errMail := mail.RetryInbucket(5, func() error { 40 var err error 41 resultsMailbox, err = mail.GetMailBox(to) 42 return err 43 }); errMail != nil { 44 return nil, errMail.Error() 45 } 46 if len(resultsMailbox) == 0 { 47 return nil, fmt.Sprintf("No mailbox results. Should be %v", len(resultsMailbox)) 48 } 49 if !strings.ContainsAny(resultsMailbox[len(resultsMailbox)-1].To[0], to) { 50 return nil, "Result doesn't contain recipient" 51 } 52 53 resultsEmail, err1 := mail.GetMessageFromMailbox(to, resultsMailbox[len(resultsMailbox)-1].ID) 54 if err1 != nil { 55 return nil, err1.Error() 56 } 57 if resultsEmail.Subject != subject { 58 return nil, fmt.Sprintf("subject differs: %v vs %s", resultsEmail.Subject, subject) 59 } 60 if resultsEmail.Body.Text != body { 61 return nil, fmt.Sprintf("body differs: %v vs %s", resultsEmail.Body.Text, body) 62 } 63 return nil, "OK" 64 } 65 66 func main() { 67 plugin.ClientMain(&MyPlugin{}) 68 }