in smtp/main.go [179:230]
func (s *smtpNotifier) buildEmail() (string, error) {
build := s.tmplView.Build
logURL, err := notifiers.AddUTMParams(s.tmplView.Build.LogUrl, notifiers.EmailMedium)
if err != nil {
return "", fmt.Errorf("failed to add UTM params: %w", err)
}
build.LogUrl = logURL
body := new(bytes.Buffer)
if err := s.htmlTmpl.Execute(body, s.tmplView); err != nil {
return "", err
}
subject := fmt.Sprintf("Cloud Build [%s]: %s", build.ProjectId, build.Id)
if s.textTmpl != nil {
subjectTmpl := new(bytes.Buffer)
if err := s.textTmpl.Execute(subjectTmpl, s.tmplView); err != nil {
return "", err
}
// Escape any string formatter
subject = strings.Join(strings.Fields(subjectTmpl.String()), " ")
}
header := make(map[string]string)
if s.mcfg.from != s.mcfg.sender {
header["Sender"] = s.mcfg.sender
}
header["From"] = s.mcfg.from
header["To"] = strings.Join(s.mcfg.recipients, ",")
header["Subject"] = subject
header["MIME-Version"] = "1.0"
header["Content-Type"] = fmt.Sprintf(`%s; charset="utf-8"`, contentType)
header["Content-Transfer-Encoding"] = "quoted-printable"
header["Content-Disposition"] = "inline"
var msg string
for key, value := range header {
msg += fmt.Sprintf("%s: %s\r\n", key, value)
}
encoded := new(bytes.Buffer)
finalMsg := quotedprintable.NewWriter(encoded)
finalMsg.Write(body.Bytes())
if err := finalMsg.Close(); err != nil {
return "", fmt.Errorf("failed to close MIME writer: %w", err)
}
msg += "\r\n" + encoded.String()
return msg, nil
}