Access headers as key/values #24
2 changed files with 33 additions and 2 deletions
|
@ -55,6 +55,14 @@ pub struct Imf<'a> {
|
||||||
|
|
||||||
// MIME
|
// MIME
|
||||||
pub mime_version: Option<Version>,
|
pub mime_version: Option<Version>,
|
||||||
|
|
||||||
|
// Raw fields
|
||||||
|
pub kv: Vec<header::Field<'a>>,
|
||||||
|
}
|
||||||
|
impl<'a> Imf<'a> {
|
||||||
|
pub fn with_kv(mut self, v: Vec<header::Field<'a>>) -> Self {
|
||||||
|
self.kv = v; self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@FIXME min and max limits are not enforced,
|
//@FIXME min and max limits are not enforced,
|
||||||
|
|
|
@ -164,8 +164,11 @@ pub fn message<'a>(
|
||||||
// aggregate header fields
|
// aggregate header fields
|
||||||
let (naive_mime, imf) = part::field::split_and_build(&headers);
|
let (naive_mime, imf) = part::field::split_and_build(&headers);
|
||||||
|
|
||||||
|
// Bind headers to the IMF object
|
||||||
|
let imf = imf.with_kv(headers);
|
||||||
|
|
||||||
// interpret headers to choose a mime type
|
// interpret headers to choose a mime type
|
||||||
let in_mime = naive_mime.with_kv(headers).with_raw(raw_headers).to_interpreted::<mime::WithGenericDefault>().into();
|
let in_mime = naive_mime.with_raw(raw_headers).to_interpreted::<mime::WithGenericDefault>().into();
|
||||||
//---------------
|
//---------------
|
||||||
|
|
||||||
// parse a part following this mime specification
|
// parse a part following this mime specification
|
||||||
|
@ -487,6 +490,19 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO<br />
|
||||||
right: &b"www.grrrndzero.org"[..],
|
right: &b"www.grrrndzero.org"[..],
|
||||||
}),
|
}),
|
||||||
mime_version: Some(imf::mime::Version { major: 1, minor: 0}),
|
mime_version: Some(imf::mime::Version { major: 1, minor: 0}),
|
||||||
|
kv: vec![
|
||||||
|
header::Field::Good(header::Kv2(&b"Date"[..], &b"Sat, 8 Jul 2023 07:14:29 +0200"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"From"[..], &b"Grrrnd Zero <grrrndzero@example.org>"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"To"[..], &b"John Doe <jdoe@machine.example>"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"CC"[..], &b"=?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be>"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"Subject"[..], &b"=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"X-Unknown"[..], &b"something something"[..])),
|
||||||
|
header::Field::Bad(&b"Bad entry\n on multiple lines\n"[..]),
|
||||||
|
header::Field::Good(header::Kv2(&b"Message-ID"[..], &b"<NTAxNzA2AC47634Y366BAMTY4ODc5MzQyODY0ODY5@www.grrrndzero.org>"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"MIME-Version"[..], &b"1.0"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"multipart/alternative;\n boundary=\"b1_e376dc71bafc953c0b0fdeb9983a9956\""[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"Content-Transfer-Encoding"[..], &b"7bit"[..])),
|
||||||
|
],
|
||||||
..imf::Imf::default()
|
..imf::Imf::default()
|
||||||
},
|
},
|
||||||
child: Box::new(AnyPart::Mult(Multipart {
|
child: Box::new(AnyPart::Mult(Multipart {
|
||||||
|
@ -531,6 +547,10 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO<br />
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
transfer_encoding: mime::mechanism::Mechanism::QuotedPrintable,
|
transfer_encoding: mime::mechanism::Mechanism::QuotedPrintable,
|
||||||
|
kv: vec![
|
||||||
|
header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"text/plain; charset=utf-8"[..])),
|
||||||
|
header::Field::Good(header::Kv2(&b"Content-Transfer-Encoding"[..], &b"quoted-printable"[..])),
|
||||||
|
],
|
||||||
raw: &b"Content-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: quoted-printable\n\n"[..],
|
raw: &b"Content-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: quoted-printable\n\n"[..],
|
||||||
..mime::NaiveMIME::default()
|
..mime::NaiveMIME::default()
|
||||||
}
|
}
|
||||||
|
@ -554,7 +574,10 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO<br />
|
||||||
value: MIMEWord::Atom(&b"us-ascii"[..]),
|
value: MIMEWord::Atom(&b"us-ascii"[..]),
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
|
kv: vec![
|
||||||
|
header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"text/html; charset=us-ascii"[..])),
|
||||||
|
],
|
||||||
raw: &b"Content-Type: text/html; charset=us-ascii\n\n"[..],
|
raw: &b"Content-Type: text/html; charset=us-ascii\n\n"[..],
|
||||||
..mime::NaiveMIME::default()
|
..mime::NaiveMIME::default()
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue