Browse Source Download (without any required ccan dependencies)
rfc822
Parsing of RFC822 emails
This code allows easy processing of RFC822/RFC2822/RFC5322 formatted email messages. For now only read-only operation is supported.
The important design goals are these: - Be lazy. Don't compute immediately compute fancy indexes for the
message. Just reading messages into the system and then sending them out again should not incur a serious performance hit.
- But cache. Once the user does request data that needs parsing,
cache the results in suitable data structures so that if lots more lookups are done they're then fast.
- Cope with ill-formatted messages. Even if the input is not
RFC822 compliant, don't SEGV and try to return as much useful data as possible.
Define TAL_USE_TALLOC to use libtalloc as the allocator, otherwise it will use ccan/tal (usually done on the cmdline, as tal/str will need it too).
// Given '' outputs 'body'
// Given 'From' outputs ' <from@example.com>'
// Given 'To' outputs ' <to@example.com>'
char buf[] = "From: <from@example.com>\n"
"To: <to@example.com>\n\n"
"body\n";
struct rfc822_msg *msg;
struct bytestring out;
msg = rfc822_start(NULL, buf, sizeof(buf));
if (!argv[1] || !argv[1][0])
out = rfc822_body(msg);
else {
struct rfc822_header *hdr;
hdr = rfc822_first_header_of_name(msg, argv[1]);
if (!hdr)
exit(1);
out = rfc822_header_unfolded_value(msg, hdr);
}
fwrite(out.ptr, 1, out.len, stdout);
rfc822_free(msg);
LGPL (v2.1 or any later version)