// headToAddy parses a header containing email addresses func headToAddy(h mail.Header, header string) (addys []string) { _, exists := h[header] if !exists { return } addyList, err := h.AddressList(header) if err != nil { Warn.Printf("Failed to parse header: %s", header) } for _, addy := range addyList { addys = append(addys, addy.Address) } return }
// parseFrom takes a mail address of the format Name <name@foo> and validates // it. If custom From headers are not allowed, it will be tweaked to conform // with the Remailer's configuration. func parseFrom(h mail.Header) []string { from, err := h.AddressList("From") if err != nil { // The supplied address is invalid. Use defaults instead. return []string{fmt.Sprintf( "%s <%s>", cfg.Mail.OutboundName, cfg.Mail.OutboundAddy, )} } if len(from) == 0 { // The address list is empty so return defaults return []string{fmt.Sprintf( "%s <%s>", cfg.Mail.OutboundName, cfg.Mail.OutboundAddy, )} } if cfg.Mail.CustomFrom { // Accept whatever was provided (it's already been validated by // AddressList). return []string{fmt.Sprintf( "%s <%s>", from[0].Name, from[0].Address, )} } if len(from[0].Name) == 0 { return []string{fmt.Sprintf( "%s <%s>", cfg.Mail.OutboundName, cfg.Mail.OutboundAddy, )} } return []string{fmt.Sprintf( "%s <%s>", from[0].Name, cfg.Mail.OutboundAddy, )} }