summaryrefslogtreecommitdiffstats
path: root/internals/src/mail_type.rs
diff options
context:
space:
mode:
Diffstat (limited to 'internals/src/mail_type.rs')
-rw-r--r--internals/src/mail_type.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/internals/src/mail_type.rs b/internals/src/mail_type.rs
new file mode 100644
index 0000000..96f9358
--- /dev/null
+++ b/internals/src/mail_type.rs
@@ -0,0 +1,47 @@
+/// Specifies what kind of mail we want to create.
+#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
+pub enum MailType {
+ /// A 7-bit us-ascii mail.
+ Ascii,
+
+ /// A us-ascii mail, but the body can contain 8bit values.
+ ///
+ /// This for example allows sending a mail with an utf-8
+ /// formatted body. But be aware that aspects like line
+ /// length limit still count an the ascii bytes for "\r\n"
+ /// still count as newlines. So using this for any non-us-ascii
+ /// compatible encoding (e.g. utf-16) isn't a good idea.
+ /// Neither is it suited for directly containing resources
+ /// like images.
+ Mime8BitEnabled,
+
+ /// A internationalized mail.
+ ///
+ /// Internationalized mails extend multiple grammar parts
+ /// to allow any non us-ascii utf-8 code point additionally
+ /// to the already allowed utf-8 code points. Internationalized
+ /// mails are required for any mail containing a mailbox with
+ /// an non us-ascii local/user part (the part before the `@`).
+ /// They also strongly simplify non ascii utf-8 in all other
+ /// places like e.g. the `Subject` header.
+ Internationalized
+}
+
+impl MailType {
+
+ /// Returns true if the self is equal to `Internationalized`
+ #[inline]
+ pub fn is_internationalized(&self) -> bool {
+ *self == MailType::Internationalized
+ }
+
+ /// Returns true if self is either `Internationalized` or `Mime8BitEnabled`
+ pub fn supports_8bit_bodies( &self ) -> bool {
+ use self::MailType::*;
+ match *self {
+ Ascii => false,
+ Mime8BitEnabled => true,
+ Internationalized => true
+ }
+ }
+}