Browse Source Download (without any required ccan dependencies)

Module:

rfc822

Summary:

Parsing of RFC822 emails

Dependencies:

Description:

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).

Example:

// 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);

License:

LGPL (v2.1 or any later version)