Struct MimeMessage

Source
pub struct MimeMessage {
    pub headers: HeaderMap,
    pub body: String,
    pub message_type: Option<MimeMultipartType>,
    pub message_type_params: Option<HashMap<String, String>>,
    pub children: Vec<MimeMessage>,
    pub boundary: String,
}
Expand description

Represents a MIME message [unstable]

Fields§

§headers: HeaderMap

The headers for this message

§body: String

The content of this message

Keep in mind that this is the undecoded form, so may be quoted-printable or base64 encoded.

§message_type: Option<MimeMultipartType>

The MIME multipart message type of this message, or None if the message is not a multipart message.

§message_type_params: Option<HashMap<String, String>>

Any additional parameters of the MIME multipart header, not including the boundary.

§children: Vec<MimeMessage>

The sub-messages of this message

§boundary: String

The boundary used for MIME multipart messages

This will always be set, even if the message only has a single part

Implementations§

Source§

impl MimeMessage

Source

pub fn new(body: String) -> MimeMessage

[unstable]

Examples found in repository?
examples/printing.rs (line 7)
5fn main() {
6    let parts = vec![
7        MimeMessage::new("First part".to_string()),
8        MimeMessage::new("Second part".to_string()),
9    ];
10
11    let mut message = MimeMessage::new("Parent".to_string());
12
13    for part in parts.into_iter() {
14        message.children.push(part);
15    }
16
17    message.headers.insert(
18        Header::new_with_value(
19            "To".to_string(),
20            vec![
21                Address::new_mailbox_with_name(
22                    "John Doe".to_string(),
23                    "john@example.org".to_string(),
24                ),
25                Address::new_mailbox_with_name(
26                    "Joe Blogs".to_string(),
27                    "joe@example.org".to_string(),
28                ),
29                Address::new_mailbox_with_name(
30                    "Mr Black".to_string(),
31                    "mafia_black@example.org".to_string(),
32                ),
33            ],
34        )
35        .unwrap(),
36    );
37
38    message.update_headers();
39
40    println!("{}", message.as_string());
41}
Source

pub fn new_with_children( body: String, message_type: MimeMultipartType, children: Vec<MimeMessage>, ) -> MimeMessage

Source

pub fn new_with_boundary( body: String, message_type: MimeMultipartType, children: Vec<MimeMessage>, boundary: String, ) -> MimeMessage

Source

pub fn new_with_boundary_and_params( body: String, message_type: MimeMultipartType, children: Vec<MimeMessage>, boundary: String, message_type_params: Option<HashMap<String, String>>, ) -> MimeMessage

Source

pub fn new_blank_message() -> MimeMessage

Source

pub fn update_headers(&mut self)

Update the headers on this message based on the internal state.

When certain properties of the message are modified, the headers used to represent them are not automatically updated. Call this if these are changed.

Examples found in repository?
examples/printing.rs (line 38)
5fn main() {
6    let parts = vec![
7        MimeMessage::new("First part".to_string()),
8        MimeMessage::new("Second part".to_string()),
9    ];
10
11    let mut message = MimeMessage::new("Parent".to_string());
12
13    for part in parts.into_iter() {
14        message.children.push(part);
15    }
16
17    message.headers.insert(
18        Header::new_with_value(
19            "To".to_string(),
20            vec![
21                Address::new_mailbox_with_name(
22                    "John Doe".to_string(),
23                    "john@example.org".to_string(),
24                ),
25                Address::new_mailbox_with_name(
26                    "Joe Blogs".to_string(),
27                    "joe@example.org".to_string(),
28                ),
29                Address::new_mailbox_with_name(
30                    "Mr Black".to_string(),
31                    "mafia_black@example.org".to_string(),
32                ),
33            ],
34        )
35        .unwrap(),
36    );
37
38    message.update_headers();
39
40    println!("{}", message.as_string());
41}
Source

pub fn parse(s: &str) -> ParsingResult<MimeMessage>

Parse s into a MimeMessage.

Recurses down into each message, supporting an unlimited depth of messages.

Be warned that each sub-message that fails to be parsed will be thrown away. [unstable]

Examples found in repository?
examples/parse_email.rs (line 25)
9fn main() {
10    let args: Vec<_> = env::args().collect();
11    assert!(args.len() > 1);
12    let msg_path = Path::new(&args[1]);
13
14    let mut file = File::open(&msg_path).expect("can't open file");
15    let raw_msg_bytes = {
16        let mut rv: Vec<u8> = vec![];
17        file.read_to_end(&mut rv).expect("can't read from file");
18        rv
19    };
20    let raw_msg = String::from_utf8_lossy(&raw_msg_bytes);
21
22    println!("INPUT:");
23    println!("{}", &raw_msg);
24
25    let msg = MimeMessage::parse(&raw_msg[..]).unwrap();
26
27    println!("PARSED:");
28    println!("{}", msg.as_string());
29}
Source

pub fn as_string(&self) -> String

Examples found in repository?
examples/parse_email.rs (line 28)
9fn main() {
10    let args: Vec<_> = env::args().collect();
11    assert!(args.len() > 1);
12    let msg_path = Path::new(&args[1]);
13
14    let mut file = File::open(&msg_path).expect("can't open file");
15    let raw_msg_bytes = {
16        let mut rv: Vec<u8> = vec![];
17        file.read_to_end(&mut rv).expect("can't read from file");
18        rv
19    };
20    let raw_msg = String::from_utf8_lossy(&raw_msg_bytes);
21
22    println!("INPUT:");
23    println!("{}", &raw_msg);
24
25    let msg = MimeMessage::parse(&raw_msg[..]).unwrap();
26
27    println!("PARSED:");
28    println!("{}", msg.as_string());
29}
More examples
Hide additional examples
examples/printing.rs (line 40)
5fn main() {
6    let parts = vec![
7        MimeMessage::new("First part".to_string()),
8        MimeMessage::new("Second part".to_string()),
9    ];
10
11    let mut message = MimeMessage::new("Parent".to_string());
12
13    for part in parts.into_iter() {
14        message.children.push(part);
15    }
16
17    message.headers.insert(
18        Header::new_with_value(
19            "To".to_string(),
20            vec![
21                Address::new_mailbox_with_name(
22                    "John Doe".to_string(),
23                    "john@example.org".to_string(),
24                ),
25                Address::new_mailbox_with_name(
26                    "Joe Blogs".to_string(),
27                    "joe@example.org".to_string(),
28                ),
29                Address::new_mailbox_with_name(
30                    "Mr Black".to_string(),
31                    "mafia_black@example.org".to_string(),
32                ),
33            ],
34        )
35        .unwrap(),
36    );
37
38    message.update_headers();
39
40    println!("{}", message.as_string());
41}
Source

pub fn as_string_without_headers(&self) -> String

Source

pub fn decoded_body_bytes(&self) -> Option<Vec<u8>>

Decode the body of this message, as a series of bytes

Source

pub fn decoded_body_string(&self) -> ParsingResult<String>

Decode the body of this message, as a string.

This takes into account any charset as set on the Content-Type header, decoding the bytes with this character set.

Trait Implementations§

Source§

impl Clone for MimeMessage

Source§

fn clone(&self) -> MimeMessage

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MimeMessage

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for MimeMessage

Source§

fn eq(&self, other: &MimeMessage) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for MimeMessage

Source§

impl StructuralPartialEq for MimeMessage

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V