<feed xmlns='http://www.w3.org/2005/Atom'>
<title>guile-email/email, branch master</title>
<subtitle>Guile email parser</subtitle>
<id>http://git.systemreboot.net/guile-email/atom?h=master</id>
<link rel='self' href='http://git.systemreboot.net/guile-email/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/'/>
<updated>2025-03-16T05:16:22+00:00</updated>
<entry>
<title>email: Return #f, not empty list, from field validation.</title>
<updated>2025-03-16T05:16:22+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2025-03-16T05:16:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=0a82f91d78e2a0993c198ee4c15ff98c2816ec1b'/>
<id>urn:sha1:0a82f91d78e2a0993c198ee4c15ff98c2816ec1b</id>
<content type='text'>
* email/email.scm (sanitize-field): Rename to validate-field, and
return #f on failure, not the empty list.
(email-from, email-to, email-cc, email-bcc, email-date): Call
validate-field, not sanitize-field.
</content>
</entry>
<entry>
<title>email: Add accessors for common header fields.</title>
<updated>2025-03-13T00:56:25+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2025-03-12T22:57:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=5fb1bc16aeff1e42a6e92045e0bf88dc8c034e39'/>
<id>urn:sha1:5fb1bc16aeff1e42a6e92045e0bf88dc8c034e39</id>
<content type='text'>
* email/email.scm (sanitize-field): New function.
(email-from, email-to, email-cc, email-bcc, email-subject, email-date,
email-message-id, email-content-type): New public functions.
* doc/guile-email.texi (Data Types): Document them.
</content>
</entry>
<entry>
<title>email: Quote display names when serializing email addresses.</title>
<updated>2025-02-09T23:23:03+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2025-02-09T23:09:26+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=32eb61f81ce9d069f5e73091ee2b6729f1404a6d'/>
<id>urn:sha1:32eb61f81ce9d069f5e73091ee2b6729f1404a6d</id>
<content type='text'>
* email/email.scm (interpret-address): Quote display names when they
have illegal characters.
* tests/email.scm ("quote display-name when serializing email
addresses with illegal characters", "do not quote display-name when
serializing email addresses without illegal characters"): New tests.
</content>
</entry>
<entry>
<title>email: Tolerate square brackets in email addresses.</title>
<updated>2025-02-09T22:08:22+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2025-02-09T22:08:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=9a82ce70b9eded77a148336feb8913156a31bab8'/>
<id>urn:sha1:9a82ce70b9eded77a148336feb8913156a31bab8</id>
<content type='text'>
* email/email.scm (liberal-atext): Add [ and ].
* tests/email.scm ("tolerate email addresses with square brackets in
name"): New test.
</content>
</entry>
<entry>
<title>email: Tolerate parentheses in display names.</title>
<updated>2023-09-03T17:01:05+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2023-09-03T17:01:05+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=900f720a7a0893f37f8c6b328f183e43086c1e52'/>
<id>urn:sha1:900f720a7a0893f37f8c6b328f183e43086c1e52</id>
<content type='text'>
* 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.
</content>
</entry>
<entry>
<title>email: Support Date fields with missing seconds.</title>
<updated>2023-01-06T14:27:18+00:00</updated>
<author>
<name>Andrew Whatson</name>
</author>
<published>2023-01-05T10:33:24+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=aa6a58a152b8ebe0e786682ffd84239ed862dba4'/>
<id>urn:sha1:aa6a58a152b8ebe0e786682ffd84239ed862dba4</id>
<content type='text'>
* 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 &lt;arunisaac@systemreboot.net&gt;
</content>
</entry>
<entry>
<title>email: Support quoted-printable CR LF sequences.</title>
<updated>2023-01-03T13:27:37+00:00</updated>
<author>
<name>Andrew Whatson</name>
</author>
<published>2023-01-03T12:19:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=8a9c14473f0ae449bfbfe77ba680734e4a14562f'/>
<id>urn:sha1:8a9c14473f0ae449bfbfe77ba680734e4a14562f</id>
<content type='text'>
* 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 &lt;arunisaac@systemreboot.net&gt;
</content>
</entry>
<entry>
<title>email: Handle Received header with two tokens but no timestamp.</title>
<updated>2021-10-23T21:29:08+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2021-10-23T21:29:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=a00a8e5e4a9ac6ca9a603c799982bcd46137c3de'/>
<id>urn:sha1:a00a8e5e4a9ac6ca9a603c799982bcd46137c3de</id>
<content type='text'>
* 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.
</content>
</entry>
<entry>
<title>email: Handle unrecognized Content-Transfer-Encoding headers.</title>
<updated>2021-10-23T21:22:06+00:00</updated>
<author>
<name>Arun Isaac</name>
</author>
<published>2021-10-23T21:16:01+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=86f0af337b3d4c8afc075c09a1aae4b1694d9ebd'/>
<id>urn:sha1:86f0af337b3d4c8afc075c09a1aae4b1694d9ebd</id>
<content type='text'>
* 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.
</content>
</entry>
<entry>
<title>email: Do not use an empty bytevector to test the charset.</title>
<updated>2021-10-02T10:30:31+00:00</updated>
<author>
<name>Mathieu Othacehe</name>
</author>
<published>2021-09-29T12:47:35+00:00</published>
<link rel='alternate' type='text/html' href='http://git.systemreboot.net/guile-email/commit/?id=cd8f4cb83fb9aaa86d5bad6979e3bdab7ef7f7b2'/>
<id>urn:sha1:cd8f4cb83fb9aaa86d5bad6979e3bdab7ef7f7b2</id>
<content type='text'>
Using an empty bytevector no longer throws an exception since Guile
commit 5ea8c69e9153a970952bf6f0b32c4fad6a28e839.

* email/email.scm (post-process-content-transfer-encoding): Use a
bytevector of unit length to test the charset validity.

Signed-off-by: Arun Isaac &lt;arunisaac@systemreboot.net&gt;
</content>
</entry>
</feed>
