aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Oliver Rickard <ocrickard@gmail.com>2013-05-28 14:17:30 -0700
committerGravatar Oliver Rickard <ocrickard@gmail.com>2013-05-28 14:17:30 -0700
commit663b15ce2fe57e429585d05f4f297751185254df (patch)
tree340e7dbb0bea36b8e4e442892792b2358ca4d505
parent3c1f53c0556428fcc97f7a9f1f41f83527be362a (diff)
Moved the quickstart guide over to the readme, added Hoa's mailcore schema
-rw-r--r--QUICKSTART.md138
-rw-r--r--README.md2
-rw-r--r--mailcore-schema.svg3
3 files changed, 5 insertions, 138 deletions
diff --git a/QUICKSTART.md b/QUICKSTART.md
deleted file mode 100644
index 72df3eee..00000000
--- a/QUICKSTART.md
+++ /dev/null
@@ -1,138 +0,0 @@
-## Mailcore 2: Introduction ##
-
-MailCore 2 brings a new API designed from the ground up to be fast, portable, and asynchronous. It features:
-
-- **POP**, **IMAP** and **SMTP** support
-- **[RFC822](http://www.ietf.org/rfc/rfc0822.txt)** parser and generator
-- **Asynchronous** APIs
-- **HTML** rendering of messages
-- **iOS** and **Mac** support
-
-## Installation ##
-
-1. Checkout MailCore2 into a directory relative to your project.
-2. Under the `build-mac` directory, locate the `mailcore2.xcodeproj` file, and drag this into your Xcode project.
-3. **For Mac** - If you're building for Mac, you can either link against MailCore 2 as a framework, or as a static library:
- * Mac framework
- - Go to Build Phases from your build target, and under 'Link Binary With Libraries', add `MailCore.framework`.
- - Make sure to use LLVM C++ standard library. Open Build Settings, scroll down to 'C++ Standard Library', and select `libc++`.
- - In Build Phases, add a Target Dependency of `mailcore osx` (it's the one with a little toolbox icon).
- * Mac static library
- - Go to Build Phases from your build target, and under 'Link Binary With Libraries', add `libMailCore.a`.
- - Set 'Other Linker Flags' under Build Settings: `-lctemplate -letpan -licudata -licui18n -licuuc -lxml2 -lsasl2 -liconv -ltidy -lc++ -all_load`
- - Make sure to use LLVM C++ standard library. In Build Settings, locate 'C++ Standard Library', and select `libc++`.
- - In Build Phases, add a Target Dependency of `static mailcore2 osx`.
-4. **For iOS** - If you're targeting iOS, you have to link against MailCore 2 as a static library:
- * Add `libMailCore-ios.a`
- * Set 'Other Linker Flags': `-lctemplate-ios -letpan-ios -licudata -licui18n -licuuc -lxml2 -lsasl2 -liconv -ltidy -lstdc++ -all_load`
- * Make sure to use GNU C++ standard library. In Build Settings, locate 'C++ Standard Library', and select `libstdc++`.
- * In Build Phases, add a Target Dependency of `static mailcore2 ios`.
-5. Profit.
-
-## Basic IMAP Usage ##
-
-### Asynchrony ###
-
-Using MailCore 2 is just a little more complex conceptually than the original MailCore. All fetch requests in MailCore 2 are made asynchronously through a queue. What does this mean? Well, let's take a look at a simple example:
-
-```objc
- MCOIMAPSession *session = [[MCOIMAPSession alloc] init];
- [session setHostname:@"imap.gmail.com"];
- [session setPort:993];
- [session setUsername:@"ADDRESS@gmail.com"];
- [session setPassword:@"123456"];
- [session setConnectionType:MCOConnectionTypeTLS];
-
- MCOIMAPMessagesRequestKind requestKind = MCOIMAPMessagesRequestKindHeaders;
- NSString *folder = @"INBOX";
- MCOIndexSet *uids = [MCOIndexSet indexSetWithRange:MCORangeMake(1, UINT64_MAX)];
-
- MCOIMAPFetchMessagesOperation *fetchOperation = [session fetchMessagesByUIDOperationWithFolder:folder requestKind:requestKind uids:uids];
-
- [fetchOperation start:^(NSError * error, NSArray * fetchedMessages, MCOIndexSet * vanishedMessages) {
- //We've finished downloading the messages!
-
- //Let's check if there was an error:
- if(error) {
- NSLog(@"Error downloading message headers:%@", error);
- }
-
- //And, let's print out the messages...
- NSLog(@"The post man delivereth:%@", fetchedMessages);
- }];
-```
-
-In this sample, we retrieved and printed a list of email headers from an IMAP server. In order to execute the fetch, we request an asynchronous operation object from the `MCOIMAPSession` instance with our parameters (more on this later). This operation object is able to initiate a connection to Gmail when we call the `start` method. Now here's where things get a little tricky. We call the `start` function with an Objective-C block, which is executed on the main thread when the fetch operation completes. The actual fetching from IMAP is done on a **background thread**, leaving your UI and other processing **free to use the main thread**.
-
-### Anatomy of a Message ###
-
-Background Reading:
-* [RFC821](http://tools.ietf.org/html/rfc821)
-* [RFC822](http://tools.ietf.org/html/rfc822)
-* [RFC5322](http://tools.ietf.org/html/rfc5322)
-* [RFC2045](http://tools.ietf.org/html/rfc2045)
-* [RFC2046](http://tools.ietf.org/html/rfc2046)
-* [RFC2047](http://tools.ietf.org/html/rfc2047)
-* [RFC2048](http://tools.ietf.org/html/rfc2048)
-* [RFC2049](http://tools.ietf.org/html/rfc2049)
-
-MailCore 2 has a new message structure that more closely mimics the structure of raw emails. This gives you as the user a lot of power, but can also be a little bewildering at first. When a fetch request completes and returns its results to your block, you will get an array of `MCOIMAPMessage` objects. Depending on what `kind` the fetch was made with, this message object can be only partially loaded from IMAP. In our example above, we used the `MCOIMAPMessagesRequestKindHeaders` as our `requestKind`. So we won't find any fields outside of the `header` filled out in the returned messages array. If you need more data, you can combine the `MCOIMAPMessagesRequestKind` bit masks:
-
-
-```objc
- //From the Mac Example
- MCOIMAPMessagesRequestKind requestKind = (MCOIMAPMessagesRequestKind)
- (MCOIMAPMessagesRequestKindHeaders | MCOIMAPMessagesRequestKindStructure |
- MCOIMAPMessagesRequestKindInternalDate | MCOIMAPMessagesRequestKindHeaderSubject |
- MCOIMAPMessagesRequestKindFlags);
-```
-
-Many of the properties you probably need are either in the `header` of an MCOIMAPMessage, or direct properties of the message.
-
-So now comes the tricky part: you want the full message bodies from the emails. MailCore 2 allows you to fetch the entire contents of a message through the `MCOIMAPFetchContentOperation` instance, which responds with the NSData representation of the email. You can then use `MCOMessageParser` to generate your HTML body content.
-
-### HTML Rendering ###
-
-The three subclasses of MCOAbstractMessage (MCOIMAPMessage, MCOMessageParser, MCOMessageBuilder) each have html rendering APIs. HTML rendering of emails is actually a pretty complex operation. Emails come in many shapes and forms, and writing a single rendering engine for every application is difficult, and ultimately constricts you as the user. Instead, MailCore 2 uses HTML rendering delegates that you can use to compose a single html body out of a (potentially) complicated body structure.
-
-So, to render HTML from a MCOAbstractMessage subclass (MCOMessageParser, MCOIMAPMessage, MCOMessageBuilder), you can implement the `MCOHTMLRendererDelegate` protocol. For each body part or attachment, you provide a delegate method that is able to provide a template, and the data to fit in that template. For example, here is one method pair for the main header:
-
-```objc
-- (NSString *)MCOMessageView_templateForMainHeader:(MCOMessageView *)view {
- NSLog(@"%s", __PRETTY_FUNCTION__);
- return @"<div style=\"background-color:#eee\">\
- <div><b>From:</b> {{FROM}}</div>\
- <div><b>To:</b> {{TO}}</div>\
- </div>";
-}
-
-- (NSDictionary *)MCOMessageView:(MCOMessageView *)view templateValuesForHeader:(MCOMessageHeader *)header {
- NSMutableDictionary *templateValues = [[NSMutableDictionary alloc] init];
-
- if(header.from) {
- templateValues[@"FROM"] = header.from.displayName ?: (header.from.mailbox ?: @"N/A");
- }
-
- if(header.to.count > 0) {
- NSMutableString *toString = [[NSMutableString alloc] init];
- for(MCOAddress *address in header.to) {
- if(toString.length > 0) {
- [toString appendString:@", "];
- }
- [toString appendFormat:@"%@", address.displayName ?: (address.mailbox ?: @"N/A")];
- }
- templateValues[@"TO"] = toString;
- }
-
- NSLog(@"%s:%@", __PRETTY_FUNCTION__, templateValues);
-
- return templateValues;
-}
-```
-
-As you can see, we use [ctemplates](https://code.google.com/p/ctemplate/) in order to format and insert the data we want to display in different parts of the message.
-
-### TODO for this guide ###
-* Add images
-* Add more in-depth steps/examples for how to work with imap messages
-* Add examples for POP and SMTP.
diff --git a/README.md b/README.md
index 72df3eee..14e9d9d3 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,8 @@ In this sample, we retrieved and printed a list of email headers from an IMAP se
### Anatomy of a Message ###
+<embed src="mailcore-schema.svg" type="image/svg+xml" />
+
Background Reading:
* [RFC821](http://tools.ietf.org/html/rfc821)
* [RFC822](http://tools.ietf.org/html/rfc822)
diff --git a/mailcore-schema.svg b/mailcore-schema.svg
new file mode 100644
index 00000000..1fe0cff3
--- /dev/null
+++ b/mailcore-schema.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="33 33 1010 844" width="1010pt" height="844pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2013-05-26 03:27Z</dc:date><!-- Produced by OmniGraffle Professional 5.4 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="18" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1118" height="1566"/><g><title>Layer 1</title><g><use xl:href="#id4_Graphic" filter="url(#Shadow)"/><use xl:href="#id7_Graphic" filter="url(#Shadow)"/><use xl:href="#id8_Graphic" filter="url(#Shadow)"/><use xl:href="#id9_Graphic" filter="url(#Shadow)"/><use xl:href="#id11_Graphic" filter="url(#Shadow)"/><use xl:href="#id12_Graphic" filter="url(#Shadow)"/><use xl:href="#id13_Graphic" filter="url(#Shadow)"/><use xl:href="#id14_Graphic" filter="url(#Shadow)"/><use xl:href="#id15_Graphic" filter="url(#Shadow)"/><use xl:href="#id16_Graphic" filter="url(#Shadow)"/><use xl:href="#id19_Graphic" filter="url(#Shadow)"/><use xl:href="#id20_Graphic" filter="url(#Shadow)"/><use xl:href="#id21_Graphic" filter="url(#Shadow)"/><use xl:href="#id22_Graphic" filter="url(#Shadow)"/><use xl:href="#id23_Graphic" filter="url(#Shadow)"/><use xl:href="#id24_Graphic" filter="url(#Shadow)"/><use xl:href="#id25_Graphic" filter="url(#Shadow)"/><use xl:href="#id26_Graphic" filter="url(#Shadow)"/><use xl:href="#id27_Graphic" filter="url(#Shadow)"/><use xl:href="#id28_Graphic" filter="url(#Shadow)"/><use xl:href="#id44_Graphic" filter="url(#Shadow)"/><use xl:href="#id46_Graphic" filter="url(#Shadow)"/><use xl:href="#id49_Graphic" filter="url(#Shadow)"/><use xl:href="#id51_Graphic" filter="url(#Shadow)"/></g><g id="id4_Graphic"><path d="M 62.379446 157.79817 L 189.37295 157.79817 C 194.34351 157.79817 198.37295 161.8276 198.37295 166.79817 L 198.37295 183.88198 C 198.37295 188.85255 194.34351 192.88198 189.37295 192.88198 L 62.379446 192.88198 C 57.408883 192.88198 53.379446 188.85255 53.379446 183.88198 C 53.379446 183.88198 53.379446 183.88198 53.379446 183.88198 L 53.379446 166.79817 C 53.379446 161.8276 57.408883 157.79817 62.379446 157.79817 C 62.379446 157.79817 62.379446 157.79817 62.379446 157.79817 Z" fill="white"/><path d="M 62.379446 157.79817 L 189.37295 157.79817 C 194.34351 157.79817 198.37295 161.8276 198.37295 166.79817 L 198.37295 183.88198 C 198.37295 188.85255 194.34351 192.88198 189.37295 192.88198 L 62.379446 192.88198 C 57.408883 192.88198 53.379446 188.85255 53.379446 183.88198 C 53.379446 183.88198 53.379446 183.88198 53.379446 183.88198 L 53.379446 166.79817 C 53.379446 161.8276 57.408883 157.79817 62.379446 157.79817 C 62.379446 157.79817 62.379446 157.79817 62.379446 157.79817 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(58.379446 168.34008)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="21.143234" y="11" textLength="92.70703">AbstractMessage</tspan></text></g><g id="id7_Graphic"><path d="M 579.3052 157.79818 L 706.2987 157.79818 C 711.26927 157.79818 715.2987 161.82762 715.2987 166.79818 L 715.2987 183.882 C 715.2987 188.85256 711.26927 192.882 706.2987 192.882 L 579.3052 192.882 C 574.33464 192.882 570.3052 188.85256 570.3052 183.882 C 570.3052 183.882 570.3052 183.882 570.3052 183.882 L 570.3052 166.79818 C 570.3052 161.82762 574.33464 157.79818 579.3052 157.79818 C 579.3052 157.79818 579.3052 157.79818 579.3052 157.79818 Z" fill="white"/><path d="M 579.3052 157.79818 L 706.2987 157.79818 C 711.26927 157.79818 715.2987 161.82762 715.2987 166.79818 L 715.2987 183.882 C 715.2987 188.85256 711.26927 192.882 706.2987 192.882 L 579.3052 192.882 C 574.33464 192.882 570.3052 188.85256 570.3052 183.882 C 570.3052 183.882 570.3052 183.882 570.3052 183.882 L 570.3052 166.79818 C 570.3052 161.82762 574.33464 157.79818 579.3052 157.79818 C 579.3052 157.79818 579.3052 157.79818 579.3052 157.79818 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(575.3052 168.34009)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.139328" y="11" textLength="114.714844">AbstractMessagePart</tspan></text></g><g id="id8_Graphic"><path d="M 234.68807 157.79815 L 361.68157 157.79815 C 366.65213 157.79815 370.68157 161.82759 370.68157 166.79815 L 370.68157 183.88197 C 370.68157 188.85253 366.65213 192.88197 361.68157 192.88197 L 234.68807 192.88197 C 229.71751 192.88197 225.68807 188.85253 225.68807 183.88197 C 225.68807 183.88197 225.68807 183.88197 225.68807 183.88196 L 225.68807 166.79815 C 225.68807 161.82759 229.71751 157.79815 234.68807 157.79815 C 234.68807 157.79815 234.68807 157.79815 234.68807 157.79815 Z" fill="white"/><path d="M 234.68807 157.79815 L 361.68157 157.79815 C 366.65213 157.79815 370.68157 161.82759 370.68157 166.79815 L 370.68157 183.88197 C 370.68157 188.85253 366.65213 192.88197 361.68157 192.88197 L 234.68807 192.88197 C 229.71751 192.88197 225.68807 188.85253 225.68807 183.88197 C 225.68807 183.88197 225.68807 183.88197 225.68807 183.88196 L 225.68807 166.79815 C 225.68807 161.82759 229.71751 157.79815 234.68807 157.79815 C 234.68807 157.79815 234.68807 157.79815 234.68807 157.79815 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.68807 168.34006)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><g id="id9_Graphic"><path d="M 406.99664 157.79817 L 533.99014 157.79817 C 538.9607 157.79817 542.99014 161.82761 542.99014 166.79817 L 542.99014 183.88199 C 542.99014 188.85255 538.9607 192.88199 533.99014 192.88199 L 406.99664 192.88199 C 402.02607 192.88199 397.99664 188.85255 397.99664 183.88199 C 397.99664 183.88199 397.99664 183.88199 397.99664 183.88199 L 397.99664 166.79817 C 397.99664 161.82761 402.02607 157.79817 406.99664 157.79817 C 406.99664 157.79817 406.99664 157.79817 406.99664 157.79817 Z" fill="white"/><path d="M 406.99664 157.79817 L 533.99014 157.79817 C 538.9607 157.79817 542.99014 161.82761 542.99014 166.79817 L 542.99014 183.88199 C 542.99014 188.85255 538.9607 192.88199 533.99014 192.88199 L 406.99664 192.88199 C 402.02607 192.88199 397.99664 188.85255 397.99664 183.88199 C 397.99664 183.88199 397.99664 183.88199 397.99664 183.88199 L 397.99664 166.79817 C 397.99664 161.82761 402.02607 157.79817 406.99664 157.79817 C 406.99664 157.79817 406.99664 157.79817 406.99664 157.79817 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(402.99664 168.34008)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="22.482101" y="11" textLength="90.029297">AbstractMultipart</tspan></text></g><g id="id11_Graphic"><path d="M 579.3052 234.69726 L 706.2987 234.69726 C 711.26927 234.69726 715.2987 238.7267 715.2987 243.69726 L 715.2987 260.78108 C 715.2987 265.75164 711.26927 269.78108 706.2987 269.78108 L 579.3052 269.78108 C 574.33464 269.78108 570.3052 265.75164 570.3052 260.78108 C 570.3052 260.78108 570.3052 260.78107 570.3052 260.78107 L 570.3052 243.69726 C 570.3052 238.7267 574.33464 234.69726 579.3052 234.69726 C 579.3052 234.69726 579.3052 234.69726 579.3052 234.69726 Z" fill="white"/><path d="M 579.3052 234.69726 L 706.2987 234.69726 C 711.26927 234.69726 715.2987 238.7267 715.2987 243.69726 L 715.2987 260.78108 C 715.2987 265.75164 711.26927 269.78108 706.2987 269.78108 L 579.3052 269.78108 C 574.33464 269.78108 570.3052 265.75164 570.3052 260.78108 C 570.3052 260.78108 570.3052 260.78107 570.3052 260.78107 L 570.3052 243.69726 C 570.3052 238.7267 574.33464 234.69726 579.3052 234.69726 C 579.3052 234.69726 579.3052 234.69726 579.3052 234.69726 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(575.3052 245.23917)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="17.478195" y="11" textLength="100.03711">IMAPMessagePart</tspan></text></g><g id="id12_Graphic"><path d="M 234.68806 234.69723 L 361.68156 234.69723 C 366.65212 234.69723 370.68156 238.72667 370.68156 243.69723 L 370.68156 260.78105 C 370.68156 265.75161 366.65212 269.78105 361.68156 269.78105 L 234.68806 269.78105 C 229.7175 269.78105 225.68806 265.75161 225.68806 260.78105 C 225.68806 260.78105 225.68806 260.78104 225.68806 260.78104 L 225.68806 243.69723 C 225.68806 238.72667 229.7175 234.69723 234.68806 234.69723 C 234.68806 234.69723 234.68806 234.69723 234.68806 234.69723 Z" fill="white"/><path d="M 234.68806 234.69723 L 361.68156 234.69723 C 366.65212 234.69723 370.68156 238.72667 370.68156 243.69723 L 370.68156 260.78105 C 370.68156 265.75161 366.65212 269.78105 361.68156 269.78105 L 234.68806 269.78105 C 229.7175 269.78105 225.68806 265.75161 225.68806 260.78105 C 225.68806 260.78105 225.68806 260.78104 225.68806 260.78104 L 225.68806 243.69723 C 225.68806 238.72667 229.7175 234.69723 234.68806 234.69723 C 234.68806 234.69723 234.68806 234.69723 234.68806 234.69723 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.68806 245.23914)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="41.823898" y="11" textLength="51.345703">IMAPPart</tspan></text></g><g id="id13_Graphic"><path d="M 406.99667 234.69725 L 533.99017 234.69725 C 538.96073 234.69725 542.99017 238.72668 542.99017 243.69725 L 542.99017 260.78106 C 542.99017 265.75163 538.96073 269.78106 533.99017 269.78106 L 406.99667 269.78106 C 402.0261 269.78106 397.99667 265.75163 397.99667 260.78106 C 397.99667 260.78106 397.99667 260.78106 397.99667 260.78106 L 397.99667 243.69725 C 397.99667 238.72668 402.0261 234.69725 406.99667 234.69725 C 406.99667 234.69725 406.99667 234.69725 406.99667 234.69725 Z" fill="white"/><path d="M 406.99667 234.69725 L 533.99017 234.69725 C 538.96073 234.69725 542.99017 238.72668 542.99017 243.69725 L 542.99017 260.78106 C 542.99017 265.75163 538.96073 269.78106 533.99017 269.78106 L 406.99667 269.78106 C 402.0261 269.78106 397.99667 265.75163 397.99667 260.78106 C 397.99667 260.78106 397.99667 260.78106 397.99667 260.78106 L 397.99667 243.69725 C 397.99667 238.72668 402.0261 234.69725 406.99667 234.69725 C 406.99667 234.69725 406.99667 234.69725 406.99667 234.69725 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(402.99667 245.23916)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.820969" y="11" textLength="75.351562">IMAPMultipart</tspan></text></g><g id="id14_Graphic"><path d="M 62.379464 234.69724 L 189.37296 234.69724 C 194.34353 234.69724 198.37296 238.72668 198.37296 243.69724 L 198.37296 260.78106 C 198.37296 265.75162 194.34353 269.78106 189.37296 269.78106 L 62.379464 269.78106 C 57.4089 269.78106 53.379464 265.75162 53.379464 260.78106 C 53.379464 260.78106 53.379464 260.78105 53.379464 260.78105 L 53.379464 243.69724 C 53.379464 238.72668 57.4089 234.69724 62.379464 234.69724 C 62.379464 234.69724 62.379464 234.69724 62.379464 234.69724 Z" fill="white"/><path d="M 62.379464 234.69724 L 189.37296 234.69724 C 194.34353 234.69724 198.37296 238.72668 198.37296 243.69724 L 198.37296 260.78106 C 198.37296 265.75162 194.34353 269.78106 189.37296 269.78106 L 62.379464 269.78106 C 57.4089 269.78106 53.379464 265.75162 53.379464 260.78106 C 53.379464 260.78106 53.379464 260.78105 53.379464 260.78105 L 53.379464 243.69724 C 53.379464 238.72668 57.4089 234.69724 62.379464 234.69724 C 62.379464 234.69724 62.379464 234.69724 62.379464 234.69724 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(58.379464 245.23915)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="28.482101" y="11" textLength="78.029297">IMAPMessage</tspan></text></g><g id="id15_Graphic"><path d="M 579.3052 86.70745 L 706.2987 86.70745 C 711.26926 86.70745 715.2987 90.736887 715.2987 95.70745 L 715.2987 112.791267 C 715.2987 117.76183 711.26926 121.79127 706.2987 121.79127 L 579.3052 121.79127 C 574.33464 121.79127 570.3052 117.76183 570.3052 112.791267 C 570.3052 112.791266 570.3052 112.791265 570.3052 112.791264 L 570.3052 95.70745 C 570.3052 90.736887 574.33464 86.70745 579.3052 86.70745 C 579.3052 86.70745 579.3052 86.70745 579.3052 86.70745 Z" fill="white"/><path d="M 579.3052 86.70745 L 706.2987 86.70745 C 711.26926 86.70745 715.2987 90.736887 715.2987 95.70745 L 715.2987 112.791267 C 715.2987 117.76183 711.26926 121.79127 706.2987 121.79127 L 579.3052 121.79127 C 574.33464 121.79127 570.3052 117.76183 570.3052 112.791267 C 570.3052 112.791266 570.3052 112.791265 570.3052 112.791264 L 570.3052 95.70745 C 570.3052 90.736887 574.33464 86.70745 579.3052 86.70745 C 579.3052 86.70745 579.3052 86.70745 579.3052 86.70745 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(575.3052 97.24936)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><g id="id16_Graphic"><path d="M 406.99667 86.70743 L 533.99017 86.70743 C 538.96073 86.70743 542.99017 90.73687 542.99017 95.70743 L 542.99017 112.79125 C 542.99017 117.76181 538.96073 121.79125 533.99017 121.79125 L 406.99667 121.79125 C 402.0261 121.79125 397.99667 117.76181 397.99667 112.79125 C 397.99667 112.79125 397.99667 112.79125 397.99667 112.791246 L 397.99667 95.70743 C 397.99667 90.73687 402.0261 86.70743 406.99667 86.70743 C 406.99667 86.70743 406.99667 86.70743 406.99667 86.70743 Z" fill="white"/><path d="M 406.99667 86.70743 L 533.99017 86.70743 C 538.96073 86.70743 542.99017 90.73687 542.99017 95.70743 L 542.99017 112.79125 C 542.99017 117.76181 538.96073 121.79125 533.99017 121.79125 L 406.99667 121.79125 C 402.0261 121.79125 397.99667 117.76181 397.99667 112.79125 C 397.99667 112.79125 397.99667 112.79125 397.99667 112.791246 L 397.99667 95.70743 C 397.99667 90.73687 402.0261 86.70743 406.99667 86.70743 C 406.99667 86.70743 406.99667 86.70743 406.99667 86.70743 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(402.99667 97.24934)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><text transform="translate(754.44446 42.333335)" fill="black"><tspan font-family="Helvetica" font-size="18" font-weight="500" x=".49658203" y="18" textLength="44.006836">IMAP</tspan></text><text transform="translate(754.44446 336.31574)" fill="black"><tspan font-family="Helvetica" font-size="18" font-weight="500" x=".47070312" y="18" textLength="129.05859">Message parser</tspan></text><g id="id19_Graphic"><path d="M 62.379463 467.87134 L 189.37296 467.87134 C 194.34353 467.87134 198.37296 471.90078 198.37296 476.87134 L 198.37296 493.95515 C 198.37296 498.92572 194.34353 502.95515 189.37296 502.95515 L 62.379463 502.95515 C 57.4089 502.95515 53.379463 498.92572 53.379463 493.95515 C 53.379463 493.95515 53.379463 493.95515 53.379463 493.95515 L 53.379463 476.87134 C 53.379463 471.90078 57.4089 467.87134 62.379463 467.87134 C 62.379463 467.87134 62.379463 467.87134 62.379463 467.87134 Z" fill="white"/><path d="M 62.379463 467.87134 L 189.37296 467.87134 C 194.34353 467.87134 198.37296 471.90078 198.37296 476.87134 L 198.37296 493.95515 C 198.37296 498.92572 194.34353 502.95515 189.37296 502.95515 L 62.379463 502.95515 C 57.4089 502.95515 53.379463 498.92572 53.379463 493.95515 C 53.379463 493.95515 53.379463 493.95515 53.379463 493.95515 L 53.379463 476.87134 C 53.379463 471.90078 57.4089 467.87134 62.379463 467.87134 C 62.379463 467.87134 62.379463 467.87134 62.379463 467.87134 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(58.379463 478.41325)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="21.143234" y="11" textLength="92.70703">AbstractMessage</tspan></text></g><g id="id20_Graphic"><path d="M 579.3053 464.96713 L 706.2988 464.96713 C 711.26936 464.96713 715.2988 468.99657 715.2988 473.96713 L 715.2988 491.05095 C 715.2988 496.0215 711.26936 500.05095 706.2988 500.05095 L 579.3053 500.05095 C 574.33474 500.05095 570.3053 496.0215 570.3053 491.05095 C 570.3053 491.05095 570.3053 491.05095 570.3053 491.05094 L 570.3053 473.96713 C 570.3053 468.99657 574.33474 464.96713 579.3053 464.96713 C 579.3053 464.96713 579.3053 464.96713 579.3053 464.96713 Z" fill="white"/><path d="M 579.3053 464.96713 L 706.2988 464.96713 C 711.26936 464.96713 715.2988 468.99657 715.2988 473.96713 L 715.2988 491.05095 C 715.2988 496.0215 711.26936 500.05095 706.2988 500.05095 L 579.3053 500.05095 C 574.33474 500.05095 570.3053 496.0215 570.3053 491.05095 C 570.3053 491.05095 570.3053 491.05095 570.3053 491.05094 L 570.3053 473.96713 C 570.3053 468.99657 574.33474 464.96713 579.3053 464.96713 C 579.3053 464.96713 579.3053 464.96713 579.3053 464.96713 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(575.3053 475.50904)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.139328" y="11" textLength="114.714844">AbstractMessagePart</tspan></text></g><g id="id21_Graphic"><path d="M 234.68808 467.87132 L 361.68158 467.87132 C 366.65214 467.87132 370.68158 471.90076 370.68158 476.87132 L 370.68158 493.95514 C 370.68158 498.9257 366.65214 502.95514 361.68158 502.95514 L 234.68808 502.95514 C 229.71752 502.95514 225.68808 498.9257 225.68808 493.95514 C 225.68808 493.95514 225.68808 493.95514 225.68808 493.95514 L 225.68808 476.87132 C 225.68808 471.90076 229.71752 467.87132 234.68808 467.87132 C 234.68808 467.87132 234.68808 467.87132 234.68808 467.87132 Z" fill="white"/><path d="M 234.68808 467.87132 L 361.68158 467.87132 C 366.65214 467.87132 370.68158 471.90076 370.68158 476.87132 L 370.68158 493.95514 C 370.68158 498.9257 366.65214 502.95514 361.68158 502.95514 L 234.68808 502.95514 C 229.71752 502.95514 225.68808 498.9257 225.68808 493.95514 C 225.68808 493.95514 225.68808 493.95514 225.68808 493.95514 L 225.68808 476.87132 C 225.68808 471.90076 229.71752 467.87132 234.68808 467.87132 C 234.68808 467.87132 234.68808 467.87132 234.68808 467.87132 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.68808 478.41323)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><g id="id22_Graphic"><path d="M 406.99665 464.96716 L 533.99015 464.96716 C 538.9607 464.96716 542.99015 468.9966 542.99015 473.96716 L 542.99015 491.05097 C 542.99015 496.02154 538.9607 500.05097 533.99015 500.05097 L 406.99665 500.05097 C 402.02609 500.05097 397.99665 496.02154 397.99665 491.05097 C 397.99665 491.05097 397.99665 491.05097 397.99665 491.05097 L 397.99665 473.96716 C 397.99665 468.9966 402.02609 464.96716 406.99665 464.96716 C 406.99665 464.96716 406.99665 464.96716 406.99665 464.96716 Z" fill="white"/><path d="M 406.99665 464.96716 L 533.99015 464.96716 C 538.9607 464.96716 542.99015 468.9966 542.99015 473.96716 L 542.99015 491.05097 C 542.99015 496.02154 538.9607 500.05097 533.99015 500.05097 L 406.99665 500.05097 C 402.02609 500.05097 397.99665 496.02154 397.99665 491.05097 C 397.99665 491.05097 397.99665 491.05097 397.99665 491.05097 L 397.99665 473.96716 C 397.99665 468.9966 402.02609 464.96716 406.99665 464.96716 C 406.99665 464.96716 406.99665 464.96716 406.99665 464.96716 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(402.99665 475.50906)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="22.482101" y="11" textLength="90.029297">AbstractMultipart</tspan></text></g><g id="id23_Graphic"><path d="M 579.3053 541.8662 L 706.2988 541.8662 C 711.26936 541.8662 715.2988 545.89565 715.2988 550.8662 L 715.2988 567.95002 C 715.2988 572.9206 711.26936 576.95002 706.2988 576.95002 L 579.3053 576.95002 C 574.33474 576.95002 570.3053 572.9206 570.3053 567.95002 C 570.3053 567.95002 570.3053 567.95002 570.3053 567.95002 L 570.3053 550.8662 C 570.3053 545.89565 574.33474 541.8662 579.3053 541.8662 C 579.3053 541.8662 579.3053 541.8662 579.3053 541.8662 Z" fill="white"/><path d="M 579.3053 541.8662 L 706.2988 541.8662 C 711.26936 541.8662 715.2988 545.89565 715.2988 550.8662 L 715.2988 567.95002 C 715.2988 572.9206 711.26936 576.95002 706.2988 576.95002 L 579.3053 576.95002 C 574.33474 576.95002 570.3053 572.9206 570.3053 567.95002 C 570.3053 567.95002 570.3053 567.95002 570.3053 567.95002 L 570.3053 550.8662 C 570.3053 545.89565 574.33474 541.8662 579.3053 541.8662 C 579.3053 541.8662 579.3053 541.8662 579.3053 541.8662 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(575.3053 552.4081)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="32.14714" y="11" textLength="70.69922">MessagePart</tspan></text></g><g id="id24_Graphic"><path d="M 234.68807 544.7704 L 361.68157 544.7704 C 366.65213 544.7704 370.68157 548.79984 370.68157 553.7704 L 370.68157 570.85422 C 370.68157 575.82478 366.65213 579.85422 361.68157 579.85422 L 234.68807 579.85422 C 229.7175 579.85422 225.68807 575.82478 225.68807 570.85422 C 225.68807 570.85422 225.68807 570.8542 225.68807 570.8542 L 225.68807 553.7704 C 225.68807 548.79984 229.7175 544.7704 234.68807 544.7704 C 234.68807 544.7704 234.68807 544.7704 234.68807 544.7704 Z" fill="white"/><path d="M 234.68807 544.7704 L 361.68157 544.7704 C 366.65213 544.7704 370.68157 548.79984 370.68157 553.7704 L 370.68157 570.85422 C 370.68157 575.82478 366.65213 579.85422 361.68157 579.85422 L 234.68807 579.85422 C 229.7175 579.85422 225.68807 575.82478 225.68807 570.85422 C 225.68807 570.85422 225.68807 570.8542 225.68807 570.8542 L 225.68807 553.7704 C 225.68807 548.79984 229.7175 544.7704 234.68807 544.7704 C 234.68807 544.7704 234.68807 544.7704 234.68807 544.7704 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.68807 555.3123)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="37.148117" y="11" textLength="60.697266">Attachment</tspan></text></g><g id="id25_Graphic"><path d="M 406.99668 541.86623 L 533.99018 541.86623 C 538.96074 541.86623 542.99018 545.89567 542.99018 550.86623 L 542.99018 567.95005 C 542.99018 572.9206 538.96074 576.95005 533.99018 576.95005 L 406.99668 576.95005 C 402.02612 576.95005 397.99668 572.9206 397.99668 567.95005 C 397.99668 567.95005 397.99668 567.95005 397.99668 567.95005 L 397.99668 550.86623 C 397.99668 545.89567 402.02612 541.86623 406.99668 541.86623 C 406.99668 541.86623 406.99668 541.86623 406.99668 541.86623 Z" fill="white"/><path d="M 406.99668 541.86623 L 533.99018 541.86623 C 538.96074 541.86623 542.99018 545.89567 542.99018 550.86623 L 542.99018 567.95005 C 542.99018 572.9206 538.96074 576.95005 533.99018 576.95005 L 406.99668 576.95005 C 402.02612 576.95005 397.99668 572.9206 397.99668 567.95005 C 397.99668 567.95005 397.99668 567.95005 397.99668 567.95005 L 397.99668 550.86623 C 397.99668 545.89567 402.02612 541.86623 406.99668 541.86623 C 406.99668 541.86623 406.99668 541.86623 406.99668 541.86623 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(402.99668 552.40814)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="44.489914" y="11" textLength="46.013672">Multipart</tspan></text></g><g id="id26_Graphic"><path d="M 62.37948 544.7704 L 189.37298 544.7704 C 194.34354 544.7704 198.37298 548.79985 198.37298 553.7704 L 198.37298 570.85423 C 198.37298 575.8248 194.34354 579.85423 189.37298 579.85423 L 62.37948 579.85423 C 57.40892 579.85423 53.37948 575.8248 53.37948 570.85423 C 53.37948 570.85423 53.37948 570.85422 53.37948 570.85422 L 53.37948 553.7704 C 53.37948 548.79985 57.40892 544.7704 62.37948 544.7704 C 62.37948 544.7704 62.37948 544.7704 62.37948 544.7704 Z" fill="white"/><path d="M 62.37948 544.7704 L 189.37298 544.7704 C 194.34354 544.7704 198.37298 548.79985 198.37298 553.7704 L 198.37298 570.85423 C 198.37298 575.8248 194.34354 579.85423 189.37298 579.85423 L 62.37948 579.85423 C 57.40892 579.85423 53.37948 575.8248 53.37948 570.85423 C 53.37948 570.85423 53.37948 570.85422 53.37948 570.85422 L 53.37948 553.7704 C 53.37948 548.79985 57.40892 544.7704 62.37948 544.7704 C 62.37948 544.7704 62.37948 544.7704 62.37948 544.7704 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(58.37948 555.31232)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="25.479172" y="11" textLength="84.035156">MessageParser</tspan></text></g><g id="id27_Graphic"><path d="M 579.3053 393.8764 L 706.2988 393.8764 C 711.26936 393.8764 715.2988 397.90584 715.2988 402.8764 L 715.2988 419.96021 C 715.2988 424.93078 711.26936 428.96021 706.2988 428.96021 L 579.3053 428.96021 C 574.33474 428.96021 570.3053 424.93078 570.3053 419.96021 C 570.3053 419.96021 570.3053 419.96021 570.3053 419.9602 L 570.3053 402.8764 C 570.3053 397.90584 574.33474 393.8764 579.3053 393.8764 C 579.3053 393.8764 579.3053 393.8764 579.3053 393.8764 Z" fill="white"/><path d="M 579.3053 393.8764 L 706.2988 393.8764 C 711.26936 393.8764 715.2988 397.90584 715.2988 402.8764 L 715.2988 419.96021 C 715.2988 424.93078 711.26936 428.96021 706.2988 428.96021 L 579.3053 428.96021 C 574.33474 428.96021 570.3053 424.93078 570.3053 419.96021 C 570.3053 419.96021 570.3053 419.96021 570.3053 419.9602 L 570.3053 402.8764 C 570.3053 397.90584 574.33474 393.8764 579.3053 393.8764 C 579.3053 393.8764 579.3053 393.8764 579.3053 393.8764 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(575.3053 404.4183)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><g id="id28_Graphic"><path d="M 406.99668 393.87642 L 533.99018 393.87642 C 538.96075 393.87642 542.99018 397.90585 542.99018 402.87642 L 542.99018 419.96023 C 542.99018 424.9308 538.96075 428.96023 533.99018 428.96023 L 406.99668 428.96023 C 402.02612 428.96023 397.99668 424.9308 397.99668 419.96023 C 397.99668 419.96023 397.99668 419.96023 397.99668 419.96023 L 397.99668 402.87642 C 397.99668 397.90585 402.02612 393.87642 406.99668 393.87642 C 406.99668 393.87642 406.99668 393.87642 406.99668 393.87642 Z" fill="white"/><path d="M 406.99668 393.87642 L 533.99018 393.87642 C 538.96075 393.87642 542.99018 397.90585 542.99018 402.87642 L 542.99018 419.96023 C 542.99018 424.9308 538.96075 428.96023 533.99018 428.96023 L 406.99668 428.96023 C 402.02612 428.96023 397.99668 424.9308 397.99668 419.96023 C 397.99668 419.96023 397.99668 419.96023 397.99668 419.96023 L 397.99668 402.87642 C 397.99668 397.90585 402.02612 393.87642 406.99668 393.87642 C 406.99668 393.87642 406.99668 393.87642 406.99668 393.87642 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(402.99668 404.41832)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><line x1="51.289753" y1="324.4296" x2="1029.44444" y2="324.21053" stroke="#cecece" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="53.379464" y1="631.97503" x2="1031.53415" y2="632.12863" stroke="#cecece" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(760.43993 644.48753)" fill="black"><tspan font-family="Helvetica" font-size="18" font-weight="500" x=".4633789" y="18" textLength="132.07324">Message builder</tspan></text><g id="id44_Graphic"><path d="M 62.379463 718.48244 L 189.37296 718.48244 C 194.34353 718.48244 198.37296 722.51188 198.37296 727.48244 L 198.37296 744.56626 C 198.37296 749.5368 194.34353 753.56626 189.37296 753.56626 L 62.379463 753.56626 C 57.4089 753.56626 53.379463 749.5368 53.379463 744.56626 C 53.379463 744.56626 53.379463 744.56625 53.379463 744.56625 L 53.379463 727.48244 C 53.379463 722.51188 57.4089 718.48244 62.379463 718.48244 C 62.379463 718.48244 62.379463 718.48244 62.379463 718.48244 Z" fill="white"/><path d="M 62.379463 718.48244 L 189.37296 718.48244 C 194.34353 718.48244 198.37296 722.51188 198.37296 727.48244 L 198.37296 744.56626 C 198.37296 749.5368 194.34353 753.56626 189.37296 753.56626 L 62.379463 753.56626 C 57.4089 753.56626 53.379463 749.5368 53.379463 744.56626 C 53.379463 744.56626 53.379463 744.56625 53.379463 744.56625 L 53.379463 727.48244 C 53.379463 722.51188 57.4089 718.48244 62.379463 718.48244 C 62.379463 718.48244 62.379463 718.48244 62.379463 718.48244 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(58.379463 729.02435)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="21.143234" y="11" textLength="92.70703">AbstractMessage</tspan></text></g><g id="id46_Graphic"><path d="M 234.68808 718.48243 L 361.68157 718.48243 C 366.65214 718.48243 370.68157 722.51187 370.68157 727.48243 L 370.68157 744.56625 C 370.68157 749.5368 366.65214 753.56625 361.68157 753.56625 L 234.68808 753.56625 C 229.71751 753.56625 225.68808 749.5368 225.68808 744.56625 C 225.68808 744.56625 225.68808 744.56625 225.68808 744.56625 L 225.68808 727.48243 C 225.68808 722.51187 229.71751 718.48243 234.68808 718.48243 C 234.68808 718.48243 234.68808 718.48243 234.68808 718.48243 Z" fill="white"/><path d="M 234.68808 718.48243 L 361.68157 718.48243 C 366.65214 718.48243 370.68157 722.51187 370.68157 727.48243 L 370.68157 744.56625 C 370.68157 749.5368 366.65214 753.56625 361.68157 753.56625 L 234.68808 753.56625 C 229.71751 753.56625 225.68808 749.5368 225.68808 744.56625 C 225.68808 744.56625 225.68808 744.56625 225.68808 744.56625 L 225.68808 727.48243 C 225.68808 722.51187 229.71751 718.48243 234.68808 718.48243 C 234.68808 718.48243 234.68808 718.48243 234.68808 718.48243 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.68808 729.02434)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="34.485031" y="11" textLength="66.023438">AbstractPart</tspan></text></g><g id="id49_Graphic"><path d="M 234.68806 795.3815 L 361.68156 795.3815 C 366.65213 795.3815 370.68156 799.41094 370.68156 804.3815 L 370.68156 821.4653 C 370.68156 826.4359 366.65213 830.4653 361.68156 830.4653 L 234.68806 830.4653 C 229.7175 830.4653 225.68806 826.4359 225.68806 821.4653 C 225.68806 821.4653 225.68806 821.4653 225.68806 821.4653 L 225.68806 804.3815 C 225.68806 799.41094 229.7175 795.3815 234.68806 795.3815 C 234.68806 795.3815 234.68806 795.3815 234.68806 795.3815 Z" fill="white"/><path d="M 234.68806 795.3815 L 361.68156 795.3815 C 366.65213 795.3815 370.68156 799.41094 370.68156 804.3815 L 370.68156 821.4653 C 370.68156 826.4359 366.65213 830.4653 361.68156 830.4653 L 234.68806 830.4653 C 229.7175 830.4653 225.68806 826.4359 225.68806 821.4653 C 225.68806 821.4653 225.68806 821.4653 225.68806 821.4653 L 225.68806 804.3815 C 225.68806 799.41094 229.7175 795.3815 234.68806 795.3815 C 234.68806 795.3815 234.68806 795.3815 234.68806 795.3815 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.68806 805.9234)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="37.148117" y="11" textLength="60.697266">Attachment</tspan></text></g><g id="id51_Graphic"><path d="M 62.37948 795.3815 L 189.37298 795.3815 C 194.34354 795.3815 198.37298 799.41095 198.37298 804.3815 L 198.37298 821.46533 C 198.37298 826.4359 194.34354 830.46533 189.37298 830.46533 L 62.37948 830.46533 C 57.40892 830.46533 53.37948 826.4359 53.37948 821.46533 C 53.37948 821.46533 53.37948 821.46533 53.37948 821.46533 L 53.37948 804.3815 C 53.37948 799.41095 57.40892 795.3815 62.37948 795.3815 C 62.37948 795.3815 62.37948 795.3815 62.37948 795.3815 Z" fill="white"/><path d="M 62.37948 795.3815 L 189.37298 795.3815 C 194.34354 795.3815 198.37298 799.41095 198.37298 804.3815 L 198.37298 821.46533 C 198.37298 826.4359 194.34354 830.46533 189.37298 830.46533 L 62.37948 830.46533 C 57.40892 830.46533 53.37948 826.4359 53.37948 821.46533 C 53.37948 821.46533 53.37948 821.46533 53.37948 821.46533 L 53.37948 804.3815 C 53.37948 799.41095 57.40892 795.3815 62.37948 795.3815 C 62.37948 795.3815 62.37948 795.3815 62.37948 795.3815 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(58.37948 805.9234)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="24.474289" y="11" textLength="86.04492">MessageBuilder</tspan></text></g><line x1="125.8762" y1="193.38198" x2="125.87621" y2="224.29724" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="642.80195" y1="122.29127" x2="642.80195" y2="147.39818" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="642.80195" y1="193.382" x2="642.80195" y2="224.29726" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="298.18482" y1="193.38197" x2="298.18481" y2="224.29723" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="470.4934" y1="122.29125" x2="470.4934" y2="147.39817" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="470.4934" y1="193.38199" x2="470.4934" y2="224.29725" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="125.87622" y1="503.45515" x2="125.876224" y2="534.3704" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="642.80205" y1="429.46021" x2="642.80205" y2="454.56713" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="642.80205" y1="500.55095" x2="642.80205" y2="531.4662" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="298.18483" y1="503.45514" x2="298.18482" y2="534.3704" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="470.49342" y1="429.46023" x2="470.4934" y2="454.56716" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="470.4934" y1="500.55097" x2="470.49342" y2="531.46623" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="125.87622" y1="754.06626" x2="125.876225" y2="784.9815" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="298.18482" y1="754.06625" x2="298.18482" y2="784.9815" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(754.44444 358.31573)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".06982422" y="13" textLength="213.85254">For full messages fetched from IMAP</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x="213.69385" y="13" textLength="46.236328"> or POP</tspan></text><text transform="translate(760.43997 666.4875)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".29833984" y="13" textLength="7.940918">T</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x="6.79834" y="13" textLength="239.90332">o generate messages to send over SMTP</tspan></text><text transform="translate(754.44444 64.333336)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".22241211" y="13" textLength="274.55518">With messages fetched through MIME structure</tspan></text><text transform="translate(99.37621 289.10532)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".12548828" y="13" textLength="52.749023">message</tspan></text><text transform="translate(220.68154 281.10532)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".20556641" y="13" textLength="149.58887">attachment of text content</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x="35.977783" y="29" textLength="78.044434">of a message</tspan></text><text transform="translate(228.68482 851.56846)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".1328125" y="13" textLength="6.5">fi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x="6.6328125" y="13" textLength="132.234375">le or image attachment</tspan></text><text transform="translate(443.4037 289.10532)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".075927734" y="13" textLength="49.848145">multipart</tspan></text><text transform="translate(571.21232 289.10533)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".49145508" y="13" textLength="138.01709">message as attachment</tspan></text><text transform="translate(80.96592 596.4625)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".39550781" y="13" textLength="93.208984">message parser</tspan></text><text transform="translate(222.77125 588.4625)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".20556641" y="13" textLength="149.58887">attachment of text content</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x="35.977783" y="29" textLength="78.044434">of a message</tspan></text><text transform="translate(445.4934 596.4625)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".075927734" y="13" textLength="49.848145">multipart</tspan></text><text transform="translate(573.30203 596.46252)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".49145508" y="13" textLength="138.01709">message as attachment</tspan></text><text transform="translate(77.87621 851.5685)" fill="#717171"><tspan font-family="Helvetica" font-size="13" font-weight="500" fill="#717171" x=".30688477" y="13" textLength="95.38623">message builder</tspan></text></g></g></svg>