func (s *RFC5322) quotedString() error {
	if s.ch == '"' {
		if err := s.Parser.QcontentSMTP(); err != nil {
			return err
		}
		if s.ch != '"' {
			return errQuotedUnclosed
		} else {
			s.next()
		}
	}
	return nil
}
quotedString consumes a quoted-string production
package rfc5321
import (
	"errors"
	"net"
)
type RFC5322 struct {
	AddressList
	Parser
	addr SingleAddress
}
type AddressList struct {
	List  []SingleAddress
	Group string
}
type SingleAddress struct {
	DisplayName       string
	DisplayNameQuoted bool
	LocalPart         string
	LocalPartQuoted   bool
	Domain            string
	IP                net.IP
	NullPath          bool
}
var (
	errNotAtom               = errors.New("not atom")
	errExpectingAngleAddress = errors.New("not angle address")
	errNotAWord              = errors.New("not a word")
	errExpectingColon        = errors.New("expecting : ")
	errExpectingSemicolon    = errors.New("expecting ; ")
	errExpectingAngleClose   = errors.New("expecting >")
	errExpectingAngleOpen    = errors.New("< expected")
	errQuotedUnclosed        = errors.New("quoted string not closed")
)
func (s *RFC5322) Address(input []byte) (AddressList, error) {
	s.set(input)
	s.next()
	s.List = nil
	s.addr = SingleAddress{}
	if err := s.mailbox(); err != nil {
		if s.ch == ':' {
			if groupErr := s.group(); groupErr != nil {
				return s.AddressList, groupErr
			} else {
				err = nil
			}
		}
		return s.AddressList, err
	}
	return s.AddressList, nil
}
func (s *RFC5322) group() error {
	if s.addr.DisplayName == "" {
		if err := s.displayName(); err != nil {
			return err
		}
	} else {
		s.Group = s.addr.DisplayName
		s.addr.DisplayName = ""
	}
	if s.ch != ':' {
		return errExpectingColon
	}
	s.next()
	_ = s.groupList()
	s.skipSpace()
	if s.ch != ';' {
		return errExpectingSemicolon
	}
	return nil
}
func (s *RFC5322) mailbox() error {
	pos := s.pos  
	if err := s.nameAddr(); err != nil {
		if err == errExpectingAngleAddress && s.ch != ':' {  
			s.addr.DisplayName = ""
			s.addr.DisplayNameQuoted = false
			s.pos = pos - 1  
			if s.pos > -1 {
				s.ch = s.buf[s.pos]
			}
			if err = s.Parser.mailbox(); err != nil {
				return err
			}
			s.addAddress()
		} else {
			return err
		}
	}
	return nil
}
func (s *RFC5322) addAddress() {
	s.addr.LocalPart = s.LocalPart
	s.addr.LocalPartQuoted = s.LocalPartQuotes
	s.addr.Domain = s.Domain
	s.addr.IP = s.IP
	s.List = append(s.List, s.addr)
	s.addr = SingleAddress{}
}
func (s *RFC5322) nameAddr() error {
	_ = s.displayName()
	if s.ch == '<' {
		if err := s.angleAddr(); err != nil {
			return err
		}
		s.next()
		if s.ch != '>' {
			return errExpectingAngleClose
		}
		s.addAddress()
		return nil
	} else {
		return errExpectingAngleAddress
	}
}
func (s *RFC5322) angleAddr() error {
	s.skipSpace()
	if s.ch != '<' {
		return errExpectingAngleOpen
	}
	if err := s.Parser.mailbox(); err != nil {
		return err
	}
	s.skipSpace()
	return nil
}
func (s *RFC5322) displayName() error {
	defer func() {
		if s.accept.Len() > 0 {
			s.addr.DisplayName = s.accept.String()
			s.accept.Reset()
		}
	}()
	if err := s.word(); err != nil {
		return err
	}
	for {
		err := s.word()
		if err != nil {
			return nil
		}
	}
}