mirror of
https://github.com/imapsync/imapsync.git
synced 2025-06-06 04:37:18 +02:00
1306 lines
65 KiB
Text
1306 lines
65 KiB
Text
Revision History for Perl extension Mail::IMAPClient.
|
||
Changes in version 2.2.9
|
||
------------------------
|
||
Fixed problem in migrate that caused problems in versions of perl earlier than
|
||
5.6. Thanks go to Steven Roberts for reporting the problem and identifying its
|
||
cause.
|
||
|
||
Fixed problem in the make process that caused tests for BodyStructure subclass
|
||
to fail if the grammer had been compiled under a different version of
|
||
Parse::RecDescent. This problem was detected by the dedicated people at
|
||
testers@cpan.org.
|
||
|
||
Fixed a compatibility problem using Parse::RecDescent version 1.94.
|
||
This caused BodyStructure and Thread to fail for 5.8.x users. A number
|
||
of people reported this bug to CPAN but it took me a while to realize what
|
||
was going on. Really it took me a while to realize my Parse::RecDescent was
|
||
out of date. ;-) Now this module is delivered with two versions of each of
|
||
the affected grammars and Makefile.PL determines which version to use.
|
||
Upgrading to Parse::RecDescent 1.94 will require you to re-run Makefile.PL
|
||
and reinstall Mail::IMAPClient.
|
||
|
||
Changes in version 2.2.8
|
||
------------------------
|
||
Change the login method so that it always send password as a literal to get around
|
||
problem 2544 reported by Phil Tracy which caused passwords containing asterisks to
|
||
fail on some systems (but not any of mine...). Good catch, Phil.
|
||
|
||
Added a new example that demonstrates the use of imtest (a utility that comes with
|
||
Cyrus IMAP) and Mail::IMAPClient together. The example uses imtest to do secure
|
||
authentication and then "passes" the connection over to Mail::IMAPClient (but
|
||
imtest is still brokering the encryption/decryption). This example comes from
|
||
an idea of Tara L. Andrews', whose brainstorm it was to use imtest to broker secure
|
||
connections. (But I still want to get encryption working with Mail::IMAPClient some
|
||
day!)
|
||
|
||
Fixed an error in which a "+" was used as a conncatenation error instead of a ".".
|
||
Thanks to Andrew Bramble for reporting this, even though he mistakenly identified
|
||
it as a "typo". It is not a typo; a plus sign is the correct concatenation operator,
|
||
as any decent Java book will tell you ;-)
|
||
|
||
Fixed an error in the login method when the password contains a special character
|
||
(such as an asterisk.) Thanks to Phil Tracey for reporting this bug.
|
||
|
||
Fixed some bugs in _send_line (the "O" side of the I/O engine) that were
|
||
reported by Danny Smith.
|
||
|
||
Fixed a bug in the migrate method in the optimization code (which
|
||
gets called when socket writes are delayed due to a slow or busy target
|
||
host, aka EAGAIN errors). Thanks to Pedro Carvalho for identifying
|
||
this bug and its cause.
|
||
|
||
Fixed a bug in migrate that caused migration of unread messages to fail.
|
||
This was due to the way Mail::IMAPClient's migrate method would try to send
|
||
an empty list of flags to the target server in the APPEND. Thanks to
|
||
Stephen Fralich at Syracuse University and for reporting this bug.
|
||
|
||
Fixed another bug in the migrate method that caused flags to get lost. Thanks
|
||
go to Jean-Michel Besnard for reporting this.
|
||
|
||
Fixed a bug in migrate that caused
|
||
Fixed a bug in get_envelope that caused it to fail under certain conditions.
|
||
Thanks go to Bob Brown for reporting this bug.
|
||
|
||
|
||
Changes in version 2.2.7
|
||
------------------------
|
||
|
||
Added some new parameters to support alternate authentication mechanisms:
|
||
|
||
Prewritemethod
|
||
Readmethod
|
||
|
||
Mail::IMAPClient has supported cram-md5 authentication "out of the box"
|
||
as of 2.2.6 (courtesy of Ville Skytt<74>). I also have digest-md5 working
|
||
in my lab with quality of protection levels "auth" and "integrity", but
|
||
not "confidentiality". I'm hoping to get the confidentiality part working
|
||
soon but so far have only managed to authenticate, send an encrypted command,
|
||
and receive and decrypt the response. This may sound like enough but I can't
|
||
seem to send a second command or receive a second response;-( In any event
|
||
2.2.8 will support at least qop=auth and qop=auth-int but maybe not
|
||
qop=auth-conf.
|
||
|
||
Fixed a bug reported by Adrian that caused get_bodystructure to
|
||
fail if the server returned a bodystructure with an embedded
|
||
literal. Also fixed the same bug in get_envelope, so I guess now
|
||
everyone knows that get_envelope was just a tinkered-with copy of
|
||
get_bodystructure...
|
||
|
||
Fixed two related bugs in Parser.pm that caused
|
||
get_bodystructure and get_envelope to fail if the
|
||
UID nnnnn part of a fetch response follows all the
|
||
other stuff. Thanks to Rapha<68>l Langella for reporting this bug.
|
||
|
||
Enhanced several methods to use MessageSets when the
|
||
Ranges parameter is true. There are still more methods that
|
||
need to be retrofitted to take advantage of the Range method
|
||
(and its underlying MessageSet object). In the meantime, if you
|
||
need to get the functionality of the shorter message ranges provided
|
||
by the Range method from a method that does not honor the Ranges
|
||
parameter, then you should a) create a message set by passing the
|
||
messages to the Range method and then pass the scalar as a string
|
||
to the method you want to use. For example, if you want to move
|
||
a whole lot of messages to Trash, do something like this:
|
||
>
|
||
>my $range = $imap->Range(scalar($imap->search("SentBefore", "01-Jan-2000")));
|
||
>$imap->move("Trash","$range");
|
||
>
|
||
This will cause the range object to stringify out to what looks like
|
||
a non-reference scalar before the move method gets the argument. If you
|
||
omit the quotes around "$range" then this won't work.
|
||
|
||
Fixed a bug in the list method that caused LIST "" "" to fail miserably.
|
||
Thanks to John W Sopko Jr. for reporting this bug.
|
||
|
||
Fixed a bug in the test suite that caused the cram-md5 tests to fail
|
||
if you are not running the extended tests. (Introduced in 2.2.6)
|
||
|
||
Fixed a bug that affected users on platforms that do not support
|
||
fcntl (i.e. NT). Thanks to Rapha<68>l Langella for reporting this bug.
|
||
|
||
Changes in version 2.2.6
|
||
------------------------
|
||
|
||
Fixed a bug in the migrate method that caused the internaldate
|
||
of migrated messages to sometimes be wrong. Credit goes to Jen Wu
|
||
for identifying both bug and fix.
|
||
|
||
Added a new method, "get_header", to provide a short-cut for a common
|
||
use of parse_headers. Added two other methods, "subject" and "date",
|
||
to provide shortcuts to get_header.
|
||
|
||
Changed the Mail::IMAPClient::MessageSet module to override array
|
||
dereferencing. (See below.)
|
||
|
||
Changed fetch and search methods to use the Range method (and thus the
|
||
Mail::IMAPClient::MessageSet module) for messages. The fetch method will
|
||
use MessageSet objects all the time, but the search method will only
|
||
return MessageSet objects if you specify "Ranges => 1" (with Ranges being
|
||
a new parameter). The default will be "Ranges => 0" (which preserves
|
||
the old behavior) but this default will go away in some future release.
|
||
There should be no need to override the fetch method's new behavior, since
|
||
it will be transparent to you unless you tend to fetch a lot of messages
|
||
at once, in which case your fetches may be faster and perhaps less likely
|
||
to fail due to the request exceeding your server's line limit. If you set
|
||
the Ranges parameter to true, then you still should not see a difference,
|
||
because a) when fetch is called in a list context then you will not get
|
||
a MessageSet object, you'll get the same list as always, and b) the
|
||
MessageSet objects now override array de-referencing operations, so if you
|
||
treat the returned MessageSet object as if it were an array then the object
|
||
will humour you and act like a reference to an array of messages sequence
|
||
numbers or message uids.
|
||
|
||
Also changed the flags method to use the Range method. This should also
|
||
be transparent since the methods arguments and return values do not change.
|
||
|
||
Added built-in support for CRAM-MD5 authentication. This authentication
|
||
method will in this release be used only when requested. In future releases
|
||
the default authentication will probably be the strongest authentication
|
||
supported "out of the box" that is available on your server. Since CRAM-MD5
|
||
is the only authentication other than plain text that is currently supported
|
||
"out of the box", it will be the default authentication mechanism for any
|
||
server that supports it. See the pod for the Authmechanism and Authcallback
|
||
parameters (which were also added in this release) and the doc for the
|
||
authenticate method (which has been around a while). Many thanks to Ville Skytt<74>
|
||
for providing the code that makes up the heart of this new support, as well
|
||
as to Gisle Aas for the Digest::HMAC_MD5 and MIME::Base64.
|
||
|
||
Made minor tweaks to the documentation. Again. (Will it ever be 100% right?)
|
||
|
||
Changes in version 2.2.5
|
||
------------------------
|
||
Added the Range method to convert a bunch of message UID's or sequence numbers
|
||
into compact ranges. Also added a supporting class for the returned range
|
||
objects with overloaded operators that support stringifying, adding to, and
|
||
deleting from a range object's message set (Mail::IMAPClient::MessageSet).
|
||
I also wrote documentation for same, so check it out. In future releases,
|
||
I will probably enhance the base module to use MessageSet objects when
|
||
feasible (i.e. whenever I know that the argument in question should in fact
|
||
be a message specification). But I'll let you find all the bugs in the
|
||
MessageSet module first ;-) Thanks goes to Stefan Schmidt, who is the first
|
||
to report using a server that restricted the size of a client request to
|
||
something smaller than what Mail::IMAPClient was generating for him.
|
||
(Originally the Range method was just supposed condense a message set into
|
||
the shortest possible RFC2060-compliant string, but then I got all happy and
|
||
started adding features. You know how it is...)
|
||
|
||
|
||
Changes in version 2.2.4
|
||
-------------------------
|
||
Fixed a bug in the done method (new in 2.2.3).
|
||
|
||
Added tests for idle and done. (That's how I found the bug in the done method, above.)
|
||
|
||
Fixed minor bugs in test suite. (The test suite worked but wasn't always using the options
|
||
I wanted tested. <sigh>)
|
||
|
||
|
||
Changes in version 2.2.3
|
||
-------------------------
|
||
|
||
NOTE: This version was distributed to beta testers only.
|
||
|
||
Fixed the "Changes in version 2.2.2" section so that it correctly specifies
|
||
version 2.2.2 (instead of being yet another 2.2.1 section).
|
||
|
||
Fixed a bug in the migrate method that affected folders with spaces in their
|
||
names.
|
||
|
||
Fixed a bug in the Massage method that affected folders with braces ({}) in
|
||
their names.
|
||
|
||
Added a new class method, "Quote", that will quote your arguments for you. (So you
|
||
no longer have to worry so much about quoting your quotes.
|
||
|
||
Added optimizations to the migrate method and to the core I/O engine inspired
|
||
by Jules Agee. (Actually they were not so much inspired by him as they were
|
||
lifted right out of a patch he had out on sourceForge.net. I had to refit them
|
||
for this version, and reformat his comments so they could fit in my window. Thanks
|
||
Jules, wherever you are.)
|
||
|
||
Added the fetch_hash method, which will fetch an entire folder's contents into a
|
||
hash indexed by message UID (or message sequence number if that's all you've got).
|
||
|
||
Added a new example to the examples subdirectory, and corrected some minor bugs
|
||
in existing examples.
|
||
|
||
Added the idle and done methods, which together implement the IMAP IDLE extension
|
||
(RFC2177), at John Rudd's suggestion.
|
||
|
||
Changes in version 2.2.2
|
||
------------------------
|
||
Fixed a bug in Massage method (generally only used by other IMAPClient methods)
|
||
that broke folder names with parens.
|
||
|
||
Updated bug reporting procedures. Also added a section in the documentation
|
||
for REPORTING THINGS THAT ARE NOT BUGS. Bug tracking is now done via
|
||
rt.cpan.org, which I stumbled upon quite by accident and with which I am
|
||
really pleased. A lot of credit goes to _somebody_ for putting this
|
||
out on CPAN. Unfortunately as of this writing I don't whom.
|
||
|
||
Fixed a bug in the documentation regarding the logoff method, which is never
|
||
implicitly invoked anymore; I gave up on that because the DESTROY method would
|
||
sometimes be called after the Socket handle was already destroyed. (This is
|
||
especially likely at program exit, when everything still in scope goes out of
|
||
scope at the same time.) You should always log off explicitly if you want to
|
||
be a well behaviod IMAP client.
|
||
|
||
Changes in version 2.2.1
|
||
------------------------
|
||
Updated append_string to wrap the date argument in double quotes if the argument was
|
||
provided without quotes. Thanks to Grant Waldram for pointing out that some IMAP
|
||
servers require this behavior.
|
||
|
||
Added a new method, selectable, which returns a true value if a folder is selectable.
|
||
|
||
Documented in this Changes file a change that was actually made for 2.2.0, in which
|
||
newlines are chomped off of $@ (but not LastError).
|
||
|
||
Added pointers in the documentation to point to Mark Bush's Authen::NTLM module. This
|
||
module will allow you to use NTML authentication with Mail::IMAPClient connections.
|
||
Also changed the authenticate method so that it will work with Authen::NTML without
|
||
the update mentioned in NTLM::Authen's README.
|
||
|
||
Added a second example on using the new migrate method, migrate_mail2.pl. This example
|
||
demonstrates more advanced techniques then the first, such as using the separator method
|
||
to massage folder names and stuff like that.
|
||
|
||
Added support for the IMAP THREAD extension. Added Mail::IMAPClient::Thread.pm to support
|
||
this. (This pm file is generated during make from Thread/Thread.grammar.) This new
|
||
function should be considered experimental. Note also that this extension has nothing
|
||
to do with threaded perl or anything like that. This is still on the TODO list.
|
||
|
||
Updated the search, sort, and thread methods to set $@ to "" before attempting their
|
||
respective operations so that text in $@ won't be left over from some other error and
|
||
therefore always indicative of an error in search, sort, or thread, respectively.
|
||
|
||
Made many many tweaks to the documentation, including adding more examples (albeit
|
||
simple ones) and fixing some errors.
|
||
|
||
Changes in version 2.2.0
|
||
------------------------
|
||
Fixed some tests so that they are less likely to give false negatives. For example, test
|
||
41 would fail if the test account happened to have an empty inbox.
|
||
|
||
Made improvements to Mail::IMAPClient::BodyStructure and renamed Mail::IMAPClient::Parse
|
||
to Mail::IMAPClient::BodyStructure::Parse. (This should be transparent to apps since the
|
||
...Parse helper module is used by BodyStructure.pm only.) I also resumed my earlier practice
|
||
of using ...Parse.pm from within BodyStructure.pm to avoid the overhead of compiling the
|
||
grammar every time you use BodyStructure.pm. (Parse.pm is just the output from saving
|
||
the compiled Parse::RecDescent grammar.) In a related change, I've moved the grammar into
|
||
its own file (Parse.grammar) and taught Makefile.PL how to write a Makefile that converts
|
||
the .grammar file into a .pm file. This work includes a number of fixes to how a body structure
|
||
gets parsed and the parts list returned by the parts method, among other things. I was able
|
||
to successfully parse every bodystructure I could get my hands on, and that's a lot.
|
||
|
||
Also added a bunch of new methods to Mail::IMAPClient::BodyStructure and its child classes.
|
||
The child classes don't even have files of their own yet; they still live with
|
||
their parent class! Notable amoung these changes is support for the FETCH ENVELOPE IMAP
|
||
command (which was easy to build in once the BODYSTRUCTURE stuff was working) and some
|
||
helper modules to get at the envelope info (as well as envelope information for
|
||
MESSAGE/RFC822 attachments from the BODYSTRUCTURE output). Have a look at the
|
||
documentation for Mail::IMAPClient::BodyStructure for more information.
|
||
|
||
Fixed a bug in the folders method regarding quotes and folders with spaces in the names. The
|
||
bug must have been around for a while but rarely manifested itself because of the way
|
||
methods that take folder name arguments always try to get the quoting right anyway but
|
||
it was still there. Noticing it was the hard part (none of you guys reported it to me!).
|
||
|
||
Fixed a bug reported by Jeremy Hinton regarding how the search method handles dates. It was
|
||
screwing it all up but it should be much better now.
|
||
|
||
Added the get_envelope method which is like the get_bodystructure method except for in ways
|
||
in which it's different.
|
||
|
||
Added the messages method (a suggestion from Danny Carroll), which is functionally
|
||
equivalent to $imap->search("ALL") but easier to type.
|
||
|
||
Added new arguments to the bodypart_string method so that you can get just a part of a part
|
||
(or a part of a subpart for that matter...) I did this so I could verify BodyStructure's
|
||
parts method by fetching the first few bytes of a part (just to prove that the part has a
|
||
valid part number).
|
||
|
||
Added new tests to test the migrate function and to do more thorough testing of the
|
||
BodyStructure stuff. Also added a test to make sure that searches that come up empty handed
|
||
return an undef instead of an empty array (reference), regardless of context. Which reminds
|
||
me...
|
||
|
||
Fixed a bug in which searches that don't find any hits would return a reference to an empty
|
||
array instead of undef when called in a scalar context. This bug sounds awfully familiar,
|
||
which is why I added the test mentioned above...
|
||
|
||
|
||
Changes in version 2.1.5
|
||
------------------------
|
||
Fixed the migrate method so now it not only works, but also works as originally
|
||
planned (i.e. without requiring source messages to be read entirely into memory).
|
||
If the message is smaller than the value in the Buffer parameter (default is 4096) then
|
||
a normal $imap2->append($folder,$imap1->message_string) is done. However, if the message
|
||
is over the buffer size then it is retrieved and written a bufferful at a time until the
|
||
whole message has been read and sent. (The receiving server still expects the entire
|
||
message at once, but it will have to wait because the message is being read from the
|
||
source in smaller chunks and then written to the destination a chunk at a time.)
|
||
This needs extensive testing before I'd be willing to trust it (or at least extensive
|
||
logging so you know when something has gone terribly wrong) and I consider this method
|
||
to be in BETA in this release. (Numerous people wrote complaining that migrate didn't
|
||
work, and some even included patches to make it work, but the real bug in the last
|
||
release wasn't that migrate was broken but that I had inadvertently included the pod
|
||
for the method which I knew perfectly well was not ready to be released. My apologies
|
||
to anyone who was affected by this.) The migrate method does seem to work okay on
|
||
iPlanet (i.e. Netscape) Messenger Server 4.x. Please let me know if you have any
|
||
issues on this or any other platform.
|
||
|
||
Added a new example, migrate_mbox.pl, which will demonstrate the migrate method.
|
||
|
||
Fixed a bug that will cause Mail::IMAPClient's message reading methods to misbehave if
|
||
the last line of the email message starts with a number followed by a space and either
|
||
"OK", "NO", or "BAD". This bug was originally introduced in 1.04 as a fix for another
|
||
bug, but since the fix supports noncompliant behavior I'm disabling this behavior by
|
||
default. If your IMAP clients start hanging every time you try to read literal text
|
||
(i.e. a message's test, or a folder name with spaces or funky characters) then you
|
||
may want to turn this on with the EnableServerResponseInLiteral parameter. Thanks go
|
||
to Manpreet Singh for reporting this bug.
|
||
|
||
Fixed a bug in imap_to_mbox.pl that has been there since 2.0.0 (when the Uid
|
||
parameter started defaulting to "True"). Thanks to Christoph Viethen for reporting
|
||
the bug and suggesting the fix. BUT NOTE THIS: I often don't test the example programs,
|
||
so you should think of them as examples and not free production programs. Eventually
|
||
I would like to add tests to my test suite (either the 'make test' test suite that you
|
||
run or my own more extensive test suite) but it's not a super high priority right now.
|
||
|
||
Significant improvements to the whole Mail::IMAPClient::BodyStructure module
|
||
were contributed by Pedro Melo Cunha. It's really much better now.
|
||
|
||
Bullet-proofing added to some private methods. (Private meaning they are undocumented
|
||
and not part of the module's API. This is perl not java.)
|
||
|
||
Fix applied to unset_flag to support user-defined flags (thanks to E.Priogov
|
||
for submitting the bug report and patch).
|
||
|
||
|
||
Changes in version 2.1.4
|
||
------------------------
|
||
Added Paul Warren's bugfix to the sort method.
|
||
|
||
Added Mike Halderman's bugfix for the get_bodystructure method.
|
||
|
||
Fixed a localization problem reported by Ivo Panecek. Because of this fix,
|
||
the Errno.pm file is now a prerequisite to this module. This way I can just
|
||
test to see if the error is an "EAGAIN" error (as defined in sys/errno.h and thus
|
||
Errno.pm) instead of awkwardly checking the string value of $!.
|
||
|
||
I also renamed the MaxTempErrors parameter to Maxtemperrors in response the same
|
||
bug report. Added a "MaxTempErrors" accessor method that will set and return
|
||
Maxtemperrors for backwards compatibility. Also, the number of temporary errors
|
||
gets reset after each successful I/O, so that the socket i/o operation fails only if
|
||
you if your temporary I/O errors happen more than "Maxtemperrors" times in a row.
|
||
The old behavior was to continue incrementing the count of temporary errors until
|
||
either the entire message was written or until a total of Maxtemperrors had occurred,
|
||
regardless of how many intervening successful syswrites occurred. This was a bug, but
|
||
Ivo politely suggested the new behavior as an enhancement. ;-) Also, you can now
|
||
specify "UNLIMITED" as the Maxtemperrors, in which case these errors will be ignored.
|
||
And the default for Maxtemperrors is now 100, but I'm open to any feedback you may
|
||
have in this regard.
|
||
|
||
I also fixed the operator precedence problem that was reported by many folks in that
|
||
very same part of the code. (As you may have guessed, that code was new in the last
|
||
version!)
|
||
|
||
One of the people who reported the precedence problem was Jules Agee, who also submitted
|
||
a patch that may in the end provide an optimal solution to handling EAGAIN errors.
|
||
Unfortunately I have not had time to retrofit his patch into the current version of the
|
||
module. But if I can manage to do this soon and it tests well I'll include it in the next
|
||
release, in which case the Maxtemperrors parameter will be of interest only to historians.
|
||
|
||
I also received a patch from John Ello that adds support for Netscape's proprietary
|
||
PROXYAUTH IMAP client command. I haven't included that support in this release because
|
||
you can already use the proxyauth method. It's one of those famous "default" methods
|
||
that, despite their fame and my documentation, nobody seems to know about. But you
|
||
can always say "$imap->proxyauth($uid)", for example, providing that $imap and $uid
|
||
are already what they're supposed to be. (I've been doing this myself for years.)
|
||
|
||
However, John's patch does provide a cleaner interface (it remembers who you are as
|
||
well as who you were, for example) so I may include it later as part of a separate
|
||
module that extends Mail::IMAPClient. This would also give me an excuse for providing
|
||
the framework for plugging in Administrative methods that are proprietary to other imap
|
||
servers, so if you have a technique for acquiring administrative access to your users'
|
||
mailboxes (besides proxyauth) please let me know what it is. Perhaps we'll get something cool out of it, like a document on how to write administrative scripts for various
|
||
platforms and a suite of supporting methods for each.
|
||
|
||
Changes in version 2.1.3
|
||
------------------------
|
||
Added the new method append_string. It works similarly to append but will allow extra
|
||
arguments to supply the flags and internal date of the appended message. See the pod
|
||
for more details.
|
||
|
||
(Thanks to Federico Edelman Anaya for suggesting this fix.)
|
||
|
||
Fixed a bug in the AUTOLOAD subroutine that caused "myrights" (and possibly other
|
||
non-existant methods) to fail. Thanks go to Larry Rosenbaum for reporting the bug
|
||
and identifying the fix.
|
||
|
||
Added the new method Escaped_results, which preprocesses results so that data
|
||
containing certain special characters are returned quoted with special characters
|
||
(like quotes!) escaped. (I needed this for the bodystructure stuff, below.)
|
||
|
||
NEW! Added support for parsing bodystructures (as provided in the server response to
|
||
FETCH BODYSTRUCTURE). This support requires Parse::RecDescent and is implemented via two
|
||
new modules, Mail::IMAPClient::BodyStructure and Mail::IMAPClient::Parse. Note that
|
||
the latter module is used by the former; your programs need not and should not use it
|
||
directly so don't. Also, these modules are ALPHA and EXPERIMENTAL so no screaming when
|
||
they don't work. (Polite bug reports will of course be gratefully accepted.) Many
|
||
thanks to Damian Conway, the author of Parse::RecDescent, without which this feature
|
||
would not have been possible (or at least not very likely).
|
||
|
||
Enhanced support for DOS systems (and DOS's offspring, such as windows) by removing
|
||
the "\c\n"s and replacing them with "\x0d\x0a". Thanks go to Marcio Marchini for his
|
||
help with this effort.
|
||
|
||
Fixed the list of symbols imported along with Fcntl.pm. (Paul Linder asked me to put
|
||
this in the last release but I forgot.)
|
||
|
||
Changes in version 2.1.2
|
||
------------------------
|
||
|
||
Fixed a bug in the is_parent method which made it inaccurate on some servers.
|
||
|
||
Added new method "sort", which implements the SORT extenstion and which was contributed
|
||
by Josh Rotenberg. The SORT extension is documented at
|
||
http://search.ietf.org/internet-drafts/draft-ietf-imapext-sort-06.txt. A copy of the
|
||
draft is also included with the Mail::IMAPClient distribution, which means I also:
|
||
|
||
Added draft-ietf-imapext-sort-06.txt to the docs subdirectory of the distribution.
|
||
|
||
Fixed a bug in the folders method and the subscribed method (same bug, appeared twice)
|
||
which broke these methods under some conditions. Thanks again Josh Rotenberg for supplying the fix.
|
||
|
||
Fixed bugs in getacl and listacl. Changed the interface for getacl significantly;
|
||
existing scripts using getacl will not behave the same way. But then on the other hand,
|
||
getacl was never documented before, so how could you be using it?
|
||
|
||
Implemented improvements to reduce memory usage by up to 30%. Thanks go Paul Linder,
|
||
who developed the memory usage patch after a considerable amount of analysis. The
|
||
improvements include the use of 'use constant', so your perl needs to support that
|
||
pragma in order to use Mail::IMAPClient.
|
||
|
||
Added a new parameter, MaxTempErrors, which allows the programmer to control the number
|
||
of consecutive "Resource Temporarily Unavailable" errors that can occur before a write
|
||
to the server will fail. Also changed the behavior of the client when one of these
|
||
errors occurs. Previously, Mail::IMAPClient waited .25 seconds (a quarter of one
|
||
second) before retrying the read operation. Now it will wait (.25 * the number of
|
||
consecutive temporary errors) seconds before retrying the read.
|
||
|
||
Documented the "Buffer" parameter, which has been secretly available for some time. I
|
||
just forgot to document it. It sets the size of the read buffer when Fast_io is turned
|
||
on. (NOTE: As of version 2.1.5 it also controls the size of the buffer used by the
|
||
migrate method.)
|
||
|
||
Updated the Todo file. It was nice to see that a number of lines in the "Todo" file were now deletable. It was depressing to see that a number of original lines need to stay
|
||
in there.
|
||
|
||
|
||
Changes in version 2.1.1
|
||
------------------------
|
||
Added the "mark", "unmark", and imap4rev1 methods.
|
||
|
||
Updated the documentation to include the new methods and to document "create", "store",
|
||
and "delete".
|
||
|
||
Updated "message_string" to be smart about whether you're using IMAP4 or IMAP4REV1.
|
||
|
||
Updated "message_to_file" to be smart about whether you're using IMAP4 or IMAP4REV1.
|
||
|
||
Added several bug fixes to authenticate method. Many thanks to Daniel Wright who
|
||
reported these bugs and provided the information necessary to fix them.
|
||
|
||
|
||
Changes in version 2.1.0
|
||
------------------------
|
||
|
||
Fixed a serious bug introduced in 2.0.9 when appending large messages.
|
||
|
||
Made minor changes to improve the cyrus_expunge.pl example script.
|
||
|
||
Made the set_flags routine RFC2060-compliant. Previously it prepended flag names with
|
||
backslashes, even if the flags were not reserved flags. This broke support for
|
||
user-defined flags, which I didn't realize was supposed to even be there until Scott
|
||
Renner clued me in. (Thanks, Scott.)
|
||
|
||
Promoted the release level to "1".
|
||
|
||
Added a new 'internaldate' method. (Thanks to the folks at jwm3.org for donating the
|
||
code!)
|
||
|
||
Added a new example, cyrus_expire.pl.
|
||
|
||
Changes in version 2.0.8/2.0.9
|
||
------------------------------
|
||
Made minor changes to the tests in t/basic.t so that folders are explicitly closed
|
||
before they are deleted. (Don't worry, only folders created by the tests are
|
||
deleted. :-) Thanks go to Alan Young for reporting that some servers require this.
|
||
|
||
Changed the routine that massages folder names into IMAP-compliant strings so that
|
||
single-quotes in a name do not force the folder to go through as "LITERAL" strings
|
||
(as defined in RFC2060). This shouldn't cause a problem for anybody (and in fact
|
||
should make life easier for some folks) but if you do have any trouble with
|
||
single-quotes in folder names PLEASE LET ME KNOW ASAP!!
|
||
|
||
Divided the sending of literal strings into two I/O operations (as required by RFC2060).
|
||
This should correct problems with sending literals to some servers that will not read
|
||
any data sent before they reply with the "+ go ahead" message. (Thanks go to Keith Clay,
|
||
who reported seeing this problem with the M-Store IMAP server.)
|
||
|
||
Changed the "create" method so that it will autoquote the first argument to create
|
||
rather than the last. Normally the first argument is the last, but Cyrus users can
|
||
specify an optional 2nd argument, except when using pre-2.0.8 versions of
|
||
Mail::IMAPClient ;-) Thank you Chris Stratford for reporting this bug and
|
||
identifying its cause.
|
||
|
||
Fixed a bug in body_string when the message is empty. (Thanks go to Vladimir Jebelev for
|
||
finding this bug and providing the fix.)
|
||
|
||
Added a new example to the examples subdirectory. cyrus_expunge.pl is a script you
|
||
can use (after making minor tweaks) to periodically expunge your server's mail store.
|
||
|
||
Changes in version 2.0.7
|
||
------------------------
|
||
Fixed a bug in message_count. Thanks go to Alistair Adams for reporting this bug.
|
||
|
||
Fixed a bug in folders that caused some foldernames to not be reported in the
|
||
returned array.
|
||
|
||
Changes in version 2.0.6
|
||
------------------------
|
||
|
||
Applied patches from Phil Lobbe to tighten up sysreads and 'writes and to correct a
|
||
bug in the I/O engine.
|
||
|
||
Changes in version 2.0.5
|
||
------------------------
|
||
|
||
Fixed bug in parse_headers so that RFC822 headers now match the pattern /(\S*):\s*/
|
||
instead of /(\S*): /. Thanks go to Paul Warren for reporting this bug and providing the
|
||
fix.
|
||
|
||
Added more robust error checking to prevent infinite loops during read attempts and
|
||
fixed bugs in parse_headers. Thanks go to Phil Lobbes, who provided several useful
|
||
patches and who performed valuable pre-release testing.
|
||
|
||
Changes in version 2.0.4
|
||
------------------------
|
||
|
||
Fixed bug in parse_headers when connected to an Exchange server with UID=>1. (Kudos to
|
||
Wilber Pol for that fix.)
|
||
|
||
Fixed bugs in parse_headers and tightened reliability of I/O engine by implementing
|
||
many improvements suggested by Phil Lobbes, who also provided code for same.
|
||
|
||
Added bugfix that under certain conditions caused server responses to be "repeated"
|
||
when fast_io is turned on. Thanks to Jason Hellman for providing bug report and
|
||
diagnostic data to fix this.
|
||
|
||
Added a "LastIMAPCommand" method, which returns the last IMAP client command that
|
||
was sent to the server.
|
||
|
||
Removed the "=begin debugging" paragraph that somehow got included in CPAN's
|
||
html pages (even though it shouldn't have).
|
||
|
||
Began a process of redesigning the documentation. I would like to be able to present
|
||
a more formal syntax for the various methods and hope to have that ready for the next
|
||
release.
|
||
|
||
Tested successfully against Cyrus v 2.0.7.
|
||
|
||
Tested unsuccessfully against mdaemon. This appears to be due to mdaemon's
|
||
noncompliance with rfc2060 so future support for mdaemon should not be expected
|
||
any time soon. ;-(
|
||
|
||
|
||
Changes in version 2.0.3
|
||
------------------------
|
||
|
||
Did major rewrite of message_string method, which should now be both cleaner
|
||
and more reliable.
|
||
|
||
Fixed bug in move method that caused some folders to be incorrectly quoted.
|
||
Thanks go to Felix Finch for reporting this bug. Also, at his suggestion I
|
||
added information to move documentation explaining the need to expunge.
|
||
|
||
Made many fixes and tweaks to pod text.
|
||
|
||
Added a new method, Rfc2060_date, which takes times in the "seconds since 1/1/1970"
|
||
format and returns a string in RFC2060's "dd-Mon-yyyy" format (which is the format
|
||
you need to use in IMAP SEARCH commands).
|
||
|
||
Changes in version 2.0.2
|
||
------------------------
|
||
Fixed bug that caused a compile error on some earlier versions of perl5.
|
||
|
||
Noticed that some older versions of perl give spurious "Ambiguous use" warnings
|
||
here and there, mostly because I'm not quoting the name of the "History" member
|
||
of the underlying Mail::IMAPClient hash. These warnings will go away when you upgrade
|
||
perl. (I may fix them later, or maybe not. Depends on if I have time.)
|
||
|
||
Added new parameter (and eponymous method) Peek, along with new tests for 'make test'
|
||
for same. See the pod for further info.
|
||
|
||
Added some error checking to avoid trying to read or write with an
|
||
unconnected IMAPClient object.
|
||
|
||
Made bug fixes to parse_headers and flags.
|
||
|
||
Added missing documentation for the exciting new message_to_file method (oops).
|
||
Also cleaned up a few typos in the pod while I happened to be there. (I'm sure
|
||
there are still plenty left.)
|
||
|
||
Fixed bugs in append and append_file. (Thanks to Mauro Bartolomeoli and to the people
|
||
at jwm3.org for reporting these bugs.)
|
||
|
||
Made changes to call to syswrite to guarantee delivery of entire message. (Only affects
|
||
appends of very large messages.)
|
||
|
||
Added the 'close' method to the list of lower-case-is-okay methods (see the section
|
||
under version 2.0.0 on "NEW ERROR MESSAGES").
|
||
|
||
Changes in version 2.0.1
|
||
------------------------
|
||
Several bug fixes related to the flags method and to spurious warning messages
|
||
when run with warnings turned on.
|
||
|
||
A new method, message_to_file, writes message text directly into a file. This
|
||
bypasses saving the text in the history buffer and the overhead that entails, which
|
||
could be especially important when processing big ass messages. Of course the bad news
|
||
is that now you'll have to write all that shtuff out to a filehandle, but maybe you
|
||
wanted to do that anyway. Anyhow, between append_file and message_to_file, both
|
||
of which take filehandle arguments, there should be a way to "short circuit" the
|
||
copying of mail between two imap sessions. I just haven't got it completely figured
|
||
out yet how it would work. Got any ideas? Anyhow, this method is currently considered
|
||
experimental.
|
||
|
||
A couple of new tests have been added to go along with our new little method.
|
||
|
||
I've added a whole bunch more IMAP-related rfc's to the docs/ subdirectory. Trust me,
|
||
you are going to need them.
|
||
|
||
Changes in version 2.0.0
|
||
-----------------------
|
||
NEW I/O ENGINE
|
||
This version includes a major rewrite of the I/O engine. It's now cleaner and more
|
||
reliable. Also, output processing is less likely to match patterns that look like
|
||
server output but are really, say, message text contained in a literal or something
|
||
like that. Also, various problems with blank lines at the ends of messages either
|
||
magically appearing or disappearing should now go away. Basically, it's much better
|
||
is what I'm trying to say.
|
||
|
||
NEW DEFAULT
|
||
The Uid parameter now defaults to true. This should be transparent to existing scripts
|
||
(except for those scripts that produce embarrassing results because someone forgot to
|
||
specify Uid=>1, in which case they'll magically start behaving somehow).
|
||
|
||
NEW METHOD
|
||
The namespace method has been added, thus implementing RFC2342. If you have any scripts
|
||
that rely on the old, "default method" style of namespace implementation then you should
|
||
rename those method calls to be mixed case (thus forcing the AUTOLOADed default method).
|
||
|
||
NEW ERROR MESSAGES
|
||
Mail::IMAPClient now issues a lot more warning messages when run in warn mode
|
||
(i.e. $^W is true). Of particular interest are methods implemented via the "default
|
||
method" AUTOLOAD hack. They will generate a warning telling you to use mixed- or
|
||
upper-case method names (but only if warnings are turned on, say with the -w switch
|
||
or $^W++ or something). The exceptions are certain unimplemented yet quite popular
|
||
methods that, if ever explicitly implemented, will behave the same way as they do via
|
||
the default method. (Or at least they will remain downwardly compatible. I may add
|
||
bells and whistles by not by default.) Those methods are listed in the pod and right
|
||
here: store, copy, subscribe, close, create, delete and expunge.
|
||
|
||
NEW VERSION NUMBERING SCHEME
|
||
Changed the version numbering scheme to match perl's (as of perl v5.6.0).
|
||
|
||
NEW INSTALLATION TESTS
|
||
Added a few new tests to the test suite. (Still need more, though.) Also changed fast_io
|
||
and uidplus test suites so that they just "do" the basic tests but with different
|
||
options set (i.e. Fast_io and Uid, respectively).
|
||
|
||
OTHER CHANGES
|
||
- The expunge method now optionally accepts the name of the folder to be expunged. It's
|
||
also been documented, even though it technically doesn't exist. (That won't stop it from
|
||
working, though.) Since expunge deletes messages that you thought were already deleted,
|
||
it's only appropriate to use a method that you thought existed but really doesn't, don't
|
||
you think? And if you're wondering how I managed to change the behavior of a method that
|
||
doesn't exist, well, I don't want to talk about it.
|
||
|
||
- Speaking of methods that don't exist (also known as methods implemented via "the
|
||
default method"), effective with this release there are a number of unimplemented
|
||
methods that are guaranteed to always exhibit their current behavior. In other words,
|
||
even if I do eventually implement these methods explicitly, they will continue to
|
||
accept the same arguments and return the same results that they do now via the default
|
||
method. (Why I would even bother to do that is specifically not addressed in this
|
||
document.) Currently this means that these methods will not trigger warnings when
|
||
called via all-lowercase letters (see "NEW ERROR MESSAGES", above). In the future I
|
||
hope that it will also mean that these non-existant but functioning methods will also
|
||
be documented in the pod.
|
||
|
||
- Fixed a bug in the flags method introduced in 1.19. (Thanks to the people at jwm3.org
|
||
for reporting this!)
|
||
|
||
|
||
Changes in version 1.19
|
||
-----------------------
|
||
Fixed a bug in which the Folder parameter returned quoted folder names, which sometimes
|
||
caused other methods to requote the folders an extra time. (The IMAP protocol is real
|
||
picky about that.) Thanks go to Felix Finch for both reporting the bug and identifying
|
||
the fix.
|
||
|
||
Siggy Thorarinsson contributed the new "unseen_count" method and suggested a new
|
||
"peek mode" parameter. I have not yet gotten around to implementing the new parameter
|
||
but have included the unseen_count method, since a) he was kind enough to write it, and
|
||
b) it tests well.
|
||
|
||
In the meantime, you cannot tell methods like "parse_headers" and "message_string" and
|
||
so forth whether or not you want them to mark messages as "\Seen". So, to make life
|
||
easier for you in particular I added a bunch of new methods: set_flag, unset_flag,
|
||
see, and deny_seeing. The latter two are derivitives of the former two, respectively,
|
||
which should make this sentence almost as difficult to parse as an IMAP conversation.
|
||
|
||
Fixed bug in which "BAD" "OK" or "NO" lines prefixed by an asterisk (*) instead of the
|
||
tag are not handled correctly. This is especially likely when LOGIN to a UW IMAP server
|
||
fails. Thanks go to Phil Lobbes for squashing this bug.
|
||
|
||
Fixed bug in logout that caused the socket handle to linger. Credit goes to
|
||
Jean-Philippe Bouchard for reporting this bug and for identifying the fix.
|
||
|
||
Fixed bug in uidvalidity method where folder has special characters in it.
|
||
|
||
Made several bug fixes to the example script examples/find_dup_msgs.pl. Thanks to Steve
|
||
Mayer for identifying these bugs.
|
||
|
||
Changed Fast_io to automatically turn itself off if running on a platform that does
|
||
not provide the necessary fcntl macros (I won't mention any names, but it's initials
|
||
are "NT"). This will occur silently unless warnings are turned on or unless the Debug
|
||
parameter is set to true. Previously scripts running on this platform had to turn off
|
||
fast_io by hand, which is lame. (Thank you Kevin Cutts for reporting this problem.)
|
||
|
||
Updated logic that X's out login credentials when printing debug output so that funky
|
||
characters in "User" or "Password" parameters won't break the regexp. (Kevin Cutts found
|
||
this one, too.)
|
||
|
||
Tinkered with the Strip_cr method so it can accept multiple arguments OR an array
|
||
reference as an argument. See the updated pod for more info.
|
||
|
||
Fixed a typo in the documentation in the section describing the fetch method. There
|
||
has been an entire paragraph missing from this section for who knows how long. Thanks
|
||
to Adam Wells, who reported this documentation error.
|
||
|
||
Fixed bug in seen, recent, and unseen methods that caused them to return empty arrays
|
||
erroneously under certain conditions.
|
||
|
||
Changes in version 1.18
|
||
-----------------------
|
||
Timeouts during read operations now work correctly.
|
||
|
||
Fixed several bugs in the I/O engine. This should correct various problems with Fast_io
|
||
turned on (which is now the default).
|
||
|
||
Reworked message_string and body_string methods to avoid bugs when Uid set to true.
|
||
|
||
Changes in version 1.17
|
||
-----------------------
|
||
|
||
Added support for the Oracle IMAP4r1 server.
|
||
|
||
Tinkered with the DESTROY method so that it does a local($@) before doing its evals.
|
||
This will perserve the value of $@ when the "new" method fails during a login but the
|
||
DESTROY's "logout" succeeds. The module was setting the $@ variable, but on some
|
||
versions of perl the DESTROY method would clobber $@ before anything useful could be
|
||
done with it! Thanks to Kimmo Hovi for reporting this problem, which was harder to
|
||
debug than you might think.
|
||
|
||
Changes in version 1.16
|
||
-----------------------
|
||
|
||
IMPORTANT: Made Fast_IO the default. You must specify Fast_io => 0 in your new method
|
||
call or invoke the Fast_io method (and supply 0 as an arg) to get the old behavior.
|
||
(This should be transparent to most users, but as always your mileage may vary.)
|
||
|
||
Reduced the number of debug msgs printed in the _read_line internal method and added a
|
||
debug msg to report perl and Mail::IMAPClient versions.
|
||
|
||
The message_count method will now return the number of messages in the currently select
|
||
folder if no folder argument is supplied.
|
||
|
||
The message_string method now does an IMAP FETCH RFC822 (instead of a
|
||
FETCH RFC822.HEADERS and a FETCH RFC822.TEXT), which should eliminate missing blank
|
||
lines at the ends of some messages on some IMAP server platforms. It also returns undef
|
||
if for some reason the underlying FETCH fails (i.e. there is no folder selected),
|
||
thanks to a suggestion by Pankaj Garg. It has also been slightly re-worked to support
|
||
the changes in the I/O engine from version 1.14.
|
||
|
||
Re-worked the body_string method to support the I/O engine changes from v1.14.
|
||
|
||
Fixed a bug in parse_headers when used with multiple headers and the Uid parameter set
|
||
to a true value.
|
||
|
||
Documented in this file a fix for a bug in the flags method with the Uid parameter
|
||
turned on. (Belated thanks to Michael Lieberman for reporting this bug.)
|
||
|
||
Changes in version 1.15
|
||
-----------------------
|
||
Fixes the test suite, which in v1.14 had an "exit" stmt that caused early termination
|
||
of the tests. (I had put that "exit" in there on purpose, and left it in there by
|
||
accident.)
|
||
|
||
Changes in version 1.14
|
||
-----------------------
|
||
Fixed a bug in the _readline subroutine (part of the I/O engine) that was caused by my
|
||
less-than-perfect interpretation of RFC2060. This fix will allow the Mail::IMAPClient
|
||
module to function correctly with servers that imbed literal datatypes in the middle
|
||
of response lines (rather than just at the end of them). Thanks to Pankaj Garg for
|
||
reporting this problem and providing the debugging output necessary to correct it.
|
||
|
||
Fixed a bug in parse_headers that was introduced with the fix to the I/O engine
|
||
described above.
|
||
|
||
Changes in version 1.13
|
||
-----------------------
|
||
Changed the parse_headers method so that it uses BODY.PEEK instead of BODY. This
|
||
prevents the parse_headers method from implicitly setting the "\Seen" flag for messages
|
||
that have not been otherwise read. This change could produce an incompatibility in
|
||
scripts that relied on the parse_headers previous behavior.
|
||
|
||
Fixed a bug in the flags method with the Uid parameter turned on. (Thanks to Michael
|
||
Lieberman for reporting this bug.)
|
||
|
||
Changes in version 1.12
|
||
-----------------------
|
||
Fixed a bug in the folders method when called first with a second arg and then without
|
||
a second arg.
|
||
|
||
Tested sucessfully with perl-5.6.0.
|
||
|
||
Added a section to the pod documentation on how to report bugs. I've had to ask for
|
||
output from scripts with "Debug => 1" so many times that I eventually decided to
|
||
include the procedure for documenting bugs in the distribution. (Duh! It only took me
|
||
11 releases to come up with that brainstorm.) Often following the procedures to obtain
|
||
the documentation is enough; once people see what's going on (by turning on Debug =>1)
|
||
they no longer want to report a bug.
|
||
|
||
Did I mention it's a good idea to turn on debugging when trying to figure out why a
|
||
script isn't working? (It is.)
|
||
|
||
In order to make the Debug parameter friendlier, it now prints to STDERR by default.
|
||
You can override this by supplying the spanking brand new Debug_fh parameter, which
|
||
if supplied had better well point to a filehandle (either by glob or by reference),
|
||
and by 'filehandle' I mean something besides STDIN!
|
||
|
||
Debugging mode will now also X-out the login credentials used to login. This will make
|
||
it easier to share your debugging output.
|
||
|
||
Added documentation for the State parameter, which must be set manually by programmers
|
||
who are not using Mail::IMAPClient's connect and/or login methods but who are instead
|
||
making their own connections and then using the Socket parameter to turn their
|
||
connections into IMAP clients.
|
||
|
||
Fixed bug in parse_headers with Uid turned on.
|
||
|
||
Fixed bug in parse_headers when using the argument "ALL".
|
||
|
||
Changes in version 1.11
|
||
-----------------------
|
||
Added new example script, copy_folder.pl, to demonstrate one way to copy entire
|
||
folders between imap accounts (which may or may not be on the same server). This
|
||
example is right next to all the others, in the examples/ subdirectory of the
|
||
distribution.
|
||
|
||
Changed error handling slightly. $@ now contains pretty much the same stuff as what
|
||
gets returned by LastError, even when LastError won't work (i.e. when an implicit
|
||
connect or login fails and so no object reference is returned by new). You can thank
|
||
John Milton for the friendly nagging that got me to do this.
|
||
|
||
Added new test suite for the fast_io engine. This should make it easier to determine
|
||
whether or not the fast_io engine will work on your platform.
|
||
|
||
Implemented a work-around to allow the Port parameter to default despite a known bug in
|
||
IO::Socket::INET version 1.25 (distributed with perl 5.6.0).
|
||
|
||
Fixed a bug in the message_string method in which the resulting text string for some
|
||
mime messages to be incompatible with append.
|
||
|
||
Fixed a bug in the Fast_io i/o engine that could cause hangs during an append operation.
|
||
|
||
Changed a number of regular expressions to accept mixed-case "Ok", "No" or "Bad"
|
||
responses from the server and to do multi-line matching.
|
||
|
||
Fixed a bug in the append method that was causing extra carriage returns to appear in
|
||
messages whose lines were already terminated with the CR-LF sequence. Thanks to Heather
|
||
Adkins for reporting this bug.
|
||
|
||
Enhanced the parse_headers routine so that it is less sensitive to variations of
|
||
case in message headers. Now, the case of the returned key matches the case of the
|
||
field as specified in the parse_headers method's arguments, regardless of its case
|
||
in the message being parsed. (You can thank Heather Atkins for this suggestion as
|
||
well.) See below for more changes to parse_headers in this release.
|
||
|
||
Improved the append method so that it has better error handling and error recovery.
|
||
Thanks to Mark Keisler for pointing out some bugs in the error handling code in
|
||
this method.
|
||
|
||
Added the append_file method, which is like the append method but it works on files
|
||
instead of strings. The file provided to append must contain an RFC822-formatted
|
||
message. Use of the append_file method avoids having to stuff huge messages into
|
||
variables before appending them. Thanks to jwmIII (http://jwm3.org) for suggesting
|
||
this method.
|
||
|
||
Changed the flags method and the parse_headers method so that a reference to an array
|
||
of message sequence numbers (or message UIDS if the Uid parameter is turned on) can
|
||
optionally be passed instead of a single message sequence number (or UID). Use of this
|
||
enhancement will change your return values so be sure to read the pod. Thanks to
|
||
Adrian Smith (adrian.smith@ucpag.com) for delivering this enhancement.
|
||
|
||
Fixed a bug in "message_string" that caused the blank lines between headers and body
|
||
to fall out of the string.
|
||
|
||
Tinkered with the undocumented _send_line method to permit an optional argument
|
||
to suppress the automatic insertion of <CR><LF> at the end of strings being sent.
|
||
(NOTE: I'm telling you this because I'm a nice guy. This doesn't mean that _send_line
|
||
is now a programming interface.)
|
||
|
||
Changes in version 1.10
|
||
-----------------------
|
||
|
||
Added two new methods, lsub and subscribed. lsub replaces the behavior of the default
|
||
method and should be downwardly compatible. The subscribed method works like the
|
||
folders method but the results include only subscribed folders. Thanks to Alexei
|
||
Kharchenko for providing the code for lsub (which is the foundation upon which
|
||
'subscribed' was built).
|
||
|
||
Changes in version 1.09
|
||
-----------------------
|
||
|
||
Changed login method so that values for the User parameter that do not start and end
|
||
with quotes will be quoted when sent to the server. This is to support user id's
|
||
with embedded spaces, which are legal on some platforms.
|
||
|
||
Changed name of test input file created by perl Makefile.PL and used by 'make test'
|
||
from .test to test.txt to support weird, offbeat OS platforms that cannot handle
|
||
filenames beginning with a dot.
|
||
|
||
Fixed bugs in seen, unseen, and recent methods. (These are almost the same method
|
||
anyway; they are dynamically created at compile time from the same code, with
|
||
variable substitution filling in the places where "seen", "unseen", or "recent"
|
||
belong.) The bug caused these methods to return the transaction number of the
|
||
search as if it were the last message sequence number (or message uid) in
|
||
the result set.
|
||
|
||
Added the 'since' method, which accepts a date in either standard perl format (seconds
|
||
since 1/1/1970, or as output by time and as accepted by localtime) or in the date_text
|
||
format as defined in RFC2060 (dd-Mon-yyyy, where Mon is the English-language
|
||
three-letter abbreviation for the month). It searches for items in the currently
|
||
selected folder for messages sent since the day whose date is provided as an argument.
|
||
|
||
Added 'sentsince', 'senton', 'sentbefore', 'on', and 'before' methods which are
|
||
totally 100% just like the 'since' method, except that they run different searches.
|
||
(Did I mention that it's useful to have RFC2060 handy when writing IMAP clients?)
|
||
|
||
Added two new methods, run and tag_and_run, to allow IMAP client programmers finer
|
||
control over the IMAP conversation. These methods allow the programmer to compose
|
||
the entire IMAP command string and pass it as-is to the IMAP server. The difference
|
||
between these two methods is that the run method requires that the string include
|
||
the tag while the tag_and_run method requires that it does not.
|
||
|
||
To a similar end, the pre-existing Socket parameter and eponymous accessor method
|
||
has been documented to allow direct access to the IMAP socket handle and to allow
|
||
the socket handle to be replaced with some other file handle, presumably one derived
|
||
from a more interesting technology (such as SSL).
|
||
|
||
Fixed a bug that caused blank lines to be removed from 'literal' output (as defined
|
||
in RFC2060) when fast_io was not used. This bug was especially likely to show up in
|
||
routines that fetched a message's body text. The fact that this bug did not occur
|
||
in the newer fast_io code may indicate that I've learned something, but on the other
|
||
hand we shouldn't jump to rash conclusions.
|
||
|
||
I've run benchmarks on the fast_io code to determine whether or not it is faster and,
|
||
if so, under what circumstances. It appears that the fast_io code is quite faster,
|
||
except when reading large 'literal' strings (i.e. message bodies), in which case it
|
||
appears to take the same amount of time as the older i/o code but at the cost of
|
||
more cpu cycles (which means it may actually be slower on cpu-constrained systems).
|
||
The reason for this is that reads of literal strings are by their nature already
|
||
optimized, but without the overhead of fcntl calls. So if you expect to be doing
|
||
lots of message text (or multipart message body parts) fetching you should not use
|
||
fast_io, but in pretty much any other case you should go ahead and use it. In any
|
||
event, a number of people have tested fast_io so I no longer consider it
|
||
experimental, unless you're running perl on NT or CP/M or something funky like that,
|
||
in which case let me know how you make out!
|
||
|
||
Changes in version 1.08
|
||
-----------------------
|
||
|
||
Maintenance release 1.08a fixes a bug in the folders method when supplying the
|
||
optional argument (see "Enhanced folders method..." below) with some IMAP servers.
|
||
|
||
Added option to build_ldif.pl (in the examples subdirectory) to allow new options and
|
||
to better handle quoted comments in e-mail addresses. Thanks to Jeffrey Fiedl,
|
||
whose book _Mastering Regular Expressions_ (O'Reilly) helped me to figure out a
|
||
good way to do this.
|
||
|
||
Fixed documentation error that failed to mention constraints on when the append
|
||
method will return the uid of the appended message. (This feature only works with
|
||
servers that have the UIDPLUS capability.)
|
||
|
||
Added/improved documentation somewhat.
|
||
|
||
The copy method now returns a comma-separated list of uids if successful and if the
|
||
IMAP server supports UIDPLUS extentions. The move method now works similarly.
|
||
|
||
Added new method uidnext, which accepts the name of a folder as an argument and returns
|
||
the next available message UID for that folder.
|
||
|
||
The exists and append methods now will handle unquoted foldernames with embedded
|
||
spaces or quotes or whatever. Including quotes as part of the argument string is no
|
||
longer required but is still supported for backwards compatibility reasons. In other
|
||
words, $imap->exists(q("Some Folder")) is now no longer necessary (but will still work). $imap->exists(some folder) is good enough.
|
||
|
||
Mail::IMAPClient has been tested successfully on Mirapoint 2.0.2. (Thanks to Jim
|
||
Hickstein.)
|
||
|
||
I've now installed the UW imapd IMAP4rev1 v12.264 on one of my machines so I'm better
|
||
able to certify that platform. All the tests in 'make test' work there (or are at least
|
||
gently skipped).
|
||
|
||
Fixed bug in getacl in which folder names were quoted twice. (Thanks to Albert Chin for
|
||
squashing this bug.) Similar bugs existed in the other ACL methods and were similarly
|
||
fixed.
|
||
|
||
Fixed a bug in message_uid that basically caused it to not work. Muchos gracias to
|
||
Luvox (aka fluvoxamine hydrochloride) for providing me with just the help I needed to
|
||
discover and fix this bug.
|
||
|
||
Enhanced folders method to allow an argument. If an argument is supplied, then
|
||
the folders method will restrict its results to subfolders of the supplied argument
|
||
(which should be the name of a parent folder, IMHO). This is implemented by supplying
|
||
arguments to the LIST IMAP Client command so we are optimizing network I/O at the
|
||
expense of possible server incompatibilities. If you find server incompatibilities
|
||
with this then please let me know, and in the meantime you can always
|
||
grep(/^parent/,$imap->folders) or something. Or re-implement the folders
|
||
method yourself.
|
||
|
||
|
||
Changes in version 1.07
|
||
-----------------------
|
||
Added a new parameter, Fast_io, which, if set to a true value, will attempt to
|
||
implement a faster I/O engine. USE THIS AT YOUR OWN RISK. It is alpha code. I don't
|
||
even know yet if it even helps.
|
||
|
||
Added support for spaces in folder names for the autoloaded subscribe method.
|
||
|
||
Added new methods setacl, getacl, deleteacl, and listrights. These methods are not yet
|
||
fully tested and should be considered beta for this release.
|
||
|
||
Enhanced support for the myrights method (which is implemented via the default method).
|
||
|
||
Fixed bug in append method that caused it to hang if server replied to original APPEND
|
||
with a NO (because, say, the mailbox's quota has been exceeded).
|
||
|
||
Removed the autodiscovery of the folder hierarchy from the login method. This will
|
||
speed up logging in but may delay certain other methods later (but see the next item,
|
||
below).
|
||
|
||
Updated the exists method to issue a "STATUS" IMAP Client command, rather than depend
|
||
on the folder hierarchy being discovered via 'LIST "" "*"'. Apparently this speeds
|
||
things up a lot for some configurations, although the difference will be negligable to
|
||
many.
|
||
|
||
Updated Makefile.PL to support the PREFIX=~/ directive. Thanks to Henry C. Barta
|
||
(hbarta@wwa.com) for this fix.
|
||
|
||
Added the Timeout parameter and eponymous accessor method, which, if set to a true
|
||
value, causes reads to time out after the number of seconds specified in the Timeout
|
||
parameter. The value can be in fractions of a second. This has not been fully tested
|
||
though, so use of this parameter is strictly "Beta".
|
||
|
||
Enhanced support for the UID IMAP client command. Setting the new Uid parameter to a
|
||
true value will now cause the object to treat all message numbers as message UID
|
||
numbers rather than message sequence numbers. Setting the Uid parameter to a false
|
||
value will turn off this behavior again.
|
||
|
||
Updated test suite to handle servers that cannot do UIDPLUS and to add tests for
|
||
the Uid parameter.
|
||
|
||
Incorporated bug fixes for recent_count and message_count in which some servers are
|
||
sticking in extra \r's, and updated DESTROY to remove spurious warning messages under
|
||
some versions of perl (thanks to Scott Wilson for catching and killing these bugs).
|
||
|
||
|
||
Changes in version 1.06
|
||
-----------------------
|
||
Changed folders method so that it correctly handles mail folders whose names start and
|
||
end with quotes.
|
||
|
||
Changed append method so that it returns the uid of the newly appended message if
|
||
successful. Since the uid is a "true" value this should not affect the behavior of
|
||
existing scripts, although it may enhance the behavior of new scripts ;-)
|
||
|
||
Fixed bug in parse_headers that could cause script to die if there were no headers of
|
||
the type requested and if there was a space on the blank line returned from FETCH.
|
||
(Some blank lines are blanker than others...)
|
||
|
||
Added the "flags" method, which returns an array (or array reference if called in scalar
|
||
context) containing the flags that have been set for the message whose sequence number
|
||
has been provided as the argument to the method.
|
||
|
||
Added the "message_string" method, which accepts a message sequence number as an
|
||
argument and returns the contents of the message (including RFC822 headers) as a
|
||
single string.
|
||
|
||
Added the "body_string" method, which accepts a message sequence number as an argument
|
||
and returns the contents of the message (not including RFC822 headers) as a single
|
||
string.
|
||
|
||
Changes in version 1.05
|
||
-----------------------
|
||
|
||
Patched the 'make test' basic test to work correctly on systems that do not
|
||
support double quotes in folder names. Thanks to Rex Walters for this fix.
|
||
|
||
Added a new example script, build_dist.pl, that rumages through a folder
|
||
(specified on the command line) and collects the "From:" address, and then
|
||
appends a message to that folder with all those addresses in both the To: field
|
||
and the text, to facilitate cuting and pasting (or dragging and dropping)
|
||
into address books and so forth. (Note that the message doesn't actually get
|
||
sent to all those people; it just kind of looks that way.)
|
||
|
||
Also added another example, build_ldif.pl, that is similar to build_dist.pl
|
||
except that instead of listing addresses in the message text, it creates a
|
||
MIME attachment and attaches a text file in LDIF format, which can then be
|
||
imported into any address book that supports LDIF as an import file format.
|
||
This example requires the MIME::Lite module. MIME::Lite was written by Eryq
|
||
(okay, Erik Dorfman is his legal name), and is totally available on CPAN.
|
||
|
||
This distribution has now been tested on Mirapoint Message Server Appliances
|
||
(versions 1.6.1 and 1.7.1). Many thanks to Rex Walters for certifying this
|
||
platform and for providing a test account for future releases.
|
||
|
||
Changes in version 1.04
|
||
-----------------------
|
||
|
||
Fixed situation in which servers that include the "<tag> <COMMAND> OK\r\n" line
|
||
as part of a literal (i.e. text delivered via {<length>}\r\n<length> bytes\r\n)
|
||
caused the module to hang. This situation is pretty rare; I've only run across
|
||
one server that does it. I'm sure it's a bug; I'm not sure whose. ;-}
|
||
Many thanks to Thomas Stromberg for 1) pointing out this bug and 2) providing
|
||
me with facilities to find and fix it!
|
||
|
||
Fixed potential bug in I/O engine that could cause module to hang when reading
|
||
a literal if the first read did not capture the entire literal.
|
||
|
||
Cleaned up some unnecessary runtime warnings when a script is executed with
|
||
the -w switch.
|
||
|
||
Added new tests to 'make test'. I just can't keep my hands off it! ;-)
|
||
|
||
Enhanced the append method and several tests in 'make test' to be more widely
|
||
compatible. Successfully tested on UW-IMAP, Cyrus v1.5.19, Netscape Messenger
|
||
4.1, and Netscape Messenger v3.6. If you know of others please add them to
|
||
the list!
|
||
|
||
Fixed a bug in the separator method (new in 1.03) that caused it to fail if
|
||
'inbox' was specified in lowercase characters as the method's argument.
|
||
|
||
Added a new example, imap_to_mbox.pl, contributed by Thomas Stromberg. This
|
||
example converts a user's IMAP folders on an IMAP server into mbox format.
|
||
|
||
Changes in version 1.03
|
||
-----------------------
|
||
Reworked several methods to support double-quote characters within folder
|
||
names. This was kind of hard. This has been successfully tested with create,
|
||
delete, select, and folders, to name the ones that come to mind.
|
||
|
||
Reworked the undocumented method that reads the socket to accept and handle
|
||
more gracefully lines ending in {nnn}\r\n ( where nnn is a number of
|
||
characters to read). This seems to be part of the IMAP protocol although I
|
||
am at a total loss as to where it's explained, other than a brief description
|
||
of a "literal's" bnf syntax, which hardly counts.
|
||
|
||
Added separator object method, which returns the separator character in use
|
||
by the current server.
|
||
|
||
Added is_parent method, which returns 1, 0, or undef depending on whether a
|
||
folder has children, has no children, or is not permitted to have children.
|
||
|
||
Added tests to 'make test' to test new function. Also changed 'make test' to
|
||
support IMAP systems that allow folders to be created only in the user's INBOX
|
||
(which is the exact opposite of what my IMAP server allows...oh, well).
|
||
|
||
Fixed a bug that caused search to return an array of one undef'ed element
|
||
rather than undef if there were no hits.
|
||
|
||
Changes in version 1.02
|
||
-----------------------
|
||
Fixed bugs in search and folders methods.
|
||
|
||
Fixed bug in new method that ignored Clear => 0 when specified as arguments to
|
||
new.
|
||
|
||
Changes in version 1.01
|
||
-----------------------
|
||
Fixed a bug in test.pl that caused tests to fail if the extended tests were not used.
|
||
|
||
Added method 'parse_headers' to parse the header fields of a message in the
|
||
IMAP store into a perl data structure.
|
||
|
||
Changes in version 1.00
|
||
-----------------------
|
||
Made cosmetic changes to documentation.
|
||
|
||
Fixed a bug introduced into the 'folders' method in .99.
|
||
|
||
Changed 'new' method so that it returns undef if an implicit connection or
|
||
login is attempted but fails. Previous releases returned a Mail::IMAPClient
|
||
object that was not connected or not logged in, depending on what failed.
|
||
|
||
Changed installation script so that it reuses the parameter file for test.pl
|
||
if it finds one. Installation can be run in the background if the test.txt file
|
||
exists. Touching it is good enough to prevent prompts; having a correctly
|
||
formatted version (as described in test_template.txt) is even better, as it will
|
||
allow you to do a thorough 'make test'.
|
||
|
||
Changes in version .99
|
||
----------------------
|
||
Added the Rfc822_date class method to create RFC822-compliant date fields in
|
||
messages being appended with the append method.
|
||
|
||
Added the recent, seen, and unseen methods to return an array of sequence
|
||
numbers from a SEARCH RECENT, SEARCH SEEN, or SEARCH UNSEEN method call.
|
||
These methods are shortcuts to $imap->search("RECENT"), etc.
|
||
|
||
Added the recent_count method to return the number of RECENT messages in a
|
||
folder. Contributed by Rob Deker.
|
||
|
||
Added 'use strict' compliance, courtesy of Mihai Ibanescu.
|
||
|
||
Fixed a bug in the search method that resulted in a list with one empty member
|
||
being returned if a search had no hits. The search method now returns undef
|
||
if there are no hits.
|
||
|
||
Added 'authenticate' method to provide very crude support for the IMAP
|
||
AUTHENTICATE command. The previous release didn't support AUTHENTICATE at all,
|
||
unless you used very low-level (and undocumented) methods. With the
|
||
'authenticate' method, the programmer still has to figure out how to
|
||
respond to the server's challenge. I hope to make it friendlier in the
|
||
next release. Or maybe the one after that. This method is at least a start,
|
||
albeit a pretty much untested one.
|
||
|
||
Added Rfc822_date class method to facilitate creation of "Date:" header
|
||
field when creating text for the "append" method, although the method may
|
||
come in handy whenever you're creating a Date: header, even if it's not
|
||
in conjuction with an IMAP session.
|
||
|
||
Added more tests, which will optionally run at 'make test' time, provided all
|
||
the necessary data (like username, hostname, password for testing an IMAP
|
||
session) are available.
|
||
|
||
|
||
Changes in version 0.09
|
||
-----------------------
|
||
Thu Aug 26 14:10:03 1999 - original version; created by h2xs 1.19
|
||
|
||
# $Id: Changes,v 20001010.18 2003/06/12 21:35:48 dkernen Exp $
|