Systems and methods for email journaling

A computer-implemented method for email journaling may include (1) maintaining, by a journaling mail server, a cache that associates together an update sequence number that indicates a version of an email distribution list and email addresses that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number, (2) receiving, by the server, an email that includes, within at least one header field, a candidate update sequence number and an email distribution list identifier, (3) determining that the update sequence number in the cache is a match for the candidate update sequence number in the header field, and (4) identifying, based on the match between the update sequence number and the candidate update sequence number, the email addresses specified in the cache as the targets for journaling. Various other methods, systems, and computer-readable media are also disclosed.

BACKGROUND

Individuals and organizations often maintain records of their internal and external communications for personal reference and to satisfy regulatory and other compliance standards. Specifically, enterprise organizations may implement email journaling services that “journal” or record some or all emails associated with the organization. In some examples, the email journaling services may forward organization emails to a target journaling email account. In the case of “envelope” email journaling, the services may wrap the organization emails as attachments to journal reports, which may further specify details about the organization emails. These details may include values specified in the original sender field, recipient field, and/or any other fields associated with the emails or included within the email headers.

In some examples, email journaling services may journal emails that specify one or more distribution lists. For example, an organization email may specify a distribution list, such as “sales group,” which may indirectly refer to a large number of separate organization email addresses. Nevertheless, not all of the email addresses corresponding to the distribution list may be targets for email journaling. Accordingly, traditional email journaling services may fail to perform optimally along one or more dimensions, as discussed further below. Consequently, the instant disclosure identifies and addresses a need for additional and improved systems and methods for email journaling.

SUMMARY

As will be described in greater detail below, the instant disclosure generally relates to systems and methods for email journaling by, for example, inserting an update sequence number within emails that specify a distribution list to indicate a version of the distribution list. The disclosed systems and methods may then check the update sequence number, at a receiving mail server, to determine whether to bypass a process for matching distribution list email addresses with email addresses targeted for journaling. In bypassing the process for matching the email addresses, the disclosed systems and methods may simply reference cached results of a previous performance of the process for matching email addresses when the update sequence number indicates that the results have not changed, as discussed further below.

In one example, a computer-implemented method for email journaling may include (1) maintaining, by a journaling mail server, a cache that associates together an update sequence number that indicates a version of an email distribution list and email addresses that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number, (2) receiving, by the journaling mail server, an email that includes, within at least one header field, a candidate update sequence number and an email distribution list identifier, the email distribution list identifier identifying the email distribution list, (3) determining that the update sequence number in the cache is a match for the candidate update sequence number in the header field, and (4) identifying, based on the match between the update sequence number and the candidate update sequence number, the email addresses specified in the cache as the targets for journaling.

In one embodiment, the journaling mail server executes a task according to the simple mail transfer protocol. In some examples, identifying the email addresses specified in the cache as the targets for journaling enables the journaling mail server to skip a process for matching email addresses that are designated as targets to email addresses that are included within an expanded list of email addresses for the email distribution list. In some examples, skipping the process for matching email addresses that are designated as targets to email addresses that are included within the expanded list may include reusing cached results from a previous execution of the process for matching.

In some examples, determining that the update sequence number in the cache is a match for the candidate update sequence number in the header field is performed in response to checking for whether the update sequence number in the cache is a match for the candidate update sequence number in the header field.

In one embodiment, the email is formatted according to a protocol that provides for extensible header fields. The email may include the candidate update sequence number and the email distribution list identifier within at least one extensible header field according to the protocol.

In one embodiment, the computer-implemented method may further include receiving, by the journaling mail server, an additional email that may include an additional candidate update sequence number and the email distribution list identifier in a header field. In some examples, the computer-implemented method may further include determining that the update sequence number in the cache is not a match for the additional candidate update sequence number in the header field. In one embodiment, the computer-implemented method may further include, in response to determining that the update sequence number in the cache is not a match, performing a process for matching email addresses that are designated as targets to email addresses that are included within an expanded list of email addresses for the email distribution list. In one embodiment, the computer-implemented method may further include updating the update sequence number in the cache to match the candidate update sequence number in the header field and updating the email addresses in the cache to specify results of performing the process for matching email addresses.

In one embodiment, a system for implementing the above-described method may include (1) a maintenance module, stored in memory, that maintains, as part of a journaling mail server, a cache that associates together an update sequence number that indicates a version of an email distribution list and email addresses that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number, (2) a reception module, stored in memory, that receives, as part of the journaling mail server, an email that may include, within at least one header field, a candidate update sequence number and an email distribution list identifier, the email distribution list identifier identifying the email distribution list, (3) a determination module, stored in memory, that determines that the update sequence number in the cache is a match for the candidate update sequence number in the header field, (4) an identification module, stored in memory, that identifies, based on the match between the update sequence number and the candidate update sequence number, the email addresses specified in the cache as the targets for journaling, and (5) at least one physical processor configured to execute the maintenance module, the reception module, the determination module, and the identification module.

In some examples, the above-described method may be encoded as computer-readable instructions on a non-transitory computer-readable medium. For example, a computer-readable medium may include one or more computer-executable instructions that, when executed by at least one processor of a computing device, may cause the computing device to (1) maintain, by a journaling mail server, a cache that associates together an update sequence number that indicates a version of an email distribution list and email addresses that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number, (2) receive, by the journaling mail server, an email that includes, within at least one header field, a candidate update sequence number and an email distribution list identifier, the email distribution list identifier identifying the email distribution list, (3) determine that the update sequence number in the cache is a match for the candidate update sequence number in the header field, and (4) identify, based on the match between the update sequence number and the candidate update sequence number, the email addresses specified in the cache as the targets for journaling.

DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS

The present disclosure is generally directed to systems and methods for email journaling. As will be explained in greater detail below, the systems and methods described herein may improve the efficiency of email journaling services by intelligently skipping a process for matching distribution list email addresses to targeted journaling email addresses when an update sequence number indicates that the distribution list has not changed since a previous instance of performing the matching process. When the update sequence number indicates that the distribution list has not changed, the disclosed systems and methods may simply reference cached results of the previous instance of performing the matching process. Moreover, the disclosed systems and methods may implement this technique for selectively bypassing the matching process by maintaining, updating, inserting, and/or checking the update sequence number within organization emails that are potential targets for email journaling, as discussed further below.

The following will provide, with reference toFIGS. 1-2, detailed descriptions of exemplary systems for email journaling. Detailed descriptions of corresponding computer-implemented methods will also be provided in connection withFIGS. 3-6. In addition, detailed descriptions of an exemplary computing system and network architecture capable of implementing one or more of the embodiments described herein will be provided in connection withFIGS. 7 and 8, respectively.

FIG. 1is a block diagram of exemplary system100for email journaling. As illustrated in this figure, exemplary system100may include one or more modules102for performing one or more tasks. For example, and as will be explained in greater detail below, exemplary system100may also include a maintenance module104that may maintain, as part of a journaling mail server, a cache that associates together an update sequence number that indicates a version of an email distribution list and email addresses that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number. Exemplary system100may additionally include a reception module106that may receive, as part of the journaling mail server, an email that includes, within at least one header field, a candidate update sequence number and an email distribution list identifier, the email distribution list identifier identifying the email distribution list. Exemplary system100may also include a determination module108that may determine that the update sequence number in the cache is a match for the candidate update sequence number in the header field. Exemplary system100may additionally include an identification module110that may identify, based on the match between the update sequence number and the candidate update sequence number, the email addresses specified in the cache as the targets for journaling. Although illustrated as separate elements, one or more of modules102inFIG. 1may represent portions of a single module or application.

As illustrated inFIG. 1, exemplary system100may also include one or more databases, such as database120. In one example, database120may be configured to store emails122, which may correspond to internal and/or external emails associated with an enterprise organization, as discussed further below. Similarly, database120may also be configured to store a cache124, which may further store an update sequence number and/or matching email addresses that match both a version of a distribution list (e.g., as identified by the update sequence number) and a target list for journaling emails. As used herein, the term “cache” generally refers to any memory module that may store these items of information for future reference to thereby enable email journaling services to bypass needless instances of performing the matching process, as discussed further below.

Database120may represent portions of a single database or computing device or a plurality of databases or computing devices. For example, database120may represent a portion of server206inFIG. 2, computing system710inFIG. 7, and/or portions of exemplary network architecture800inFIG. 8. Alternatively, database120inFIG. 1may represent one or more physically separate devices capable of being accessed by a computing device, such as server206inFIG. 2, computing system710inFIG. 7, and/or portions of exemplary network architecture800inFIG. 8.

Exemplary system100inFIG. 1may be implemented in a variety of ways. For example, all or a portion of exemplary system100may represent portions of exemplary system200inFIG. 2. As shown inFIG. 2, system200may include a computing device202in communication with a server206via a network204. In one example, computing device202may be programmed with one or more of modules102and/or may store all or a portion of the data in database120. Additionally or alternatively, server206may be programmed with one or more of modules102and/or may store all or a portion of the data in database120.

In one embodiment, one or more of modules102fromFIG. 1may, when executed by at least one processor of computing device202and/or server206, enable computing device202and/or server206to perform email journaling. For example, and as will be described in greater detail below, maintenance module104may maintain, as part of server206, a cache124that associates together (A) an update sequence number240that indicates a version of an email distribution list and (B) email addresses242that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number. Reception module106may receive, as part of server206, an email230that includes, within at least one header field, a candidate update sequence number232and an email distribution list identifier234. Email distribution list identifier234may identify the email distribution list (i.e., the email distribution list corresponding to email addresses242). Determination module108may determine that update sequence number240in cache124is a match for candidate update sequence number232in the header field. Identification module110may identify, based on the match between update sequence number240and candidate update sequence number232, email addresses242specified in cache124as the targets for journaling.

Computing device202generally represents any type or form of computing device capable of reading computer-executable instructions. Examples of computing device202include, without limitation, laptops, tablets, desktops, servers, cellular phones, Personal Digital Assistants (PDAs), multimedia players, embedded systems, wearable devices (e.g., smart watches, smart glasses, etc.), gaming consoles, combinations of one or more of the same, exemplary computing system710inFIG. 7, or any other suitable computing device.

Server206generally represents any type or form of computing device that is capable of facilitating the journaling of emails. Examples of server206include, without limitation, application servers and database servers configured to provide various database services and/or run certain software applications.

Notably, in the example ofFIG. 2, modules102are located server-side at server206. In other embodiments, one or more of modules102and cache124may be located on another device, such as another server device, proxy device, peripheral device, and/or client device, according to any suitable combination or permutation of networked devices that together may perform method300to achieve its intended functionality.

As further shown inFIG. 2, computing device202may also include a forwarder220and an expander222. Forwarder220within computing device202may (e.g., as part of a mail transport server) forward email230to server206and also insert the candidate update sequence number. In some examples, computing device202may constitute one mail server, such as a MICROSOFT EXCHANGE MAIL SERVER, that first receives email230. Upon receiving email230, expander222may expand email distribution list identifier234to specify or designate each of the email addresses within the set of email addresses identified by email distribution list identifier234, as discussed above. In these examples, expander222may replace and/or supplement email distribution list identifier234with the expanded set of email addresses. Accordingly, upon receiving email230, server206may identify each of the email addresses within the expanded set of email addresses transmitted from computing device202after the expansion by expander222. When performing the process of matching email addresses according toFIG. 5(i.e., when server206does not bypass the matching process because candidate update sequence number232is new or unknown), server206may parse the expanded set of email addresses to search and identify an updated set of email addresses242, as discussed further below. In these and other examples, server206may execute a task according to the simple mail transfer protocol. In other words, server206may correspond to a simple mail transfer protocol mail server that receives emails from computing device202(e.g., an EXCHANGE server) for forwarding and routing according to the simple mail transfer protocol.

Notably, computing device202may maintain and update the update sequence number for one or more email distribution lists. Similarly, computing device202may insert the current and up-to-date update sequence number for an email distribution list within an email that specifies the email distribution list. Additionally, computing device202(e.g., as an EXCHANGE SERVER) may provide a centralized location for defining and revising the email distribution list. Accordingly, when computing device202first receives email230, computing device202may have direct knowledge of both the current and up-to-date update sequence number for the email distribution list as well as the current and up-to-date set of email addresses corresponding to the email distribution list.

Notably, because the update sequence number is maintained and updated by computing device202, situations will arise in which the corresponding update sequence number240stored within cache124is stale, old, or out of date. For example, server206may receive a first email that specifies one update sequence number (e.g, “002”) for an email distribution list. After receiving the first email, computing device202may receive and process a request to revise the contents of the email distribution list. Accordingly, computing device202may revise (i.e., add an email address to the email distribution list or remove an email address from the email distribution list) and then update the update sequence number (i.e., update the update sequence number from “002” to “003”). In this example, server206may thereafter receive another email that specifies the new update sequence number (i.e., “003”), because computing device202has updated the update sequence number but server206has yet to do so. When this happens, the update sequence number of the new email will not match the previous update sequence number stored within cache124(i.e., because “003” does not match “002”). Accordingly, server206may determine that it can no longer rely on the stale or outdated email addresses242within cache124and must instead perform the matching process ofFIG. 5, as outlined in more detail below.

FIG. 3is a flow diagram of an exemplary computer-implemented method300for email journaling. The steps shown inFIG. 3may be performed by any suitable computer-executable code and/or computing system. In some embodiments, the steps shown inFIG. 3may be performed by one or more of the components of system100inFIG. 1, system200inFIG. 2, computing system710inFIG. 7, and/or portions of exemplary network architecture800inFIG. 8.

As illustrated inFIG. 3, at step302, one or more of the systems described herein may maintain, by a journaling mail server, a cache that associates together (A) an update sequence number that indicates a version of an email distribution list and (B) email addresses that are both designated as targets for journaling and included within the version of the email distribution list identified by the update sequence number. For example, maintenance module104may, as part of server206inFIG. 2, maintain cache124that associates together (A) update sequence number240that indicates a version of an email distribution list and (B) email addresses242that are both designated as targets for journaling and included within the version of the email distribution list identified by update sequence number240.

As used herein, the term “email distribution list” generally refers to a set of email addresses that are associated together, by an email server or email system, to enable a user to conveniently reference all of the email addresses in the set by simply referencing a name or identifier for the email distribution list. As one example, an email distribution list may correspond to a sales group within an enterprise organization. The email distribution list may have the name “sales group.” The email distribution list may also refer to four different email addresses that are associated with four different employees within the sales group of the enterprise organization. Accordingly, a user may conveniently send an email to all four of the employees within the sales group by simply referencing the name or identifier for the email distribution list without separately typing or specifying the email addresses for each of the four different employees.

As used herein, the term “update sequence number” generally refers to any number or symbol that an email journaling service may reference to distinguish between different versions of an email distribution list. In general, the update sequence number uniquely specifies each version of the distribution list after each change to the distribution list. In some examples, an additional change to the distribution list may revert it to a previous version, in which case two different update sequence numbers may both indicate the same version of the distribution list (i.e., the same version of the distribution list at two different points in time). As one example, the update sequence number “001” may designate the first version of an email distribution list. After a change to the email distribution list, such as adding or removing an email address, the update sequence number may be updated to “002” to specify the revised distribution list after the change. In further examples, the update sequence number may be specified in an update sequence number field (e.g., “DL-USN-info”) which may specify the update sequence number and/or the nature of the revision to the distribution list. In some examples, the disclosed systems may still reference cache124, and bypass the matching process (discussed further below forFIG. 5), even when the update sequence number is not a match, if the field specifies the nature of the change to the update sequence number such that the systems may revise the information in the cache to accommodate the revisions without repeating the matching process.

As used herein, the term “targets for journaling” generally refers to email addresses that an email journaling service has specified or designated for journaling such that, when the email journaling service encounters or receives emails that specify the email address (e.g., specify the email address within any header field or within a predefined header field), the email journaling service then records the associated emails within its journal or journal report. For example, when the email journaling service receives an email that specifies an email address that is a target for journaling then the email journaling service may wrap the email as an attachment to a journal report, as outlined above. In general, the email journaling service may forward or transmit the journal report with the associated attachment to a destination email account for recording, journaling, and/or archiving such emails. In contrast, email journaling services may also encounter or receive emails that are not targets for journaling. In this case, the email journaling services may simply forward or discard those emails without performing any recording or journaling.

Notably, the email journaling service may specify rules that indicate which emails (e.g., some, all, etc.) are targets for journaling based on both the content of specified email addresses and the location of the specified email addresses within the emails. Rules that distinguish between emails to journal and email to not journal may indicate that the email journaling service is in “selective” mode. As one specific example, rules may specify that the email address “john@business.com” causes emails to be targets for journaling when that email address appears in a “sender” field but not when it appears in a “recipient” field. In other examples, the rules may specify that the emails are targets whenever the email address appears within any field.

Maintenance module104may maintain the items of information within the cache in a variety of ways. In general, maintenance module104may store the update sequence number and the email addresses within a structure, format, record, column, and/or row that indicates or designates the correlation or association between the two items of information. For example, both items of information may be stored within two different fields of the same data structure, thereby indicating that the two items of information correspond to each other. Maintenance module104may also store the two items of information in a manner that makes each item of information findable and retrievable based on searching for the other associated item of information (i.e., searching for the email addresses associated with the update sequence number or vice versa).

By way of background,FIG. 4shows an example of an email journaling report402that further includes a header404and a body406. As further shown in this figure, header404may specify a date and timing of sending a corresponding email message, which may be attached to report402according to the envelope method of email journaling, as discussed above. In this example, the attached email may have the file name “Sales Prediction.msg”. Header404may also specify an email distribution list (i.e., “Sales Group”) as a target recipient in the “To:” field as well as a single email address account (i.e., “Betty Lyman”) within the same “To:” field. Similarly, header404may also specify another single email address account (i.e., “Kristin Bradshaw”) in the “Cc:” field.

Additionally,FIG. 4also shows information within body406of report402. Body406further specifies the sender of the corresponding email (i.e., “Bryan”), the subject line “Sales Prediction”), the message identifier, and the specific email addresses corresponding to those within the “To:” and “Cc:” fields of the associated email, as described above. Notably, within body406of report402, the email distribution list identifier (i.e, “Sales Group”) has been expanded to further specify numerous other particular email addresses that belong to that identified email distribution list. These expanded email addresses are indicated within body406by the “Expanded” keyword.

At step304, one or more of the systems described herein may receive an email that includes, within at least one header field, a candidate update sequence number and an email distribution list identifier. The email distribution list identifier may identify the email distribution list. For example, reception module106may, as part of server206inFIG. 2, receive email230that includes, within at least one header field, candidate update sequence number232and email distribution list identifier234.

As used herein, the term “candidate update sequence number” generally refers to any candidate sequence number (as further defined above) that has the potential to match or not match update sequence number240stored within cache124, as discussed further below. Similarly, as used herein, the term “journaling mail server” generally refers to any mail server that facilitates or performs email journaling, as further described above. Additionally, as used herein, the term “email distribution list identifier” generally refers to any information that server206receives within system200such that system200can pick out or identify the email distribution list corresponding to candidate update sequence number232.

In some examples, candidate update sequence number232and email distribution list identifier234may be stored in the same email header field or different email header fields (or, alternatively, in the email body, such as a prescript or postscript insertion). Additionally, in some examples, candidate update sequence number232and email distribution list identifier234may be stored contiguously to each other or appended to each other. In one specific example, the term “SG002” may constitute the combination of email distribution list identifier234(“SG” referring to the “sales group” email distribution list) and candidate update sequence number232(“002”). In other examples, candidate update sequence number232and email distribution list identifier234may be stored separately or separated by one or more spaces, lines, breaks, headers, and/or fields.

In further examples, the overall email system may only contain or refer to a single email distribution list, in which case candidate update sequence number232may also constitute email distribution list identifier234. As a more specific example, if the overall email system only includes a single email distribution list for the sales force, then a candidate update sequence number of “002” may designate both the email distribution list (i.e., the sales group distribution list) as well as the update sequence number for that distribution list.

Reception module106may receive email230in a variety of ways. For example, reception module106may receive email230in response to computing device202(e.g., as an EXCHANGE server) forwarding email230for email routing purposes after computing device202expanded email distribution list identifier234using expander222. In general, reception module106may receive email230from computing device202, which forwarded email230using forwarder220. Server206may be configured to receive emails from computing device202and forward or route them according to the simple mail transfer protocol, as discussed above.

In some examples, the email may be formatted according to a protocol that provides for extensible header fields. For example, the extensible header fields may constitute X-HEADER fields as defined by a mail server such as EXCHANGE. In some examples, the extensible header fields may specify strings. In general, extensible header fields may enable a user, administrator, and/or computing or network resource to insert metadata, attributes, and/or other information into an email (e.g., after the user clicks send and/or by a node after the originating node on the network). Extensible header fields may specify further information that the overall email system may use to process the emails. In this example, the extensible header fields may specify candidate update sequence number232and/or email distribution list identifier234, as further discussed above.

At step306, one or more of the systems described herein may determine that the update sequence number in the cache is a match for the candidate update sequence number in the header field. For example, determination module108may, as part of server206inFIG. 2, determine that update sequence number240in cache124is a match for candidate update sequence number232in the header field. As used herein, the phrase “is a match” generally refers to candidate update sequence number232being identical to update sequence number240or otherwise indicating, within system200, that these two items of information refer to the same version of the email distribution list.

Determination module108may determine that the update sequence number in the cache is a match for the candidate update sequence number in the header field in a variety of ways. In some examples, determination module108may determine that the update sequence number in the cache is a match for the candidate update sequence number in the header field in response to checking for whether the update sequence number in the cache is a match.

FIG. 5shows an illustration of two different sources of information that determination module108and/or identification module110may use to identify which emails and/or email addresses to journal. First, determination module108and/or identification module110may perform a matching process502, as in other email journaling services without the benefits of the improved systems disclosed herein.

According to matching process502, one or more computing resources may first process an email distribution list identifier to create an expanded list504of corresponding email addresses. For example, expander222in computing device202may perform the expansion process. After the expansion process is complete, another computing resource, such as server206, may parse expanded list504(which server206may have received from computing device202) and then search expanded list504and/or a targets list506for email addresses that are located within both lists. Targets list506may specify email addresses that are targets for journaling, as first outlined above. Moreover, targets list506may be stored locally within server206or otherwise accessible to server206. Furthermore, server206may use any suitable technique or algorithm for identifying the common or matching email addresses between targets list506and expanded list504. In the specific example ofFIG. 5, the email addresses for David and Maria are located in both targets list506and expanded list504.

In some enterprise emailing systems, expanded list504may contain dozens, hundreds, or thousands of email addresses (the specific example ofFIG. 5is simplified for ease of discussion and explanation). In contrast, targets list506may specify a relatively smaller number of email addresses, such as three in the example ofFIG. 5. Moreover, in some enterprise emailing systems, expanded list504and/or targets list506may change on a rare or infrequent basis. In other words, some email systems may repeat matching process502over and over despite the fact that the results of matching process502remain the same each time so long as targets list506and expanded list504remain the same.

In view of the above, a second source of information for identifying which emails and/or email addresses are targets for journaling corresponds to cache124. As further shown inFIG. 5, cache124may include both email addresses242and update sequence number240. Email addresses242may specify the email addresses for both David and Maria, which are the two email addresses that are common to targets list506and expanded list504, as further discussed above. In other words, cache124may store email addresses242to indicate the results of a previous instance of performing matching process502.

Going forward, identification module110may reference email addresses242within cache124as a faster and more efficient method for identifying those email addresses, instead of repeating matching process502, when determination module108determines that targets list506and/or expanded list504has not changed. For example, determination module108may identify candidate update sequence number232(e.g., “003”) and then check whether it is a match for update sequence number240(“003”) stored within cache124. In this specific example, determination module108may determine that these two items of information are a match for each other, thereby indicating that expanded list504has not changed since the previous performance of matching process502that created the results of email addresses242stored within cache124.

At step308, one or more of the systems described herein may identify, based on the match between the update sequence number and the candidate update sequence number, the email addresses specified in the cache as the targets for journaling. For example, identification module110may, as part of server206inFIG. 2, identify, based on the match between the update sequence number and the candidate update sequence number, email addresses242specified in cache124as the targets for journaling.

As used herein, the phrase “identify the email addresses as the targets for journaling” refers to picking out, from among an expanded list of email addresses for a corresponding email distribution list, which of those email addresses are specified as targets for journaling, such that emails specifying those email addresses should be reported, recorded, and/or archived (i.e., using the journal report process described above forFIG. 4), as opposed to other email addresses that are not targets for journaling. In other words, upon receiving email230, server206may not immediately understand whether to perform a journaling action or process (e.g., sending report402) for email230. To determine whether to perform the journaling action, server206may first determine whether email230specifies an email address that is a target for journaling. In the case that email230specifies email distribution list identifier234, the corresponding expanded set of email addresses may include hundreds or thousands of email addresses. Accordingly, the process of parsing and/or searching to determine which of those hundreds or thousands of email addresses are targets for journaling may become slow and inefficient. Consequently, the disclosed systems and methods may reference candidate update sequence number232to determine whether the slow and inefficient process for searching the hundreds or thousands of email addresses may be bypassed by simply referencing previously stored results of the matching process within cache124, as discussed further below.

In some examples, by identification module110identifying the email addresses specified in the cache as the targets for journaling, identification module110may enable the journaling mail server to skip a process (i.e., matching process502) for matching email addresses that are designated as targets (i.e., targets list506) to email addresses that are included within expanded list504of email addresses for the email distribution list. Additionally, identification module110may bypass the process for matching email addresses that are designated as targets to email addresses that are included within an expanded list of email addresses for the email distribution list by reusing cached results (i.e., email addresses242stored within cache124) from a previous execution of the process for matching.

FIG. 6shows an exemplary flow diagram for a method600that may correspond to steps304and/or306of method300. As shown in this figure, method600may begin at step604, which may correspond to step304inFIG. 3, at which point reception module106receives the email with the candidate update sequence number. At step606, determination module108may determine whether the candidate update sequence number in the received email matches the update sequence number stored within the cache. If these two items of information do not match, then method600may proceed to step608, at which point determination module108and/or identification module110may perform matching process502, as outlined above, and then update cache124with the updated results of the matching process. In other words, determination module108and/or identification module110may parse and/or search an updated version of targets list506and/or expanded list504for matching or common email addresses that are shared between these two lists. Determination module108and/or identification module110may then revise update sequence number240to specify the candidate update sequence number within the received email. Similarly, these modules may update email addresses242within cache124to specify the new results of the new performance of matching process502.

In other words, the systems described herein may receive, as part of the journaling mail server, an additional email that includes an additional candidate update sequence number and the email distribution list identifier in a header field. Determination module108may determine, at step606, that the update sequence number in the cache is not a match for the additional candidate update sequence number in the header field. Accordingly, determination module108and/or identification module110may, at step608and in response to determining that the update sequence number in the cache is not a match, perform matching process502for matching email addresses that are designated as targets to email addresses that are included within an expanded list of email addresses for the email distribution list. Notably, in this case, server206may request and/or receive the up-to-date version of expanded list504from computing device202, the corresponding EXCHANGE server, and/or ACTIVE DIRECTORY.

Notably, the above example refers to an “additional email” that includes a candidate update sequence number that does not match the update sequence number stored within the cache. In other words, the above example refers to situations in which a first email is received with a matching candidate update sequence number and then a second email is received with a non-matching candidate update sequence number. In other examples, the disclosed systems and methods may include situations where a single email is received with a non-matching candidate update sequence number, without necessarily first receiving a matching candidate update sequence number.

In contrast, if the update sequence number in the cache does match the candidate update sequence number in the received email, then method600may proceed to step610, at which point identification module110may simply reference cache124to identify the targets for journaling while bypassing matching process502. In other words, identification module110may assume that the results of performing matching process502would be the same as the results of a previous instance of performing matching process502, because expanded list504has not changed as indicated by the matching candidate update sequence number. Consequently, identification module110may simply reference the cached results of the previous instance of performing matching process502while bypassing an additional instance of performing matching process502.

As explained above in connection with method300inFIG. 3, the systems and methods described herein may improve the efficiency of email journaling services by intelligently skipping a process for matching distribution list email addresses to targeted journaling email addresses when an update sequence number indicates that the distribution list has not changed since a previous instance of performing the matching process. When the update sequence number indicates that the distribution list has not changed, the disclosed systems and methods may simply reference cached results of the previous instance of performing the matching process. Moreover, the disclosed systems and methods may implement this technique for selectively bypassing the matching process by maintaining, updating, inserting, and/or checking the update sequence number within organization emails that are potential targets for email journaling.

FIG. 7is a block diagram of an exemplary computing system710capable of implementing one or more of the embodiments described and/or illustrated herein. For example, all or a portion of computing system710may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the steps described herein (such as one or more of the steps illustrated inFIG. 3). All or a portion of computing system710may also perform and/or be a means for performing any other steps, methods, or processes described and/or illustrated herein.

Computing system710broadly represents any single or multi-processor computing device or system capable of executing computer-readable instructions. Examples of computing system710include, without limitation, workstations, laptops, client-side terminals, servers, distributed computing systems, handheld devices, or any other computing system or device. In its most basic configuration, computing system710may include at least one processor714and a system memory716.

Processor714generally represents any type or form of physical processing unit (e.g., a hardware-implemented central processing unit) capable of processing data or interpreting and executing instructions. In certain embodiments, processor714may receive instructions from a software application or module. These instructions may cause processor714to perform the functions of one or more of the exemplary embodiments described and/or illustrated herein.

System memory716generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory716include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, or any other suitable memory device. Although not required, in certain embodiments computing system710may include both a volatile memory unit (such as, for example, system memory716) and a non-volatile storage device (such as, for example, primary storage device732, as described in detail below). In one example, one or more of modules102fromFIG. 1may be loaded into system memory716.

In certain embodiments, exemplary computing system710may also include one or more components or elements in addition to processor714and system memory716. For example, as illustrated inFIG. 7, computing system710may include a memory controller718, an Input/Output (I/O) controller720, and a communication interface722, each of which may be interconnected via a communication infrastructure712. Communication infrastructure712generally represents any type or form of infrastructure capable of facilitating communication between one or more components of a computing device. Examples of communication infrastructure712include, without limitation, a communication bus (such as an Industry Standard Architecture (ISA), Peripheral Component Interconnect (PCI), PCI Express (PCIe), or similar bus) and a network.

Memory controller718generally represents any type or form of device capable of handling memory or data or controlling communication between one or more components of computing system710. For example, in certain embodiments memory controller718may control communication between processor714, system memory716, and I/O controller720via communication infrastructure712.

I/O controller720generally represents any type or form of module capable of coordinating and/or controlling the input and output functions of a computing device. For example, in certain embodiments I/O controller720may control or facilitate transfer of data between one or more elements of computing system710, such as processor714, system memory716, communication interface722, display adapter726, input interface730, and storage interface734.

Communication interface722broadly represents any type or form of communication device or adapter capable of facilitating communication between exemplary computing system710and one or more additional devices. For example, in certain embodiments communication interface722may facilitate communication between computing system710and a private or public network including additional computing systems. Examples of communication interface722include, without limitation, a wired network interface (such as a network interface card), a wireless network interface (such as a wireless network interface card), a modem, and any other suitable interface. In at least one embodiment, communication interface722may provide a direct connection to a remote server via a direct link to a network, such as the Internet. Communication interface722may also indirectly provide such a connection through, for example, a local area network (such as an Ethernet network), a personal area network, a telephone or cable network, a cellular telephone connection, a satellite data connection, or any other suitable connection.

In certain embodiments, communication interface722may also represent a host adapter configured to facilitate communication between computing system710and one or more additional network or storage devices via an external bus or communications channel. Examples of host adapters include, without limitation, Small Computer System Interface (SCSI) host adapters, Universal Serial Bus (USB) host adapters, Institute of Electrical and Electronics Engineers (IEEE) 1394 host adapters, Advanced Technology Attachment (ATA), Parallel ATA (PATA), Serial ATA (SATA), and External SATA (eSATA) host adapters, Fibre Channel interface adapters, Ethernet adapters, or the like. Communication interface722may also allow computing system710to engage in distributed or remote computing. For example, communication interface722may receive instructions from a remote device or send instructions to a remote device for execution.

As illustrated inFIG. 7, computing system710may also include at least one display device724coupled to communication infrastructure712via a display adapter726. Display device724generally represents any type or form of device capable of visually displaying information forwarded by display adapter726. Similarly, display adapter726generally represents any type or form of device configured to forward graphics, text, and other data from communication infrastructure712(or from a frame buffer, as known in the art) for display on display device724.

As illustrated inFIG. 7, exemplary computing system710may also include at least one input device728coupled to communication infrastructure712via an input interface730. Input device728generally represents any type or form of input device capable of providing input, either computer or human generated, to exemplary computing system710. Examples of input device728include, without limitation, a keyboard, a pointing device, a speech recognition device, or any other input device.

As illustrated inFIG. 7, exemplary computing system710may also include a primary storage device732and a backup storage device733coupled to communication infrastructure712via a storage interface734. Storage devices732and733generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions. For example, storage devices732and733may be a magnetic disk drive (e.g., a so-called hard drive), a solid state drive, a floppy disk drive, a magnetic tape drive, an optical disk drive, a flash drive, or the like. Storage interface734generally represents any type or form of interface or device for transferring data between storage devices732and733and other components of computing system710. In one example, database120fromFIG. 1may be stored in primary storage device732.

In certain embodiments, storage devices732and733may be configured to read from and/or write to a removable storage unit configured to store computer software, data, or other computer-readable information. Examples of suitable removable storage units include, without limitation, a floppy disk, a magnetic tape, an optical disk, a flash memory device, or the like. Storage devices732and733may also include other similar structures or devices for allowing computer software, data, or other computer-readable instructions to be loaded into computing system710. For example, storage devices732and733may be configured to read and write software, data, or other computer-readable information. Storage devices732and733may also be a part of computing system710or may be a separate device accessed through other interface systems.

The computer-readable medium containing the computer program may be loaded into computing system710. All or a portion of the computer program stored on the computer-readable medium may then be stored in system memory716and/or various portions of storage devices732and733. When executed by processor714, a computer program loaded into computing system710may cause processor714to perform and/or be a means for performing the functions of one or more of the exemplary embodiments described and/or illustrated herein. Additionally or alternatively, one or more of the exemplary embodiments described and/or illustrated herein may be implemented in firmware and/or hardware. For example, computing system710may be configured as an Application Specific Integrated Circuit (ASIC) adapted to implement one or more of the exemplary embodiments disclosed herein.

FIG. 8is a block diagram of an exemplary network architecture800in which client systems810,820, and830and servers840and845may be coupled to a network850. As detailed above, all or a portion of network architecture800may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the steps disclosed herein (such as one or more of the steps illustrated inFIG. 3). All or a portion of network architecture800may also be used to perform and/or be a means for performing other steps and features set forth in the instant disclosure.

Client systems810,820, and830generally represent any type or form of computing device or system, such as exemplary computing system710inFIG. 7. Similarly, servers840and845generally represent computing devices or systems, such as application servers or database servers, configured to provide various database services and/or run certain software applications. Network850generally represents any telecommunication or computer network including, for example, an intranet, a WAN, a LAN, a PAN, or the Internet. In one example, client systems810,820, and/or830and/or servers840and/or845may include all or a portion of system100fromFIG. 1.

As illustrated inFIG. 8, one or more storage devices860(1)-(N) may be directly attached to server840. Similarly, one or more storage devices870(1)-(N) may be directly attached to server845. Storage devices860(1)-(N) and storage devices870(1)-(N) generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions. In certain embodiments, storage devices860(1)-(N) and storage devices870(1)-(N) may represent Network-Attached Storage (NAS) devices configured to communicate with servers840and845using various protocols, such as Network File System (NFS), Server Message Block (SMB), or Common Internet File System (CIFS).

Servers840and845may also be connected to a Storage Area Network (SAN) fabric880. SAN fabric880generally represents any type or form of computer network or architecture capable of facilitating communication between a plurality of storage devices. SAN fabric880may facilitate communication between servers840and845and a plurality of storage devices890(1)-(N) and/or an intelligent storage array895. SAN fabric880may also facilitate, via network850and servers840and845, communication between client systems810,820, and830and storage devices890(1)-(N) and/or intelligent storage array895in such a manner that devices890(1)-(N) and array895appear as locally attached devices to client systems810,820, and830. As with storage devices860(1)-(N) and storage devices870(1)-(N), storage devices890(1)-(N) and intelligent storage array895generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions.

In certain embodiments, and with reference to exemplary computing system710ofFIG. 7, a communication interface, such as communication interface722inFIG. 7, may be used to provide connectivity between each client system810,820, and830and network850. Client systems810,820, and830may be able to access information on server840or845using, for example, a web browser or other client software. Such software may allow client systems810,820, and830to access data hosted by server840, server845, storage devices860(1)-(N), storage devices870(1)-(N), storage devices890(1)-(N), or intelligent storage array895. AlthoughFIG. 8depicts the use of a network (such as the Internet) for exchanging data, the embodiments described and/or illustrated herein are not limited to the Internet or any particular network-based environment.

In at least one embodiment, all or a portion of one or more of the exemplary embodiments disclosed herein may be encoded as a computer program and loaded onto and executed by server840, server845, storage devices860(1)-(N), storage devices870(1)-(N), storage devices890(1)-(N), intelligent storage array895, or any combination thereof. All or a portion of one or more of the exemplary embodiments disclosed herein may also be encoded as a computer program, stored in server840, run by server845, and distributed to client systems810,820, and830over network850.

As detailed above, computing system710and/or one or more components of network architecture800may perform and/or be a means for performing, either alone or in combination with other elements, one or more steps of an exemplary method for email journaling.

In addition, one or more of the modules described herein may transform data, physical devices, and/or representations of physical devices from one form to another. For example, one or more of the modules recited herein may receive emails, email journal reports, and/or associated configuration information to be transformed, transform one or more of these items of data, output a result of the transformation to a display or output device, use the result of the transformation to improve the efficiency of email journaling services, and store the result of the transformation to a disk or other memory. Additionally or alternatively, one or more of the modules recited herein may transform a processor, volatile memory, non-volatile memory, and/or any other portion of a physical computing device from one form to another by executing on the computing device, storing data on the computing device, and/or otherwise interacting with the computing device.