1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-04 16:45:09 -05:00
Commit Graph

424 Commits

Author SHA1 Message Date
Daniel Applebaum
9310f3f6c6 Fixes Issue 1441
Shutdown threadPool when Service is destroyed.
2010-04-20 03:22:43 +00:00
Daniel Applebaum
e22f3d2c1b Provide user control over the account size measurement and search
result counting that are displayed in the Accouts Activity.  These can
both be slow, so some users may opt-out.
2010-04-19 02:55:02 +00:00
cketti
1d361d751e Added meta-Tag with charset=utf-8 to about box html source to fix UTF-8 issues. Thanks to gerberstef for the patch.
Fixes issue 1434
2010-04-18 16:57:49 +00:00
cketti
a7f9cf0037 Removed unused code implementing the UrlInterceptHandler interface 2010-04-17 21:28:59 +00:00
cketti
57acdb7033 Create 'folders' table with 'flagged_count' field when installing K-9 Mail. Previously it was only added when updating the application. 2010-04-17 21:27:06 +00:00
Daniel Applebaum
405d5f2e59 Only show flag-oriented pre-canned searches when message stars are
enabled.  This is an interim workaround for Issue 1411.
2010-04-17 04:41:25 +00:00
Daniel Applebaum
f27aa4c5c0 Only show flagged message counters when star preference is selected 2010-04-17 04:33:25 +00:00
Daniel Applebaum
5bd24fe425 Fixes Issue 1410
Fixes Issue 1431

Present flagged message count inside a star, matching the visual
presentation on individual messages.

Provide display of unread and flagged message counts for canned
searches.

Perhaps the message counts for searches and account size display
should be defeatable for improved speed.
2010-04-17 03:32:17 +00:00
Daniel Applebaum
7cf0ec7327 Needed for prior commits 2010-04-16 18:34:36 +00:00
Daniel Applebaum
5e30d5a784 Fixes Issue 1429
Remove dead code.
2010-04-16 14:46:44 +00:00
Daniel Applebaum
1079e03495 Fixes Issue 1430
Displaying the progress in the list was way too slow.
2010-04-16 14:44:01 +00:00
Daniel Applebaum
664c4d6a78 Fixes Issue 1394
Computing the account size is pretty slow for big accounts, and making
this functionality optional should be considered.

Also, displays the number of flagged messages ("stars") in each
account in the Accounts list and each folder in the FolderList.  Needs
better presentation of the flagged message counts, but this works as a
proof-of-concept and gets the data structures built.
2010-04-16 14:33:54 +00:00
cketti
110a6eb1c7 Removed unnecessary null pointer check. 2010-04-16 12:48:03 +00:00
cketti
57cc4cd735 Code cleanup. Fixed lots of warnings reported by Eclipse.
- Removed unused imports
- Removed unused variables/code
- Parametrized raw types
- Added @Override annotations
- Added hashCode() when equals() was overriden
2010-04-16 12:20:10 +00:00
Daniel Applebaum
86f3b28f79 Fixes Issue 1413
Look for + as acknowledgement that we're in IDLE mode, not "idling"
string.  

Also, to help with battery life:
1) Give up trying to IDLE after 10 failures.
2) Increase retry delays
2010-04-15 03:17:25 +00:00
Daniel Applebaum
47a80fbd6c Fixes Issue 1130
Fixes Issue 1308

Some IMAP servers seem not to provide an INTERNALDATE response.
2010-04-14 13:02:04 +00:00
cketti
d90e4020be Fixed NullPointerException if home button was pressed in AccountSetupBasics activity and no account object was created yet. 2010-04-08 11:54:41 +00:00
cketti
96489049d9 Use android.text.util.Regex.EMAIL_ADDRESS_PATTERN for email address verification before account creation.
Fixes issue 1386
2010-04-08 11:51:54 +00:00
Daniel Applebaum
0cd04a66c1 Terminate pointless comment. 2010-04-06 04:27:47 +00:00
Daniel Applebaum
9a8126d89c Addresses Issue 1348 and Issue 95
Not done, yet, but available for developers to use.

Definite things to be done in the short term:
1) Allow user to hide canned searches in Accounts Activity
2) Make newly arrived mail immediately appear in search results.

Possible improvements:
3) User-definable searches
4) Make newly deleted mail immediately disappear search results.
5) Make message with flag changes immediately appear/disappear from
   search results.
6) Show search result size in Accounts Activity.
2010-04-06 02:54:48 +00:00
Daniel Applebaum
d08c9d6ce2 Fixes Issue 957
Fixes Issue 868

May not be perfect, either, but may help in some situations with
getting all emails to arrive via push.
2010-04-06 02:39:57 +00:00
Daniel Applebaum
3c7eea7fa5 Remove controller first 2010-04-06 02:38:22 +00:00
Daniel Applebaum
9d2a4c3af9 Protect against a NullPointerException that happened once, but should
never have happened.
2010-04-06 02:35:42 +00:00
cketti
0a4577c930 Added code to only return newly created Account objects once they have been saved to the database (or are requested by UUID). This will allow the account creation process to be aborted without the application crashing (see issue 1375).
I don't particularly like this fix and hope to find a more elegant solution to this problem.

Kind of fixes issue 1375
2010-04-03 23:44:26 +00:00
cketti
f911b0e436 Added support for the Android 1.6 intent android.intent.action.SEND_MULTIPLE in a way that should work on older devices too. Worked fine in the Android 1.5 emulator.
Fixes issue 1210
2010-04-02 01:43:56 +00:00
Daniel Applebaum
5d18781156 Fixes Issue 1343
Fixes Issue 1126

Apply skisters2's patch for the POP notifications.  Also, add another
setRingNotified at the beginning of each poll to make sure the account
is in the right state.
2010-03-30 02:58:21 +00:00
cketti
648bec3efc Include support for another bad date format in the IMAP response parser.
Fixes issue 1295
2010-03-25 15:21:05 +00:00
cketti
50cd60787f Don't convert MIME content-type headers to lower case as this seems to cause problems.
Thanks to xingwang.xu for the analysis.

Fixes issue 1289
2010-03-25 14:39:07 +00:00
cketti
d595033fa8 Work-around for a buggy POP3 server software that places "+OK" in front of every line of the unique-id listing (UIDL response).
Fixes issue 1237
2010-03-25 13:42:48 +00:00
cketti
938317e700 Get rid of the "Did not get proper search result" message. This helps with buggy IMAP servers that don't return an untagged SEARCH response if nothing was found. Other untagged responses are simply ignored.
Fixes Issue 907
2010-03-25 01:24:21 +00:00
Jesse Vincent
a923d066d4 Revert "Fix for issue 1138: New emails after the first do not play new mail ringtone until notifications are cleared by skister2"
(Temporary revert until an NPE is dealt with)

This reverts commit 4bf862a827a456ffed20be707387b9ca4f2b721f.
2010-03-24 01:11:58 +00:00
Jesse Vincent
8ca034c3db Patch for issue 946: Only able to get contacts from a primary google
account by cketti
2010-03-23 03:19:12 +00:00
Jesse Vincent
50d1d7e7aa Fix for issue 1138: New emails after the first do not play new mail ringtone until notifications are cleared by skister2 2010-03-23 02:41:45 +00:00
Daniel Applebaum
fa73f71e95 Fixes Issue 790
Tolerate malformed UIDL response.  Thanks to @bengnc for thorough
analysis in Issue 790.
2010-03-18 03:43:39 +00:00
Daniel Applebaum
76f33ba5ff Fixes Issue 1330
Flush the output stream so that small messages have bodies.  (And
presumably so that the entirety of big messages are sent.)
2010-03-18 03:23:45 +00:00
Daniel Applebaum
ec9f395498 Fixes Issue 1090
Don't try to fetch content while reporting errors.

Generate unique URL for each upload.
2010-03-18 02:50:05 +00:00
Daniel Applebaum
24d96c36da Fixes Issue 1284
Remove notifications for removed accounts
2010-03-13 05:00:01 +00:00
Daniel Applebaum
bbedf7b9e0 Fixes Issue 1314 2010-03-13 04:49:15 +00:00
Daniel Applebaum
9d5803b174 Fixes Issue 981
Allow user to turn off gesture-based control.

Also, consolidate so that gestures could be used by other subclasses
of K9Activity.  Probably should be made usable to K9ListActivity, too,
by making MyGestureDetector its own class and make it used by
K9Activity and K9ListActivity, and have the Activities implement a
callback interface for onNext and onPrevious.
2010-03-07 23:43:27 +00:00
Daniel Applebaum
f0808fb3e0 Fixes Issue 1291
Provides for the user to elect to have certain folders displayed first
in the FolderList.  Folders so elected are displayed in alphabetical
order first, then folders not so elected are displayed alphabetical
order.

No special handling is done for Inbox any more, except that it is in
"top group" by default, to preserve current behavior until the user
changes the settings.
2010-03-07 17:02:21 +00:00
Daniel Applebaum
ecc10e572f Fixes Issue 1224
Implement DEFLATE compression for IMAP communication, enabled by
default.  User can disable compression for Wi-Fi, Mobile, or Other
networks, if it causes problems or if uncompressed communication is
faster, which is possible on Wi-Fi and wired networks, especially.

"Other" is to allow for the Android platform to introduce new
networking types without having to immediately change K-9 Mail.
However, as those arise, new network types should be added as explicit
types in K-9 Mail.
2010-03-07 00:30:40 +00:00
Daniel Applebaum
c0e4220b82 Fixes Issue 1116
Fixes Issue 1278
Fixes Issue 119
Fixes Issue 1077
Fixes Issue 1238

Worked performed by danapple0 and cketti in
https://k9mail.googlecode.com/svn/k9mail/branches/issue1116

Add support for most batch ops (except move and copy) in search
results.  Add support for batch move and copy on real folders.

Increase efficiency of bulk IMAP moves and copies by doing as multiple
UID operations.

Eliminated serialization of Account objects.

Provide up-references in useful places to make all future code cleaner
and more efficient.

Fixed a bunch of draft handling

Merged from issue1116 branch, except for Account.java, which was
copied wholesale.  Account.java was manually merged in issue1116
branch at r1489

svn merge -r 1459:1489 https://k9mail.googlecode.com/svn/k9mail/branches/issue1116 .
cp ../issue1116/src/com/fsck/k9/Account.java src/com/fsck/k9/Account.java
2010-03-04 04:00:30 +00:00
cketti
6fb59467b7 Changed SmtpTransport.writeLine() to only use one OutputStream.write() call. Apparently some servers got the "be liberal in what you accept from others" part of the robustness principle wrong. When we used multiple calls in writeLine() (command + CR + LF) a separate TCP packet was send each time. It appears that those broken servers accepted the DATA command after DATA + CR and interpreted the LF as part of the actual data. This caused our headers to become part of the body because that LF was interpreted as the empty line that separates headers and body.
As a side effect of this fix sending mail could be slightly faster now due to less packets being sent.

Big thanks to Kevin Newland of Michigan Technological University for organizing a test account.

Fixes issue 799
2010-03-02 02:48:52 +00:00
Daniel Applebaum
97c7bf1d65 Hopeful (but untested code) to get updated capabilities after
successful CRAM-MD5 authentication.
2010-02-27 17:48:00 +00:00
Daniel Applebaum
f6e7d5d4c0 Fixes Issue 1252
Handle CAPABILITY response in following cases:
1) When sent as part of the banner, no longer sends explicit
CAPABILITY command

2) When sent as an UNTAGGED response to LOGIN, updates stored
   capabilities.

3) When sent as part of the TAGGED response to LOGIN, updates stored
   capabilities.

Due to odd implementation of the CRAM-MD5 authentication, the
capability updates will not happen as part of the CRAM-MD5
authentication.
2010-02-27 17:34:38 +00:00
Bao-Long Nguyen-Trong
6b5ea9feda Reverted the revered version of AttachmentProvider so that people who used the attachment on sd card can still get to their attachments 2010-02-20 20:15:21 +00:00
cketti
ec3d9eb9ea Removed code from ImapStore.internalOpen() that tried to get the path delimeter before SELECTing a mailbox. This shouldn't be a problem since the delimeter
a) is already known if the server supports the NAMESPACE capability.
b) is included in the prefix anyway (=also known if namespace was set manually).
c) isn't needed when selecting a mailbox because we currently don't support folder hierarchy. So the delimeter is included in the folder name.

Fixes issue 1217
2010-02-20 01:07:38 +00:00
Jesse Vincent
f9d39e4814 Back out Attachments-on-SD support (it's on a feature branch now, while
Bao-Long makes it extra-awesome)

This commit should revert:
r1445
r1437
r1436
r1449
r1442
r1441
r1419
r1414
r1413
2010-02-18 03:28:31 +00:00
Bao-Long Nguyen-Trong
c5851f2866 Fixed issue 698: Set default attachment preview image in the code (and not only in layout) so that whne moving from a message to another we get the right preview 2010-02-16 06:53:02 +00:00
cketti
f7094a2a8e I broke email address validation with r1447. I changed EmailAddressValidator.isValid() to only accept email addresses without name part ('foo@bar.com' but not '"snafu" foo@bar.com') because AccountSetupBasics used it to verify the email address for an account. With the old validator spaces were allowed in the email field but lead to an exception later (issue 849). Unfortunately I missed the fact that there are implicit calls to isValid() to validate email addresses e.g. in the 'To field 2010-02-15 12:51:38 +00:00
cketti
51b92aaf80 Fixes issue 1225 2010-02-14 15:51:09 +00:00
cketti
6d84f199c5 Enforce maximum line length for 8-bit encoded messages transmitted via SMTP (998 characters + CRLF).
Fixes issue 1176
2010-02-13 23:45:45 +00:00
cketti
ab4e2ca2ec Commented out enhancements introduced in r1443 so we don't loose Android 1.5 support. 2010-02-13 19:35:47 +00:00
Bao-Long Nguyen-Trong
e435d9d616 Fixed issue 1205: Attachment storage location setting now takes effect immediatly. LocalStore is also better at handling when attachment are stored in a mix of internal and external storage (migration state after a setting change) 2010-02-13 19:07:10 +00:00
cketti
7b75b07f1f Fixes issue 849 2010-02-13 17:26:54 +00:00
Daniel Applebaum
2c3da067c3 Fixes Issue 1219
At cketti's suggestion, change the methodology for counting
server-side unread messages on an IMAP server from STATUS (UNSEEN) to
SEARCH UNSEEN NOT DELETED.  STATUS (UNSEEN) does not ignore DELETED
but unexpunged messages and leads to incorrect results.

http://www.mail-archive.com/c-client@u.washington.edu/msg00929.html
http://www.mail-archive.com/c-client@u.washington.edu/msg00931.html

This variant only checks for unread messages in the last 300 messages
in the folder, so will be wrong if there are unread messages earlier
in the folder.  However, it'll be more often correct than the old
version for the marjority of users.

Also, change the opening of folders for IMAP IDLE purposes to
read-only using EXAMINE instead of SELECT.
2010-02-13 17:02:27 +00:00
Daniel Applebaum
645ce28e18 Throwing the Exception will, at least, cause the exponential back-off
to take effect.
2010-02-13 15:14:28 +00:00
cketti
ae12453a57 Implement support for android.intent.action.SEND_MULTIPLE (e.g. send multiple images from gallery)
Fixes issue 1210
2010-02-12 15:21:10 +00:00
Bao-Long Nguyen-Trong
6fe2dad5cc Added some defensive code to prevent crashes caused by the LocalStore getting in a bad state due to issue 1205 (still being worked on). This fixes issue 1214. 2010-02-11 21:16:37 +00:00
Bao-Long Nguyen-Trong
8d8233bcc0 Store attachment on sd card is now off by default (which is what it should have been in the first place) 2010-02-11 05:37:50 +00:00
cketti
2bd4f9632b Better handling of IMAP FETCH responses.
Fixes issue 1068
2010-02-10 13:52:25 +00:00
Daniel Applebaum
e83a428107 Far more advanced poll scheduler. Now it remembers that finish time
of the last successful periodic mail and computes the next start time
as an offset from that successful finish.  The ramifications of this
new method is that changing polling interval on an account does not
force delaying all accounts to poll next in the future by the new
interval.  Instead, K-9 Mail now adjusts the next poll time based on
what the next poll time should be based on the last poll finish and
the new interval.  

Example 1: In the old way, if the old polling interval was 1 hour, and
the next poll was 50 minutes away (10 minutes have passed), and you
changed the interval to 15 minutes, the poll would happen 15 minutes
from now.  In the new way, the next poll will happen only 5 minutes
from now, which is 15 minutes since the last poll.

Example 2: In the old way, if the old polling interval was 1 hour, and
the next poll was 10 minutes away (50 minutes have passed), and you
changed the interval to 30 minutes, the poll would happen 30 minutes
from now.  The next poll would then happen actually 80 minutes after
the previous poll completed.  In the new way, it'll actually happen
immediately, because the time for the next poll, based on the new
schedule, has already passed.

Similar scenarios happen when a loss of network connectivity
occurs. In the old way, polling would resume using the restoration of
connectivity as the starting point.  Each time network connectivity
was lost and restored, the next poll would be further delayed.  *If
connectivity was lost and restored frequently, a poll might never
happen!* In the new way, the next poll is rescheduled based on the
time of the last successful poll, so will be rescheduled just like it
was before the loss of connectivity.  If the time has already been
passed, the poll will happen immediately.
2010-02-10 06:18:35 +00:00
cketti
48c7189d03 Fix r1436 2010-02-09 16:57:30 +00:00
cketti
80ae0402e5 Fixes issue 1199 2010-02-09 15:41:40 +00:00
Daniel Applebaum
03a06696dc Pre-r660 we didn't have this line, and things worked better. Also see
Troy Engel's comments in Issue 936.  If this commit isn't
satisfactory, perhaps try Troy's suggestion.

Fixes Issue 936.
2010-02-09 03:34:49 +00:00
Daniel Applebaum
23e5a132d4 Provide title bar display of next polling time 2010-02-09 03:26:40 +00:00
Daniel Applebaum
c12f720ba0 Lower logging level for CoreService and provide instance class name. 2010-02-09 03:11:15 +00:00
Daniel Applebaum
49534f22fc Fixes Issue 834
Provide for setting Sent folder to -NONE- which suppresses actually
saving sent mail in any folder.

Also, eliminate logging which folders are not configured for pushing.
It was just too much logging.
2010-02-09 03:03:40 +00:00
Daniel Applebaum
790ae2e25c Fixes Issue 1194
Do both a poll and push reset when connectivity or background data
status changes.
2010-02-09 01:14:55 +00:00
cketti
7cafc8547b Removed unnecessary FIXME comment 2010-02-08 19:12:40 +00:00
cketti
033e0d40de Optional signatures on per identity basis. Original patch by jiri.tyr (thanks!) slightly modified by me.
Fixes issue 461
2010-02-08 17:47:00 +00:00
cketti
3b6cccdf7a Use Reflection to call WebSettings.setBlockNetworkLoads() to prevent info leaks via external resource loading.
Fixes issue 1183
2010-02-08 03:23:41 +00:00
Daniel Applebaum
164ee7cbfd Fixes Issue 1059
Only reschedule polling and setup pushing when necessary due to
particular setting changes.  Makes the K-9 Mail UI much more
responsive to setting changes that do not affect polling and pushing.

The poll schedule is deliberately only rescheduled when the period is
decreased.  An increase in period will still allow the next scheduled
check to happen as originally scheduled.
2010-02-07 21:23:33 +00:00
Daniel Applebaum
2f8f52fb0b Fixes Issue 1112
Fixes Issue 1034

Refresh Account from Preferences, so that it'll have a fresh copy of
all information.  Failure to do this caused the AccountSettings
Activity to show stale information when invoked repeatedly from the
same prior Activity.
2010-02-07 16:05:29 +00:00
Bao-Long Nguyen-Trong
c497485b2f Better message flag management so that we don't end up with (POP3) messages having both X_DOWNLOADED_FULL and X_DOWNLOADED_PARTIAL 2010-02-07 06:05:11 +00:00
Bao-Long Nguyen-Trong
46bff831d1 Using X_DOWNLOADED_FULL flag instead of the X_DOWNLOADED_PARTIAL on to determine if we need to show the downloading icon. Some POP3 messages carry both flags. 2010-02-07 06:00:28 +00:00
Bao-Long Nguyen-Trong
131280c3f2 Still init LocalStore.mExternalAttachmentsDir even if sd card is not ready so that the object does not end up in a bad state 2010-02-07 05:58:04 +00:00
Daniel Applebaum
1fb03a45a0 Fixes Issue 1059
Provides for menu items to quickly change the mode of displayed
folders.  Also, reorganizes the menu to have an Advanced sub-menu,
like Accounts page has.

Desparately needs a new icon for the Folders menu item.
2010-02-06 23:23:22 +00:00
Daniel Applebaum
4fa4f22f2c Fixes Issue 494
Allow for setting the Outbox to have any name, as tying it to a server
side folder does not make sense.  It is never synced.
2010-02-06 22:36:22 +00:00
Bao-Long Nguyen-Trong
8403a265d9 We still need to be able to instanciate the LocalStore when the sd card is not mounted. So we do no throw an exception then. Exception will be thrown when we try to do attachment related things 2010-02-06 15:44:21 +00:00
Bao-Long Nguyen-Trong
55dac7ee4e Added option to have attachments store on sd card
(this is still a rough implementation)
2010-02-06 15:22:59 +00:00
Bao-Long Nguyen-Trong
49b223e20c Fixed issue 140 and issue 950: for partially downloaded messages, displaying what we already have while downloading the full message in the background
TODO: Need better icon indicating that the message is being fetched
2010-02-06 14:49:36 +00:00
Daniel Applebaum
6f064e1193 Partial implementation for Issue 1059. Doesn't help those without
physical keyboards, though, and should be modified to only re-setup
pushers.  Current implementation causes a wasteful reschedule of
polling.

Also gets the help Toast for the folder up-to-date after the
FolderList/MessageList split.
2010-02-06 05:55:40 +00:00
Daniel Applebaum
9ec77a9f9a Fixes Issue 1182
Never set up K9mail-errors or the Outbox for pushing
2010-02-06 05:35:15 +00:00
cketti
c64c0a1c30 Replaced base64 as default encoding for text bodies with quoted-printable. Please use issue 1176 for discussion. 2010-02-05 14:26:09 +00:00
cketti
14ee970b18 Fixed EOLConvertingOutputStream.
write('\r');flush();write('\n'); would lead to "\r\n\r\n" instead of simply "\r\n";
2010-02-05 02:36:52 +00:00
cketti
0422cae33e Implemented data stuffing. 2010-02-05 02:32:32 +00:00
cketti
45036ae5c8 Use 8bit transfer encoding for the text body if SMTP server advertises 8BITMIME. In all other cases base64 is still used (including saved copies in IMAP "Sent" folder).
Feel free to revert this if anything breaks.
2010-02-04 23:37:50 +00:00
cketti
6480e78b97 r1396 caused trouble for some clients due to a missing "MIME-Version" header. This should fix the problem. 2010-02-04 17:28:35 +00:00
Jesse Vincent
a9b538fd09 stop views from "resetting" to previous intents on rotate. 2010-02-04 02:38:30 +00:00
Jesse Vincent
5ce80cadaa Move FolderList initialization a bit earlier so as to not explode on reuse of the activity.
Fixes issue 1164
2010-02-04 01:49:56 +00:00
cketti
88854f4123 Fixes issue 1171. 2010-02-03 23:27:33 +00:00
cketti
c6d29cb10e Fixes issue 21 (All messages are turned into multipart messages) 2010-02-03 19:56:20 +00:00
cketti
8049e90b8c Changed IMAP command "UID SEARCH (HEADER MESSAGE-ID %s)" to "UID SEARCH HEADER MESSAGE-ID %s"
Fixes issue 1031.
2010-02-03 17:25:15 +00:00
Jesse Vincent
74aac85048 Use a real hostname rather than localhost.localdomain.
Fixes Issue 45

Patch by cketti
2010-02-02 02:06:35 +00:00
Jesse Vincent
a58095aae1 URLEncode username and password for accounts, so as to not fall apart on
nice simple characters like ':' in passwords.

Patch by cketti

Fixes Issue 1155.
2010-02-02 02:06:29 +00:00
Bao-Long Nguyen-Trong
5566c79e07 Fixed issue 1143: Calling finish() on Accounts activity when auto jumping to the only one existing account 2010-02-01 15:24:27 +00:00
Daniel Applebaum
ef1abffa26 Revert r1386 because it will break many folks email sending. 2010-01-31 19:11:51 +00:00
Daniel Applebaum
d114fa1bc3 Fixes Issue 1058
Add 's' hotkey for Select/deselect
2010-01-31 15:41:26 +00:00
Daniel Applebaum
a91e3e10e2 May have some beneficial impact on Issue 21 and Issue 799.
Just removes the base64 encoding on the text/plain body parts.  Does
not make the sent messages non-multipart.
2010-01-31 15:26:02 +00:00