All notable changes to webklex/laravel-imap
will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
- NaN
- NaN
- NaN
- Debug line position fixed
- Handle incomplete address to string conversion
- Configured message key gets overwritten by the first fetched message
- Attachment::save() return error 'A facade root has not been set'
- Unused dependencies removed
- Fix PHP 8 error that changes null back in to an empty string. (thanks @mennovanhout)
- Fix regex to be case insensitive (thanks @mennovanhout)
- Attachment detection updated
- Timeout handling improved
- Additional utf-8 checks added to prevent decoding of unencoded values
- Boundary detection simplified
- Prevent potential body overwriting
- CSV files are no longer regarded as plain body
- Boundary detection overhauled to support "related" and "alternative" multipart messages
- Attachment saving filename fixed
- Unnecessary parameter removed from
Client::getTimeout()
- Missing encryption variable added - could have caused problems with unencrypted communications
- Prefer attachment filename attribute over name attribute
- Missing connection settings added to
Folder:idle()
auto mode - Message move / copy expect a folder path
Client::getFolder()
updated to circumvent special edge cases- Missing connection status checks added to various methods
- Unused default attribute
message_no
removed fromMessage::class
- Fix setting default mask from config (thanks @shacky)
- Chunked fetch fails in case of less available mails than page size
- Protocol::createStream() exception information fixed
- Legacy methods (headers, content, flags) fixed
- Legacy connection cycle fixed (thanks @zssarkany)
- Several POP3 fixes (thanks @Korko)
- Fixes handling of long header lines which are seperated by
\r\n\t
(thanks @Oliver-Holz) - Fixes to line parsing with multiple addresses (thanks @Oliver-Holz)
- Fixed problem with skipping last line of the response. (thanks @szymekjanaczek)
- Extend date parsing error message
- Fixed 'Where' method replaces the content with uppercase
- Don't surround numeric search values with quotes
- Context added to
InvalidWhereQueryCriteriaException
- Redundant
stream_set_timeout()
removed
- Auto reconnect option added to
Folder::idle()
- Dynamic Attribute access support added (e.g
$message->from[0]
) - Message not found exception added
- Chunked fetching support added
Query::chunked()
. Just in case you can't fetch all messages at once - "Soft fail" support added
- Count method added to
Attribute:class
- Convert an Attribute instance into a Carbon date object
- Disable rfc822 header parsing via config option
- Added imap 4 handling. (thanks @szymekjanaczek)
- Added laravel's conditionable methods. (thanks @szymekjanaczek)
- Expose message folder path (thanks @Magiczne)
- Adds mailparse_rfc822_parse_addresses integration (thanks @Oliver-Holz)
- Added moveManyMessages method (thanks @Magiczne)
- Added copyManyMessages method (thanks @Magiczne)
- Added
UID
as available search criteria (thanks @szymekjanaczek) - Make boundary regex configurable (thanks @EthraZa)
- IMAP ID support added
- Enable debug mode via config
- Custom UID alternative support added
- Fetch additional extensions using
Folder::query(["FEATURE_NAME"])
- Optionally move a message during "deletion" instead of just "flagging" it (thanks @EthraZa)
WhereQuery::where()
accepts now a wide range of criteria / values.
- A new exception can occur if a message can't be fetched (
\Webklex\PHPIMAP\Exceptions\MessageNotFoundException::class
) Message::move()
andMessage::copy()
no longer accept folder names as folder path- A
Message::class
instance might no longer have amessage_no
attribute - All protocol methods which had a
boolean
$uid
option no longer support a boolean. UseIMAP::ST_UID
orIMAP::NIL
instead. If you want to use an alternative toUID
just use the string instead. - Default config option
options.sequence
changed fromIMAP::ST_MSGN
toIMAP::ST_UID
. Folder::query()
no longer accepts a charset string. It has been replaced by an extension array, which provides the ability to automatically fetch additional features.
- Attachment::save() return error 'A facade root has not been set'
- Unused dependencies removed
- Fix PHP 8 error that changes null back in to an empty string. (thanks @mennovanhout)
- Fix regex to be case insensitive (thanks @mennovanhout)
- Debug line position fixed
- Handle incomplete address to string conversion
- Configured message key gets overwritten by the first fetched message
- Get partial overview when
IMAP::ST_UID
is set - Unnecessary "'" removed from address names
- Folder referral typo fixed
- Legacy protocol fixed
- Treat message collection keys always as strings
- Missing RFC attributes added
- Set the message sequence when idling
- Missing UID commands added
- Configurable supported default flags added
- Message attribute class added to unify value handling
- Address class added and integrated
- Alias
Message::attachments()
forMessage::getAttachments()
added - Alias
Message::addFlag()
forMessage::setFlag()
added - Alias
Message::removeFlag()
forMessage::unsetFlag()
added - Alias
Message::flags()
forMessage::getFlags()
added - New Exception
MessageFlagException::class
added - New method
Message::setSequenceId($id)
added - Optional Header attributizion option added
- Get a message by its message number
- Get a message by its uid
- Stringified message headers are now separated by ", " instead of " ".
- All message header values such as subject, message_id, from, to, etc now consists of an
Àttribute::class
instance (should behave the same way as before, but might cause some problem in certain edge cases) - The formal address object "from", "to", etc now consists of an
Address::class
instance (should behave the same way as before, but might cause some problem in certain edge cases) - When fetching or manipulating message flags a
MessageFlagException::class
exception can be thrown if a runtime error occurs - Learn more about the new
Attribute
class here: www.php-imap.com/api/attribute - Learn more about the new
Address
class here: www.php-imap.com/api/address - Folder attribute "referal" is now called "referral"
- Missing env variable
IMAP_AUTHENTICATION
added - Header decoding problem fixed
- IMAP::FT_PEEK removing "Seen" flag issue fixed
- Text/Html body fetched as attachment if subtype is null
- Potential header overwriting through header extensions
- Prevent empty attachments
- Search performance increased by fetching all headers, bodies and flags at once
- Legacy protocol support updated
- Fix Query pagination. (thanks @mikemiller891)
- Missing array decoder method added (thanks @lutchin)
- Additional checks added to prevent message from getting marked as seen
- Boundary parsing improved (thanks @AntonioDiPassio-AppSys)
- Idle operation updated
- Cert validation issue fixed
- Allow boundaries ending with a space or semicolon (thanks @smartilabs)
- Ignore IMAP DONE command response
- Default
options.fetch
set toIMAP::FT_PEEK
- Address parsing fixed
- Alternative rfc822 header parsing fixed
- Parse more than one header key
- Fetch folder overview fixed
Message::getTextBody()
fallback value fixed
- Default folder locations added
- Search for messages by message-Id
- Search for messages by In-Reply-To
- Message threading added
Message::thread()
- Default folder locations added
- Set fetch order during query @Max13
- Missing message setter methods added
Folder::overview()
method added to fetch all headers of all messages in the current folder- Force a folder to be opened
- Proxy support added
- Flexible disposition support added
- New
options.message_key
optionuid
added - Protocol UID support added
- Flexible sequence type support added
- Depending on your configuration, your certificates actually get checked. Which can cause an aborted connection if the certificate can not be validated.
- Messages don't get flagged as read unless you are using your own custom config.
- All
Header::class
attribute keys are now in a snake_format and no longer minus-separated. Message::getTextBody()
no longer returns false if no text body is present.null
is returned instead.
- Prevent text bodies from being fetched as attachment
- Missing variable check added to prevent exception while parsing an address #356
- Missing variable check added to prevent exception while parsing a part subtype
- Missing variable check added to prevent exception while parsing a part content-type #356
- Mixed message header attribute
in_reply_to
"unified" to be always an array - Potential message moving / copying problem fixed
- Move messages by using
Protocol::moveMessage()
instead ofProtocol::copyMessage()
andMessage::delete()
- Boundary detection problem fixed (@DasTobbel)
- Content-Type detection problem fixed (@DasTobbel)
- If content disposition is multiline, implode the array to a simple string (@DasTobbel)
- Potential problematic prefixed white-spaces removed from header attributes
- Fix inline attachments and embedded images (@dwalczyk)
- Possible error during address decoding fixed (@Slauta)
- Flag event dispatching fixed
- Fixed
Query::paginate()
(@Max13) Message::getAttributes()
hasn't returned all parameters- Wrong message content property reference fixed
- Fix header extension values
- Part header detection method changed
- Possible decoding problem fixed
Str::class
dependency removed fromHeader::class
- Dependency problem in
Attachement::getExtension()
fixed - Quota handling fixed
Protocol::moveMessage()
method added- Expended
Client::getFolder($name, $deleimiter = null)
to accept either a folder name or path (@DasTobbel) - Special MS-Exchange header decoding support added
ClientManager::make()
method added to support undefined accounts- Alternative attachment names support added (@oneFoldSoftware)
- Fetch message content without leaving a "Seen" flag behind
- Support multiple boundaries (@dwalczyk)
- Part number added to attachment
Client::getFolderByPath()
added (@Max13)Client::getFolderByName()
added (@Max13)- Throws exceptions if the authentication fails (@Max13)
- Default account config fallback added
- Text bodies might no longer get fetched as attachment
Message::$in_reply_to
type changed from mixed to array
- Missing default config parameter added #346
- Imap idle command added
- Redundant class
ClientManager::class
removed and config handling moved to depending library "webklex/php-imap" #345 #344
\Webklex\IMAP\ClientManager::class
no longer exists. Please use the\Webklex\IMAP\Facades\Client::class
facade or\Webklex\PHPIMAP\ClientManager::class
instead.
- Missing default config parameter added (#337)
- Wrong path to config directory (#336)
- Encoding / Decoding improved and exception fallback added
- Missing pagination item records fixed (#287, #329)
- Missing attachments problem solved (#284, #277)
- php-imap module replaced by direct socket communication
- Package core moved to
webklex/php-imap
- Legacy protocol support added
- True IMAP IDLE support added (#185)
- oAuth support added (#180)
- Dynamic and customizable events added
- Fetching all available headers (#282)
- Most class namespaces have changed from
IMAP
toPHPIMAP
- Method response structure has changed in most classes
- Deprecated methods removed
- New exceptions can occur
- All
- Exception handling improved and missing child exception added (#326)
- Fix 'A non well formed numeric value encountered' ErrorException (#327)
- Greatly increased IDLE performance
- Message::fetchStructure() redundant code removed
- Read an overview of the information in the headers of a given message or sequence
- Folder name encoding added (#324) (@aperture-it)
- Add a fallback when aliasing encodings for iconv (#325) (@Hokan22)
- Method to receive the encoded folder name added
- Default fetch attributes set to
null
in order to use the config default value
- "BADCHARSET" exception will be used to determine the required charset (#100)
- Client::getMessages() default fetch parameter changed
- Folder::getMessages() default fetch parameter changed
- Folder::getMessage() default fetch parameter changed
- Event parameter handling fixed (#322)
- IDLE like support added (#185)
- Message events added (deleted, restored, moved, new*)
- Point to root namespace if handling native functions (#279)
- Use address charset from header information if set (#286)
- Fix Attachment::getExtension() under Laravel 7.x (#290) (@ThanhSonITNIC)
- Custom and X-Spam search criteria fixed (#296)
- Prevent double where condition strings
- Optional iconv_mime_decode() support added (#295)
- Custom search conditions have to begin with
CUSTOM
- Convert encoding of personal data struct #272
- Test & implement fix for #203 #270 #235
- Attachment size handling added #276
- Find messages by custom search criteria #268
- Date handling in Folder::appendMessage() fixed #224
- Carbon Exception Parse Data #45
- Convert sender name from non-utf8 to uf8 #260 (@hwilok) #259
- .csv attachement is not processed #231
- mail part structure property comparison changed to lowercase #241 #242
- Replace helper functions for Laravel 6.0 #250 (@koenhoeijmakers)
- Path prefix option added to Client::getFolder() method #234
- Pagination count total bug #213
- Changed internal message move and copy methods #210
- Query::since() query returning empty response #215
- Carbon Exception Parse Data #45
- Reading a blank body (text / html) but only from this sender #203
- Message::getFolder() method
- Create a fast count method for queries #216
- STARTTLS encryption alias added
- Problem with Message::moveToFolder() and multiple moves #31
- Problem with encoding conversion #203
- Message null value attribute problem fixed
- Client connection path handling changed to be handled inside the calling method #31
- Mailbox fetching exception added #201
- Message::moveToFolder() fetches new Message::class afterwards #31
- Message::moveToFolder() returns either a Message::class instance or null and not a boolean
- iconv(): error suppressor for //IGNORE added #184
- Typo Folder attribute fullName changed to full_name
- Query scope error fixed #153
- Message structure accessor added #182
- Shadow Imap const class added #188
- Connectable "NOT" queries added
- Additional where methods added
- Message attribute handling changed
- Attachment attribute handling changed
- Message flag handling updated
- Message::getHTMLBody($callback) extended
- Masks added (take look at the examples for more information on masks)
- More examples added
- Query::paginate() method added
- Folder::fullName is now Folder::full_name
- Attachment::image_src might no longer work as expected - use Attachment::getImageSrc() instead
- Replace embedded image with URL #151
- Imap client timeout can be modified and read #186
- Decoder config options added #175
- Message search criteria "NOT" added #181
- Fix sender name in non-latin emails sent from Gmail (#155)
- Fix broken non-latin characters in body in ASCII (us-ascii) charset #156
- Message::getMessageId() returns wrong value #197
- Message date validation extended #45 #192
- Invalid message date exception added
- Removed "-i" from "iso-8859-8-i" in Message::parseBody #146
- Blade examples
- Folder delimiter check added #137
- Broken non-latin characters in subjects and attachments #133
- Required php extensions added to composer.json
- Message subjects and attachment names will now be decoded with a guessed encoding #97 #107
- Expunge option added to critical imap operations
- Fixing undefined index error if associative config array isn't properly filled #131
- fetch_flags default set to true on all methods
- Missing fetch_flags attribute added
- Folder::query() aliases added
- Priority fetching added
- Config loading fixed and moved to a custom solution
- Set Encryption type correctly #128
- Moving a message takes now a uid #127
- Don't set the charset if it isn't used - prevent strange outlook mail server errors #100
- Protocol option added -minor Fix #126
- Query extended with markAsRead() and leaveUnread() methods
- WhereQuery aliases for all where methods added
- Charset error fixed #109
- Potential imap_close() error fixed #118
- Plain text attachments have a content type of other/plain of text/plain #119
- Carbon Exception Parse Data #45
- Protocol option added #124
- Message collection key option added
- Message collection sorting option added
- Search Query functionality added
- Flag collection added
- Search methods updated
- Force to add a space between criteria in search query, otherwise no messages are fetched. Thanks to @cent89
- Attachment::getMimeType() and Attachment::getExtension() added
- Client::createFolder($name) fixed #91
- Versions will now follow basic Semantic Versioning guidelines (MAJOR.MINOR.PATCH)
- Connection validation added
- Client::renameFolder($old_name, $new_name) and Client::deleteFolder($name) methods added #91
- Find the folder containing a message #92
- Change all incoming encodings to iconv() supported ones #94
- Handle Carbon instances in message search criteria #82
- $message->getRawBody() throws Exception #88
- Request: add getReferences method to Message class #83
- Specify provider name when publishing the config #80
- Enable package discovery #81
- Added option for optional attachment download #76
- Added option for optional body download
- Renamed "fetch" parameters
- hasAttachment() method added
- More explicit date validation statements
- Resolving getMessage is not returning the body of the message #75
- New validation rule for a new invalid date format added (Exception Parse Data #45)
- Default config keys are now fixed (Confusing default configuration values #66)
- Clear error stack before imap_close #72
- FolderCollection::class added
- Comments updated
- Attachment::save() method added
- Unnecessary methods declared deprecated
- Message collection moved to Support
- Attachment collection added
- Attachment class added
- Message search method added
- Basic pagination added
- Prevent automatic body parsing (will be default within the next major version (2.x))
- Unified MessageCollection::class added
- Several small improvements and docs added
- Implementation of the "get raw body" pull request #59
- Get a single message by uid
- Message::class
- Client::class
- Folder::class
- MessageCollection::class
- MessageSearchValidationException::class
- Support message delivery status #47
- Enable support to get In-Reply-To property from Message header. #56
- Set and unset flags added
$oMessage->setFlag(['Seen', 'Spam']) or $oMessage->unsetFlag('Spam')
- Get raw header string
$oMessage->getHeader()
- Get additional header information
$oMessage->getHeaderInfo()
- New experimental function added #48 How can I specify a single folder?
- Ignore inconvertible chars in order to prevent sudden code exists
- #45 DateTime::__construct(): Failed to parse time string (...)
- #41 imap_expunge(): supplied resource is not a valid imap resource
- #40 mb_convert_encoding(): Illegal character encoding specified
- Fix assignment
msgno
touid
regardless offetch_options
is set in config - Disposition is checked in case of malformed mail attachments
- A method to get only unread messages from email folders to Client::class
- Messageset issue resolved #31
- E-mails parsed without a content type of multipart present no body #27
- Do not resolve uid to msgno if using FT_UID #25
- General code style and documentation
- several getter methods added to Message::class
- All
- Fix implode error in Client.php, beacause imap_errors() can return FALSE instead of an array
- FT_UID changed to $this->options which references to
imap.options.fetch
- getConnection method added
- Using a bit more fail save uid / msgNo by calling imap_msgno()
- Carbon dependency removed
- Fixing text attachment issue - overwrite mail body (thx to radicalloop)
- Attachment disposition (special thanks to radicalloop)
- Missing method added to README.md
- $fetch_option setter added
- Merged configuration
- New config parameter added
- "Known issues" added to README.md
- Typo fixed
- Message attribute is now case insensitive
- Readme file extended
- Changelog typo fixed
- imap_fetchheader(): Bad message number - merged
- Changed the default options in imap_fetchbody function - merged
- Attachment handling fixed (Plain text files are no longer ignored)
- Optional config parameter added.
- Readme file extended
- Code commented
- A whole bunch of functions and features added. To many to mention all of them ;)
- Readme file extended
- new laravel-imap package