MCPcopy
hub / github.com/jordan-wright/email / msgHeaders

Method msgHeaders

email.go:300–345  ·  view source on GitHub ↗

msgHeaders merges the Email's various fields and custom headers together in a standards compliant way to create a MIMEHeader to be used in the resulting message. It does not alter e.Headers. "e"'s fields To, Cc, From, Subject will be used unless they are present in e.Headers. Unless set in e.Header

()

Source from the content-addressed store, hash-verified

298// "e"'s fields To, Cc, From, Subject will be used unless they are present in
299// e.Headers. Unless set in e.Headers, "Date" will filled with the current time.
300func (e *Email) msgHeaders() (textproto.MIMEHeader, error) {
301 res := make(textproto.MIMEHeader, len(e.Headers)+6)
302 if e.Headers != nil {
303 for _, h := range []string{"Reply-To", "To", "Cc", "From", "Subject", "Date", "Message-Id", "MIME-Version"} {
304 if v, ok := e.Headers[h]; ok {
305 res[h] = v
306 }
307 }
308 }
309 // Set headers if there are values.
310 if _, ok := res["Reply-To"]; !ok && len(e.ReplyTo) > 0 {
311 res.Set("Reply-To", strings.Join(e.ReplyTo, ", "))
312 }
313 if _, ok := res["To"]; !ok && len(e.To) > 0 {
314 res.Set("To", strings.Join(e.To, ", "))
315 }
316 if _, ok := res["Cc"]; !ok && len(e.Cc) > 0 {
317 res.Set("Cc", strings.Join(e.Cc, ", "))
318 }
319 if _, ok := res["Subject"]; !ok && e.Subject != "" {
320 res.Set("Subject", e.Subject)
321 }
322 if _, ok := res["Message-Id"]; !ok {
323 id, err := generateMessageID()
324 if err != nil {
325 return nil, err
326 }
327 res.Set("Message-Id", id)
328 }
329 // Date and From are required headers.
330 if _, ok := res["From"]; !ok {
331 res.Set("From", e.From)
332 }
333 if _, ok := res["Date"]; !ok {
334 res.Set("Date", time.Now().Format(time.RFC1123Z))
335 }
336 if _, ok := res["MIME-Version"]; !ok {
337 res.Set("MIME-Version", "1.0")
338 }
339 for field, vals := range e.Headers {
340 if _, ok := res[field]; !ok {
341 res[field] = vals
342 }
343 }
344 return res, nil
345}
346
347func writeMessage(buff io.Writer, msg []byte, multipart bool, mediaType string, w *multipart.Writer) error {
348 if multipart {

Callers 1

BytesMethod · 0.95

Calls 1

generateMessageIDFunction · 0.85

Tested by

no test coverage detected