package notifications import ( "context" "crypto/tls" "fmt" "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/pkg/errors" "gopkg.in/gomail.v2" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" k8sclient "sigs.k8s.io/controller-runtime/pkg/client" ) const ( mailSubject = "Jenkins Operator Notification" ) type SMTP struct { k8sClient k8sclient.Client } func (s SMTP) Send(event Event, config v1alpha2.Notification) error { usernameSecret := &corev1.Secret{} passwordSecret := &corev1.Secret{} usernameSelector := config.SMTP.UsernameSecretKeySelector passwordSelector := config.SMTP.PasswordSecretKeySelector err := s.k8sClient.Get(context.TODO(), types.NamespacedName{Name: usernameSelector.Name, Namespace: event.Jenkins.Namespace}, usernameSecret) if err != nil { return err } err = s.k8sClient.Get(context.TODO(), types.NamespacedName{Name: passwordSelector.Name, Namespace: event.Jenkins.Namespace}, passwordSecret) if err != nil { return err } usernameSecretValue := string(usernameSecret.Data[usernameSelector.Key]) if usernameSecretValue == "" { return errors.Errorf("SMTP username is empty in secret '%s/%s[%s]", event.Jenkins.Namespace, usernameSelector.Name, usernameSelector.Key) } passwordSecretValue := string(passwordSecret.Data[passwordSelector.Key]) if passwordSecretValue == "" { return errors.Errorf("SMTP password is empty in secret '%s/%s[%s]", event.Jenkins.Namespace, passwordSelector.Name, passwordSelector.Key) } mailer := gomail.NewDialer(config.SMTP.Server, config.SMTP.Port, usernameSecretValue, passwordSecretValue) mailer.TLSConfig = &tls.Config{InsecureSkipVerify: config.SMTP.TLSInsecureSkipVerify} var statusMessage string if config.Verbose { message := event.Message + "