func()

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
}