1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
(***********************************************************************)
(* *)
(* SpamOracle -- a Bayesian spam filter *)
(* *)
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
(* *)
(* Copyright 2002 Institut National de Recherche en Informatique et *)
(* en Automatique. This file is distributed under the terms of the *)
(* GNU Public License version 2, http://www.gnu.org/licenses/gpl.txt *)
(* *)
(***********************************************************************)
(* $Id$ *)
(** Parsing of e-mail messages, including attachments *)
type message =
{ headers: (string * string) list;
body: string;
parts: message list }
(** The type of parsed e-mail messages.
- [headers] is an A-list of pairs [(header-name, header-content)].
[header-name] is lowercased and includes [:], e.g. [subject:].
- [body] is the body of the message. Base64 and quoted-printable
encodings are already decoded. For multipart messages, [body]
is the initial blurb before the first part.
- [parts] is empty except for multipart messages, in which case
it lists all parts, recursively represented as messages. *)
val parse_message: string -> message
(** Parse the given textual message and return its structure. *)
val header: string -> message -> string
(** [header h msg] returns the contents of header named [h]
in message [msg], or the empty string if this header is missing.
Remember that header names are lowercased and include the final [:],
e.g. [subject:]. *)
val iter_text_parts: (message -> unit) -> message -> unit
(** [iter_text_parts fn msg] applies [fn] to every (sub-)message
contained in [msg] that is of type text. *)
val iter_message: (string -> unit) -> message -> unit
(** [iter_message fn msg] applies [fn] to the following parts of
message [msg]:
- the headers that match [!Config.mail_headers];
- the body of every sub-message of [msg] that is of type text.
*)
|