diff --git a/htmltest/check-link.go b/htmltest/check-link.go index dae18d7..50f8eab 100644 --- a/htmltest/check-link.go +++ b/htmltest/check-link.go @@ -405,23 +405,26 @@ func (hT *HTMLTest) checkMailto(ref *htmldoc.Reference) { }) return } - emailAddress, decodeErr := url.QueryUnescape(ref.URL.Opaque) - if decodeErr != nil { - hT.issueStore.AddIssue(issues.Issue{ - Level: issues.LevelError, - Message: fmt.Sprintf("cannot decode email (%s): '%s'", decodeErr, ref.URL.Opaque), - Reference: ref, - }) - return - } - formatErr := checkmail.ValidateFormat(emailAddress) - if formatErr != nil { - hT.issueStore.AddIssue(issues.Issue{ - Level: issues.LevelError, - Message: fmt.Sprintf("invalid email address (%s): '%s'", formatErr, emailAddress), - Reference: ref, - }) - return + // mailto URIs may contain multiple recipients separated by "," (https://datatracker.ietf.org/doc/html/rfc6068#autoid-2) + for _, recipient := range strings.Split(ref.URL.Opaque, ",") { + emailAddress, decodeErr := url.QueryUnescape(recipient) + if decodeErr != nil { + hT.issueStore.AddIssue(issues.Issue{ + Level: issues.LevelError, + Message: fmt.Sprintf("cannot decode email (%s): '%s'", decodeErr, ref.URL.Opaque), + Reference: ref, + }) + return + } + formatErr := checkmail.ValidateFormat(emailAddress) + if formatErr != nil { + hT.issueStore.AddIssue(issues.Issue{ + Level: issues.LevelError, + Message: fmt.Sprintf("invalid email address (%s): '%s'", formatErr, emailAddress), + Reference: ref, + }) + return + } } } diff --git a/htmltest/check-link_test.go b/htmltest/check-link_test.go index 3322b02..c3c4ddc 100644 --- a/htmltest/check-link_test.go +++ b/htmltest/check-link_test.go @@ -595,6 +595,12 @@ func TestMailtoEncoded(t *testing.T) { tExpectIssueCount(t, hT, 0) } +func TestMailtoMultipleRecipients(t *testing.T) { + // ignores valid mailto links + hT := tTestFile("fixtures/links/mailto_multiple_recipients.html") + tExpectIssueCount(t, hT, 0) +} + func TestMailtoEncodedInvalid(t *testing.T) { // ignores valid mailto links hT := tTestFile("fixtures/links/mailto_encoded_invalid.html") diff --git a/htmltest/fixtures/links/mailto_multiple_recipients.html b/htmltest/fixtures/links/mailto_multiple_recipients.html new file mode 100644 index 0000000..43ef209 --- /dev/null +++ b/htmltest/fixtures/links/mailto_multiple_recipients.html @@ -0,0 +1,9 @@ + + + + +Mail me. + + + +