78 lines
2.3 KiB
Go
78 lines
2.3 KiB
Go
package enmime
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
const (
|
|
// ErrorMalformedBase64 name.
|
|
ErrorMalformedBase64 = "Malformed Base64"
|
|
// ErrorMalformedHeader name.
|
|
ErrorMalformedHeader = "Malformed Header"
|
|
// ErrorMissingBoundary name.
|
|
ErrorMissingBoundary = "Missing Boundary"
|
|
// ErrorMissingContentType name.
|
|
ErrorMissingContentType = "Missing Content-Type"
|
|
// ErrorCharsetConversion name.
|
|
ErrorCharsetConversion = "Character Set Conversion"
|
|
// ErrorContentEncoding name.
|
|
ErrorContentEncoding = "Content Encoding"
|
|
// ErrorPlainTextFromHTML name.
|
|
ErrorPlainTextFromHTML = "Plain Text from HTML"
|
|
// ErrorCharsetDeclaration name.
|
|
ErrorCharsetDeclaration = "Character Set Declaration Mismatch"
|
|
// ErrorMissingRecipient name.
|
|
ErrorMissingRecipient = "no recipients (to, cc, bcc) set"
|
|
// ErrorMalformedChildPart name.
|
|
ErrorMalformedChildPart = "Malformed child part"
|
|
)
|
|
|
|
// MaxPartErrors limits number of part parsing errors, errors after the limit are ignored. 0 means unlimited.
|
|
var MaxPartErrors = 0
|
|
|
|
// Error describes an error encountered while parsing.
|
|
type Error struct {
|
|
Name string // The name or type of error encountered, from Error consts.
|
|
Detail string // Additional detail about the cause of the error, if available.
|
|
Severe bool // Indicates that a portion of the message was lost during parsing.
|
|
}
|
|
|
|
// Error formats the enmime.Error as a string.
|
|
func (e *Error) Error() string {
|
|
sev := "W"
|
|
if e.Severe {
|
|
sev = "E"
|
|
}
|
|
return fmt.Sprintf("[%s] %s: %s", sev, e.Name, e.Detail)
|
|
}
|
|
|
|
// String formats the enmime.Error as a string. DEPRECATED; use Error() instead.
|
|
func (e *Error) String() string {
|
|
return e.Error()
|
|
}
|
|
|
|
// addWarning builds a severe Error and appends to the Part error slice.
|
|
func (p *Part) addError(name string, detailFmt string, args ...interface{}) {
|
|
p.addProblem(&Error{
|
|
name,
|
|
fmt.Sprintf(detailFmt, args...),
|
|
true,
|
|
})
|
|
}
|
|
|
|
// addWarning builds a non-severe Error and appends to the Part error slice.
|
|
func (p *Part) addWarning(name string, detailFmt string, args ...interface{}) {
|
|
p.addProblem(&Error{
|
|
name,
|
|
fmt.Sprintf(detailFmt, args...),
|
|
false,
|
|
})
|
|
}
|
|
|
|
// addProblem adds general *Error to the Part error slice.
|
|
func (p *Part) addProblem(err *Error) {
|
|
if (MaxPartErrors == 0) || (len(p.Errors) < MaxPartErrors) {
|
|
p.Errors = append(p.Errors, err)
|
|
}
|
|
}
|