Age | Commit message (Expand) | Author |
2023-09-03 | email: Tolerate parentheses in display names.•••* email/email.scm (define-atom-pattern): Support customization of the
atext pattern as well.
(define-phrase-pattern): New macro.
(obs-phrase): Define using define-phrase-pattern.
(liberal-atext, liberal-cfws-captured-atom,
liberal-cfws-captured-word, liberal-phrase): New patterns.
(display-name): Use liberal-phrase instead of phrase.
* tests/email.scm ("tolerate email addresses with parentheses in
name"): New test.
| Arun Isaac |
2023-01-06 | tests: Downcase test names.•••This is admittedly a nitpicky change, but it slightly improves
consistency.
* tests/email.scm ("parse obsolete Received header", "parse names with
more than two words", "assume application/octet-stream Content-Type if
Content-Transfer-Encoding is unrecognized", "parse Received header
with two tokens but no timestamp"): Downcase test names.
| Arun Isaac |
2023-01-06 | email: Support Date fields with missing seconds.•••* email/email.scm (parse-email-headers): Extend the date-time parser to
match when seconds are missing, defaulting to "0".
* tests/email.scm ("parse Date", "parse Date without seconds"): New
tests.
Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
| Andrew Whatson |
2023-01-03 | tests: Import (srfi srfi-64) in base64.scm.•••* tests/base64.scm: Import (srfi srfi-64).
| Arun Isaac |
2023-01-03 | email: Support quoted-printable CR LF sequences.•••* email/quoted-printable.scm (quoted-printable-decode): Ignore "=\r\n"
sequences in the input.
* tests/quoted-printable.scm ("quoted-printable decoding of soft line
breaks (=\\n)", "quoted-printable decoding of soft line
breaks (=\\r\\n)"): New tests.
Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
| Andrew Whatson |
2021-10-24 | email: Handle Received header with two tokens but no timestamp.•••* email/email.scm (parse-email-headers): Match Received header with
timestamp more precisely.
* tests/email.scm ("Parse Received header with two tokens but no
timestamp"): No test.
| Arun Isaac |
2021-10-24 | tests: Return trace with only one Receieved header as a list of lists.•••* tests/email.scm ("Trace with only one Received header must be a list
of lists, not a list"): New test.
| Arun Isaac |
2021-10-24 | email: Handle unrecognized Content-Transfer-Encoding headers.•••* email/email.scm (handle-invalid-headers): New function.
(parse-email-headers): Handle invalid headers.
* tests/email.scm ("Assume application/octet-stream Content-Type if
Content-Transfer-Encoding is unrecognized"): New test.
| Arun Isaac |
2021-10-24 | tests: Paginate tests/email.scm.•••tests/email.scm is getting really long. Pagination make it easier to
understand.
* tests/email.scm: Split into three pages---Emails, Email addresses
and MIME encoded words.
| Arun Isaac |
2021-03-15 | email: Use only cfws-captured-words in obs-phrase.•••* email/email.scm (obs-phrase): Replace word with cfws-captured-word.
* tests/email.scm ("Parse names with more than two words"): New test.
| Arun Isaac |
2020-12-06 | tests: Return a list of Received headers for trace.•••* tests/email.scm ("Trace with only one Received header should be a
list of received traces, not a single received trace"): New test.
| Arun Isaac |
2020-12-06 | tests: Parse obsolete Received header.•••* tests/email.scm ("Parse obsolete Received header"): New test.
| Arun Isaac |
2020-12-05 | tests: Add example from RFC5322 A.6.3.•••* tests/email.scm ("RFC5322 A.6.3. Obsolete white space and
comments"): New test.
| Arun Isaac |
2020-12-05 | email: Do not capture cfws in atoms and dot-atoms.•••* email/email.scm (define-atom-pattern): Do not capture cfws unless
specified.
(atom): Do not specify cfws.
(define-dot-atom-pattern): Do not capture cfws.
(define-word-pattern): New macro.
(cfws-captured-atom, cfws-captured-word): New patterns.
(obs-phrase): Use cfws-captured-word.
(received-token): Capture all.
(parse-mime-entity): Post process received and received-token.
* tests/email.scm ("parse email headers"): Fix test.
| Arun Isaac |
2020-12-05 | email: Support obsolete date and time.•••* email/email.scm (obs-day-of-week, obs-day, obs-year, obs-hour,
obs-minute, obs-second, obs-zone): New macros.
(day-of-week, day, year, hours, minutes, seconds, zone): Include
obsolete pattern.
(parse-email-headers): Handle obsolete two and three digit years, and
alphabetic time zone specifiers.
* tests/email.scm ("RFC5322 A.6.2. Obsolete dates"): New test.
| Arun Isaac |
2020-12-05 | email: Support obsolete addressing.•••* email/email.scm (obs-qp, obs-fws, obs-no-ws-ctl, obs-ctext,
obs-qtext, obs-phrase, obs-local-part, obs-dtext, obs-domain,
obs-domain-list, obs-route, obs-angle-addr, captured-atom,
captured-obs-domain, captured-domain, obs-mbox-list, obs-group-list,
obs-addr-list, obs-id-left, obs-id-right): New patterns.
(quoted-pair, fws, ctext, qtext, phrase, dtext,
define-angle-addr-pattern, mailbox-list, group-list, address-list,
define-field-pattern, from, sender, bcc, id-left, id-right,
resent-from, resent-sender, resent-bcc, obs-resent-rply): Include
obsolete pattern.
(define-printable-ascii-character-pattern-with-obsolete,
define-atom-pattern, define-obs-domain-pattern): New macros.
(define-domain-pattern): Accept obs-domain as a new argument.
(fields): Include obs-resent-rply.
* tests/email.scm ("RFC5322 A.6.1. Obsolete addressing"): New test.
("parse email addresses with period in name"): Mark as passing.
| Arun Isaac |
2020-12-04 | tests: Parse email addresses with period in name.•••* tests/email.scm ("parse email addresses with period in name"): New
test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2020-05-25 | tests: Test inputs of different lengths.•••* tests/base64.scm ("base64 random bytevector: base64-encode and
base64-decode are inverses of each other", "base64 random
bytevector: encoded output should not be more than 76 columns wide",
"base64 random bytevector: encoded output must only consist of
characters from the base64 alphabet"): Test inputs of different lengths.
* tests/quoted-printable.scm ("quoted-printable random bytevector:
quoted-printable-encode and quoted-printable-decode are inverses of
each other", "quoted-printable random bytevector: encoded output
should not be more than 76 columns wide", "quoted-printable random
bytevector: encoded output must only consist of printable ASCII
characters", "q-encoding random bytevector: q-encoding-encode and
q-encoding-decode are inverses of each other"): Test inputs of
different lengths.
| Arun Isaac |
2020-05-25 | tests: Add tests for (email base64).•••* tests/encoding.scm: Move common code for encoding tests to this new
file.
* tests/quoted-printable.scm: Load encoding.scm.
* tests/base64.scm: New file.
* Makefile.am (SCM_TESTS): Register tests/base64.scm.
| Arun Isaac |
2020-05-25 | utils: Do not return eof if matched at beginning.•••* email/utils.scm (read-while, read-bytes-till): Do not return eof if
matched at beginning. Return empty string or bytevector respectively.
* tests/utils.scm ("read-bytes-till returns empty bytevector on match
at beginning", "read-while returns empty string on match at
beginning"): New tests.
| Arun Isaac |
2019-12-21 | tests: Return References header with only one reference as a singleton list.•••* tests/email.scm ("References header with only one reference must be
a singleton list, not a string"): New test.
| Arun Isaac |
2019-12-04 | tests: Title case header name.•••* tests/email.scm ("Keywords header must be a list"): Title case
header name. Remove unnecessary blank line.
| Arun Isaac |
2019-12-04 | email: Handle blank Subject headers.•••* email/email.scm (post-process-fields): Treat blank Subject headers
as having the null string as value.
* tests/email.scm ("blank Subject header must be treated as having the
null string as value"): New test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2019-10-09 | email: Return keywords header as a list.•••* email/email.scm (parse-email-headers): Return keywords header as a
list of strings.
* tests/email.scm ("keywords header must be a list"): New test.
| Arun Isaac |
2019-10-08 | Reindent calls to call-with-port.•••* email/email.scm (body->mime-entities, email->headers+body): Reindent
calls to call-with-port.
* email/quoted-printable.scm (quoted-printable-encode,
q-encoding-encode): Reindent calls to call-with-port.
* tests/utils.scm ("read-bytes-till returns eof-object on end of
file"): Reindent call to call-with-port.
| Arun Isaac |
2019-10-08 | email: Override invalid charset more strongly.•••* email/email.scm (post-process-content-type): Use alist-combine to
override charset more strongly than just appending to the alist.
* tests/email.scm ("tolerate invalid charset"): Update test.
| Arun Isaac |
2019-10-08 | tests: Compare email headers disregarding order.•••* tests/email.scm (alist=?, body=?, email=?, mime-entity=?): New
functions.
(test-alist=, test-email=): New macros.
("parse email headers", "tolerate invalid charset", "tolerate decoding
errors in body"): Use test-alist=.
("RFC5322 A.1.1. A message from one person to another with simple
addressing", "parse email headers", "RFC2046 5.1.1. Common syntax",
"decode MIME entity without headers", "multipart email with a 8 bit
encoding and non UTF-8 charset part", "decode utf-8 characters in
headers", "tolerate non-ascii non-utf-8 characters in headers",
"tolerate decoding errors in body"): Use test-email=.
| Arun Isaac |
2019-10-02 | email: Tolerate decoding errors in body.•••* email/email.scm (decode-body): Tolerate decoding errors in the body
using the substitute conversion strategy.
* tests/email.scm ("tolerate decoding errors in body"): New test.
| Arun Isaac |
2019-10-01 | email: Tolerate invalid charset.•••* email/email.scm (post-process-content-type): If charset is invalid,
assume default UTF-8 as charset.
* tests/email.scm ("tolerate invalid charset"): New test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2019-09-28 | email: Tolerate decoding errors in MIME encoded words.•••* email/email.scm (decode-mime-encoded-word): Tolerate decoding errors
in MIME encoded words using the substitute conversion strategy.
* tests/email.scm ("tolerate decoding errors in MIME encoded words"):
New test.
Reported-by: Christopher Baines <mail@cbaines.net>
| Arun Isaac |
2019-09-23 | email: Tolerate non-ASCII non-UTF-8 characters in headers.•••* email/email.scm (email->headers+body): If non-ASCII non-UTF-8
characters occur in the headers, do not raise a decoding error. Work
around using the substitute conversion strategy.
* tests/email.scm ("tolerate non-ASCII characters in headers"): Rename
to "decode utf-8 characters in headers".
("tolerate non-ascii non-utf-8 characters in headers"): New test.
Reported-by: Christopher Baines <mail@cbaines.net>
| Arun Isaac |
2019-09-17 | email: Tolerate non-ASCII characters in headers.•••We tolerate non-ASCII characters in headers in order to support Emacs
message mode parens style addresses.
* email/email.scm (email->headers+body): Read headers as UTF-8
characters.
* tests/email.scm ("tolerate non-ascii characters in headers"): New
tests.
Reported-by: Christopher Baines <mail@cbaines.net>
| Arun Isaac |
2019-08-09 | tests: Remove unnecessary execution permission.•••* tests/quoted-printable.scm: Remove execution permission.
| Arun Isaac |
2019-07-28 | tests: Add examples from RFC5322 A.1.1 and A.1.2.•••* tests/email.scm ("RFC5322 A.1.1. A message from one person to
another with simple addressing", "RFC5322 A.1.2. Different types of
mailboxes"): New tests.
| Arun Isaac |
2019-07-28 | tests: Add read-while eof-object test.•••* tests/utils.scm ("read-while returns eof-object on end of file"):
New test.
| Arun Isaac |
2019-07-28 | utils: Return eof-object from read-bytes-till on end of file.•••* email/utils.scm (read-bytes-till): Return eof-object, not #vu8(), on
end of file.
* tests/utils.scm: New file.
* Makefile.am (SCM_TESTS): Register it.
| Arun Isaac |
2019-07-28 | tests: Add example from RFC2046 5.1.1.•••* tests/email.scm ("RFC2046 5.1.1. Common syntax"): New test.
| Arun Isaac |
2019-07-28 | email: Decode MIME entities without headers.•••* email/email.scm (email->headers+body): If there are no headers,
return "" as headers not an eof-object.
(parse-email-body): Parse headers of parent entity or email to
parse-mime-entity.
(add-default-mime-entity-headers): New function.
(parse-mime-entity): Use add-default-mime-entity-headers instead of
add-default-headers. Handle MIME entities without headers.
* tests/email.scm ("decode MIME entity without headers"): New test.
| Arun Isaac |
2019-07-28 | email: Support email with mixed encoding of characters.•••Prior to this, parse-email would accept email in the form of a
string. A string is constrained to use the same encoding for all its
characters whereas an email can have characters encoded using
different encoding schemes. Therefore, it is more correct that
parse-email deals with bytevectors instead of strings.
* email/utils.scm (read-bytes-till): New function.
* email/email.scm (body->mime-entities, email->headers+body,
decode-body): Deal with emails as bytevectors instead of strings.
(parse-mime-entity): Rename text argument to bv.
(parse-email, parse-email-body): Overload to handle input in the form
of a string or bytevector.
* doc/guile-email.texi (Parsing e-mail): Document overloading of
parse-email and parse-email-body.
* tests/email.scm ("handle truncated multipart message gracefully"):
Deal in bytevectors instead of strings.
("email with 8 bit encoding and non UTF-8 charset", "multipart email
with a 8 bit encoding and non UTF-8 charset part"): New tests.
* tests/email-with-8bit-encoding-and-non-utf8-charset,
tests/multipart-email-with-a-8bit-encoding-and-non-utf8-charset-part:
New files.
Reported-by: Jack Hill <jackhill@jackhill.us>
| Arun Isaac |
2019-07-21 | email: Decode MIME encoded words in Subject header.•••Prior to this, MIME encoded words in the Subject header were not
decoded.
* email/email.scm (parse-email-headers): Decode MIME encoded words in
Subject header.
* tests/email.scm ("decode MIME encoded words in Subject header"): New
test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2019-07-21 | tests: Add test for decoding MIME encoded phrases.•••* tests/email.scm ("decode MIME encoded phrases that contain multiple
MIME encoded words each with their own encoding"): New test.
| Arun Isaac |
2018-11-14 | tests: Add tests for decoding MIME encoded words.•••* tests/email.scm ("decode MIME encoded word: wikipedia example",
"decode MIME encoded phrases that mix ASCII text and MIME encoded
words"): New tests.
| Arun Isaac |
2018-11-14 | tests: Add tests for email address parsing.•••* tests/email.scm ("parse name-addr email address", "parse addr-spec
email address", "parse emacs message mode parens style email
address"): New tests.
| Arun Isaac |
2018-10-01 | tests: Add tests for (email email).•••* tests/email.scm: New file.
* Makefile.am (SCM_TESTS): Register it.
| Arun Isaac |
2018-09-15 | tests: Add random test for Q encoding.•••* tests/quoted-printable.scm (q-encoding random bytevector:
q-encoding-encode and q-encoding-decode are inverses of each other):
New test.
| Arun Isaac |
2018-09-15 | quoted-printable: Q-encode #\? and #\_ with their ASCII values.•••* email/quoted-printable.scm (%q-encoding-literal-char-set,
%quoted-printable-literal-char-set): New variables.
(quoted-printable-encode): Move core encoding code to ...
(quoted-printable-style-encode): ... this new function.
(q-encoding-decode): Call quoted-printable-style-encode with the
appropriate literal-char-set instead of calling
quoted-printable-encode.
* tests/quoted-printable.scm (q-encoding of special characters): Add
to check for this bug.
| Arun Isaac |
2018-09-15 | tests: Extend quoted-printable special characters encoding test.•••* tests/quoted-printable.scm (quoted-printable-escape-encode-char):
New function.
("quoted-printable encoding of ="): Rename to ...
("quoted-printable encoding of special characters"): ... this. Extend
to test encoding of #\return and #\newline as well.
| Arun Isaac |
2018-09-15 | tests: Add tests for quoted-printable.•••* tests/quoted-printable.scm (random-bytevector,
each-line-has-a-maximum-of-76-characters?,
string-has-only-quoted-printable-valid-characters?): New functions.
(quoted-printable random bytevector: quoted-printable-encode and
quoted-printable-decode are inverses of each other, quoted-printable
random bytevector: encoded output should not be more than 76 columns
wide, quoted-printable random bytevector: encoded output must only
consist of printable ASCII characters): New tests.
| Arun Isaac |
2018-09-15 | quoted-printable: Encode #\= with its ASCII code.•••* email/quoted-printable.scm (quoted-printable-encode): Encode #\=
with its ASCII code.
* test/quoted-printable.scm (quoted-printable-encoding of =): Add test
to check for this bug.
| Arun Isaac |
2018-09-12 | quoted-printable: Add q-encoding-encode.•••* email/quoted-printable.scm (q-encoding-encode): New function.
* tests/quoted-printable.scm (q-encoding wikipedia example): Rename to
...
(q-encoding wikipedia example: decoding): ... this.
(q-encoding wikipedia example: encoding): New test.
| Arun Isaac |