<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://help.mailstore.com/en/server/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chansen</id>
	<title>MailStore Server Help - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://help.mailstore.com/en/server/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chansen"/>
	<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/Special:Contributions/Chansen"/>
	<updated>2026-04-09T12:40:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Python_API_Wrapper_Tutorial&amp;diff=7579</id>
		<title>Python API Wrapper Tutorial</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Python_API_Wrapper_Tutorial&amp;diff=7579"/>
		<updated>2024-02-22T09:31:36Z</updated>

		<summary type="html">&lt;p&gt;Chansen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Important notice:''' The Python API wrapper for the MailStore Server Administration API provided on this website, represents an example implementation of an API client. This wrapper should help system administrators and developers to quickly understand how the Administration API of MailStore Server works and how to use it in own scripts. Please understand that beyond this documentation no further support for the Python API wrapper is provided. Unless stated otherwise, the Python API wrapper as well as all related example scripts are released under the terms an conditions of the [[wikipedia:MIT_License|MIT License]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This document explains the installation and usage of the Python API wrapper for the MailStore Server Administration API. In order to prevent loss of data, service interruption or other problems, it is highly recommended to use a non-productive test environment for this tutorial as well as for script development in general. The 30-day-trial version of MailStore Server is perfectly suited for this.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The API wrapper library is tested against Python 3.2 and newer and is compatible with 32bit and 64bit versions of Python. &lt;br /&gt;
&lt;br /&gt;
Python binaries for various operating systems can be downloaded from the [http://www.python.org/download/ Python download page] or installed using the package manager of most Linux distributions.&lt;br /&gt;
&lt;br /&gt;
Additionally create a folder &amp;quot;mailstore&amp;quot; in the Python's site-packages directory and extract the files from the [[Media:Python-api-wrapper.zip|Python API Wrapper]] into this folder.&lt;br /&gt;
&lt;br /&gt;
In a UNIX like operating system the location of the site-packages directory can be found by executing the following command in a shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;from distutils.sysconfig import get_python_lib; print(get_python_lib())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Windows the location of the site-packages directory can be found by opening a ''cmd'', navigating in the Python3 installation directory and executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
python -c &amp;quot;from distutils.sysconfig import get_python_lib; print(get_python_lib())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instantiating the API Client ==&lt;br /&gt;
Before the API wrapper library can be used, it must first be imported with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
 import mailstore&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the ''mailstore.mgmt.ServerClient'' class can be instantiated as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(username=&amp;quot;admin&amp;quot;, password=&amp;quot;admin&amp;quot;, host=&amp;quot;127.0.0.1&amp;quot;, port=8463)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Default values can be omitted. The default admin credentials (username and password set to ''admin'') are only usable when connecting from the MailStore Server computer itself to ''localhost''. Find a listing of all default values in the following table:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;150px&amp;quot; | Parameter&lt;br /&gt;
! width=&amp;quot;100px&amp;quot; | Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;username&amp;lt;/tt&amp;gt;&lt;br /&gt;
| admin&lt;br /&gt;
| Username used for connecting to the API.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;password&amp;lt;/tt&amp;gt;&lt;br /&gt;
| admin&lt;br /&gt;
| Password used for connecting to the API.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 127.0.0.1&lt;br /&gt;
| Hostname or IP address of the MailStore Server computer.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 8463&lt;br /&gt;
| TCP port on which MailStore Server is listening for API requests.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;autoHandleToken&amp;lt;/tt&amp;gt;&lt;br /&gt;
| True&lt;br /&gt;
| If set to ''True'', the caller does not need to handle tokens of long running tasks, but instead has to wait for the result. When set to ''False'' and the ''statusCode'' is ''running'', a status token is returned and must be handled appropriately by the caller of the method. Further details about token handling is described the corresponding section [[#Automatic Token Handling|Automatic Token Handling]] of this document.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;waitTime&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 1000&lt;br /&gt;
| Specifies the number of milliseconds the API should wait for a final result. Otherwise the process is treated as ''running'', in which case token handling as defined by the status of ''autoHandleToken'' becomes necessary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;callback&amp;lt;/tt&amp;gt;&lt;br /&gt;
| None&lt;br /&gt;
| A callback function to which interim statuses of long running tasks should be passed. This allows keeping track of the tasks' progress even if  ''autoHandleToken'' is enabled. This can be quite useful in order to notify users about the progress without having to deal with the token logic as a whole.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;logLevel&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2&lt;br /&gt;
| Has to be in the range ''0'' to ''4'', where 0 (''NONE'') has the lowest verbosity and 4 (''DEBUG'') the highest. The loglevels are defined in the following order (low to high verbosity) ''NONE'', ''ERROR'', ''WARNING'', ''INFO'' and ''DEBUG''. Log entries will always be printed to ''stdout''.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;ignoreInvalidSSLCerts&amp;lt;/tt&amp;gt;&lt;br /&gt;
| False&lt;br /&gt;
| Has to be set to ''True'' or ''False''. Has to be enabled if untrusted certificates are used, otherwise an error occurs when using recent Python versions (&amp;gt;= 3.4.3).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Invoking API Method ==&lt;br /&gt;
After the API client has been successfully instantiated, API methods can easily be invoked. When the method call was successful, the ''statusCode'' is ''succeeded'' and the result is stored in the dictionary ''result'' as shown in the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
print(serverClient.GetServerInfo())&lt;br /&gt;
 &lt;br /&gt;
{'logOutput': None, 'statusText': None, 'error': None, 'percentProgress': None, 'token': None, 'result': {'machineName': 'WIN-2012-R2-X64', 'version': '9.0.3.9857'}, 'statusVersion': 2, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ''autoHandleToken'' was set to ''False'' and the ''statusCode'' returns ''running'', manual token handling is required as described in the [[#Auto Handle Token|Automatic Token Handling]] section.&lt;br /&gt;
&lt;br /&gt;
For any other ''statusCode'' value than ''succeeded'' and ''running'' the occurrence of an error has to be assumed, in which further information such as the error message and error details are available in the dictionary ''error'' as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
userInfo = serverClient.GetUserInfo(&amp;quot;john.doe&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if userInfo[&amp;quot;statusCode&amp;quot;] == 'succeeded':&lt;br /&gt;
    print(userInfo[&amp;quot;result&amp;quot;][&amp;quot;emailAddresses&amp;quot;])&lt;br /&gt;
else:&lt;br /&gt;
    print(userInfo[&amp;quot;error&amp;quot;][&amp;quot;message&amp;quot;])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
Create and print a list of all email addresses assigned to MailStore users. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
addresses = list()&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
	addresses += serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;][&amp;quot;emailAddresses&amp;quot;]&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(sorted(set(addresses))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create and print a list of all regular users archive privileges&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
&lt;br /&gt;
privileges_map = dict()&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
    user_info = serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;]&lt;br /&gt;
    if &amp;quot;privilegesOnFolders&amp;quot; in user_info:&lt;br /&gt;
        for privilege in user_info[&amp;quot;privilegesOnFolders&amp;quot;]:&lt;br /&gt;
            if privilege[&amp;quot;folder&amp;quot;] not in privileges_map:&lt;br /&gt;
                privileges_map[privilege[&amp;quot;folder&amp;quot;]] = {user[&amp;quot;userName&amp;quot;]: privilege[&amp;quot;privileges&amp;quot;]}&lt;br /&gt;
            else:&lt;br /&gt;
                privileges_map[privilege[&amp;quot;folder&amp;quot;]].update({user[&amp;quot;userName&amp;quot;]: privilege[&amp;quot;privileges&amp;quot;]})&lt;br /&gt;
&lt;br /&gt;
for archive, user_dict in privileges_map.items():&lt;br /&gt;
    print(&amp;quot;Archive: {}&amp;quot;.format(archive))&lt;br /&gt;
    for username, priv in user_dict.items():&lt;br /&gt;
        print(&amp;quot;\tUser: {}: {}&amp;quot;.format(username, &amp;quot;, &amp;quot;.join(priv)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create and print a list of all admin users. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
admins = list()&lt;br /&gt;
&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
    if &amp;quot;admin&amp;quot; in serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;][&amp;quot;privileges&amp;quot;]:&lt;br /&gt;
        admins.append(user[&amp;quot;userName&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(admins))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long Running Tasks ==&lt;br /&gt;
The execution of certain API methods like ''VerifyStore'' may take several minutes or even hours until it finishes. There are different options available to deal with these long running tasks:&lt;br /&gt;
&lt;br /&gt;
# [[#Automatic Token Handling|Automatic Token Handling]]&lt;br /&gt;
# [[#Automatic Token Handling with Callback Function|Automatic Token Handling with Callback Function]]&lt;br /&gt;
# [[#Manual Token Handling|Manual Token Handling]]&lt;br /&gt;
&lt;br /&gt;
Generally it is recommended to expect that every method call can become a long running task, as this depends on the ''waitTime'' value, the called method but also the overall load on the server. Thus it is not advisable to globally turn off automatic token handling when instantiating the API client.&lt;br /&gt;
&lt;br /&gt;
If desired, automatic token handling can be enabled or disabled for each invoked method by adding ''autoHandleToken=True/False'' to the method's argument list.&lt;br /&gt;
&lt;br /&gt;
Once a method has been invoked with manual token handling or a callback function, it can be cancelled by using the ''CancelAsync'' method as described in [[#Cancelling Long Running Tasks|Cancelling Long Running Tasks]].&lt;br /&gt;
&lt;br /&gt;
=== Automatic Token Handling ===&lt;br /&gt;
When ''autoHandleToken'' is set to ''True'' (default), the wrapper polls the status of long running tasks automatically in the background and will return the final result when the process has ended.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=True)&lt;br /&gt;
storeID = 1&lt;br /&gt;
print(serverClient.VerifyStore(storeID))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
{'logOutput': None, 'statusText': None, 'error': None, 'percentProgress': 100, 'token': 'd242d822a59bd4db308eef8b85af7d2a', 'result': None, 'statusVersion': 71, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Token Handling with Callback Function ===&lt;br /&gt;
If a caller wants to keep track of the progress of a long running task (i.e. to inform the user about the progress), although automatic token handling was enabled, he could pass a function as ''callback'' argument to the instance of the API client.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
&lt;br /&gt;
def showProgress(progress):&lt;br /&gt;
   print(progress[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;, flush=True)&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=True, callback=showProgress)&lt;br /&gt;
storeID = 3&lt;br /&gt;
print(serverClient.VerifyStore(storeID))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
  1200 messages verified...&lt;br /&gt;
  1249 messages verified.&lt;br /&gt;
Finished. No errors have been found.&lt;br /&gt;
{'error': None, 'result': None, 'logOutput': '  1000 messages verified...\r\n  1100 messages verified...\r\n  1200 messages verified...\r\n  1249 messages verified.\r\nFinished. No errors have been found.\r\n', 'token': 'c56f032d9db263133c1a413f79744b84', 'statusVersion': 71, 'statusText': None, 'percentProgress': 100, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual Token Handling ===&lt;br /&gt;
If ''autoHandleToken'' is set to ''False'' the caller must handle long running tasks and the corresponding tokens all by itself. To poll for status updates, the ''GetStatus'' method must be called periodically passing the last returned result as parameter. ''GetStatus'' will extract the status token itself, poll for the latest update and return the received data to the caller again. The main call has finished when the ''statusCode'' changes to something different than ''running''. Calling ''GetStatus'' without passing a status token will result in an exception.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=False)&lt;br /&gt;
storeID = 3&lt;br /&gt;
status = serverClient.VerifyStore(storeID)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if status[&amp;quot;statusCode&amp;quot;] != &amp;quot;running&amp;quot;:&lt;br /&gt;
        break&lt;br /&gt;
    print(status[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;, flush=True)&lt;br /&gt;
    status = serverClient.GetStatus(status)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
  1200 messages verified...&lt;br /&gt;
  1249 messages verified.&lt;br /&gt;
Finished. No errors have been found.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cancelling Long Running Tasks ===&lt;br /&gt;
Tasks invoked by using the callback method or manual token handling, can be canceled at any time by using the ''CancelAsync'' method. Please notice that the API does not acknowledge the success of the cancellation request. Instead the caller must continue to monitor the ''statusCode'' of the canceled method.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=False)&lt;br /&gt;
storeID = 3&lt;br /&gt;
status = serverClient.VerifyStore(storeID)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if status[&amp;quot;statusCode&amp;quot;] != &amp;quot;running&amp;quot;:&lt;br /&gt;
        break&lt;br /&gt;
    print(status[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;)&lt;br /&gt;
    status = serverClient.GetStatus(status)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    serverClient.CancelAsync(status)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Methods Overview ==&lt;br /&gt;
All methods listed in the [[Administration API - Function Reference|function reference]] are implemented in the Python API library. Use &lt;br /&gt;
&lt;br /&gt;
  pydoc3 mailstore.mgmt.ServerClient&lt;br /&gt;
&lt;br /&gt;
to access the build in documentation, which also includes an overview of all methods and their parameters.&lt;br /&gt;
&lt;br /&gt;
[[de:Python API-Wrapper Tutorial]]&lt;br /&gt;
[[en:Python API Wrapper Tutorial]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Python_API_Wrapper_Tutorial&amp;diff=7578</id>
		<title>Python API Wrapper Tutorial</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Python_API_Wrapper_Tutorial&amp;diff=7578"/>
		<updated>2024-02-22T09:31:24Z</updated>

		<summary type="html">&lt;p&gt;Chansen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Important notice:''' Thee Python API wrapper for the MailStore Server Administration API provided on this website, represents an example implementation of an API client. This wrapper should help system administrators and developers to quickly understand how the Administration API of MailStore Server works and how to use it in own scripts. Please understand that beyond this documentation no further support for the Python API wrapper is provided. Unless stated otherwise, the Python API wrapper as well as all related example scripts are released under the terms an conditions of the [[wikipedia:MIT_License|MIT License]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This document explains the installation and usage of the Python API wrapper for the MailStore Server Administration API. In order to prevent loss of data, service interruption or other problems, it is highly recommended to use a non-productive test environment for this tutorial as well as for script development in general. The 30-day-trial version of MailStore Server is perfectly suited for this.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The API wrapper library is tested against Python 3.2 and newer and is compatible with 32bit and 64bit versions of Python. &lt;br /&gt;
&lt;br /&gt;
Python binaries for various operating systems can be downloaded from the [http://www.python.org/download/ Python download page] or installed using the package manager of most Linux distributions.&lt;br /&gt;
&lt;br /&gt;
Additionally create a folder &amp;quot;mailstore&amp;quot; in the Python's site-packages directory and extract the files from the [[Media:Python-api-wrapper.zip|Python API Wrapper]] into this folder.&lt;br /&gt;
&lt;br /&gt;
In a UNIX like operating system the location of the site-packages directory can be found by executing the following command in a shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;from distutils.sysconfig import get_python_lib; print(get_python_lib())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Windows the location of the site-packages directory can be found by opening a ''cmd'', navigating in the Python3 installation directory and executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
python -c &amp;quot;from distutils.sysconfig import get_python_lib; print(get_python_lib())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instantiating the API Client ==&lt;br /&gt;
Before the API wrapper library can be used, it must first be imported with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
 import mailstore&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the ''mailstore.mgmt.ServerClient'' class can be instantiated as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(username=&amp;quot;admin&amp;quot;, password=&amp;quot;admin&amp;quot;, host=&amp;quot;127.0.0.1&amp;quot;, port=8463)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Default values can be omitted. The default admin credentials (username and password set to ''admin'') are only usable when connecting from the MailStore Server computer itself to ''localhost''. Find a listing of all default values in the following table:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;150px&amp;quot; | Parameter&lt;br /&gt;
! width=&amp;quot;100px&amp;quot; | Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;username&amp;lt;/tt&amp;gt;&lt;br /&gt;
| admin&lt;br /&gt;
| Username used for connecting to the API.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;password&amp;lt;/tt&amp;gt;&lt;br /&gt;
| admin&lt;br /&gt;
| Password used for connecting to the API.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 127.0.0.1&lt;br /&gt;
| Hostname or IP address of the MailStore Server computer.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 8463&lt;br /&gt;
| TCP port on which MailStore Server is listening for API requests.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;autoHandleToken&amp;lt;/tt&amp;gt;&lt;br /&gt;
| True&lt;br /&gt;
| If set to ''True'', the caller does not need to handle tokens of long running tasks, but instead has to wait for the result. When set to ''False'' and the ''statusCode'' is ''running'', a status token is returned and must be handled appropriately by the caller of the method. Further details about token handling is described the corresponding section [[#Automatic Token Handling|Automatic Token Handling]] of this document.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;waitTime&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 1000&lt;br /&gt;
| Specifies the number of milliseconds the API should wait for a final result. Otherwise the process is treated as ''running'', in which case token handling as defined by the status of ''autoHandleToken'' becomes necessary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;callback&amp;lt;/tt&amp;gt;&lt;br /&gt;
| None&lt;br /&gt;
| A callback function to which interim statuses of long running tasks should be passed. This allows keeping track of the tasks' progress even if  ''autoHandleToken'' is enabled. This can be quite useful in order to notify users about the progress without having to deal with the token logic as a whole.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;logLevel&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2&lt;br /&gt;
| Has to be in the range ''0'' to ''4'', where 0 (''NONE'') has the lowest verbosity and 4 (''DEBUG'') the highest. The loglevels are defined in the following order (low to high verbosity) ''NONE'', ''ERROR'', ''WARNING'', ''INFO'' and ''DEBUG''. Log entries will always be printed to ''stdout''.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;ignoreInvalidSSLCerts&amp;lt;/tt&amp;gt;&lt;br /&gt;
| False&lt;br /&gt;
| Has to be set to ''True'' or ''False''. Has to be enabled if untrusted certificates are used, otherwise an error occurs when using recent Python versions (&amp;gt;= 3.4.3).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Invoking API Method ==&lt;br /&gt;
After the API client has been successfully instantiated, API methods can easily be invoked. When the method call was successful, the ''statusCode'' is ''succeeded'' and the result is stored in the dictionary ''result'' as shown in the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
print(serverClient.GetServerInfo())&lt;br /&gt;
 &lt;br /&gt;
{'logOutput': None, 'statusText': None, 'error': None, 'percentProgress': None, 'token': None, 'result': {'machineName': 'WIN-2012-R2-X64', 'version': '9.0.3.9857'}, 'statusVersion': 2, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ''autoHandleToken'' was set to ''False'' and the ''statusCode'' returns ''running'', manual token handling is required as described in the [[#Auto Handle Token|Automatic Token Handling]] section.&lt;br /&gt;
&lt;br /&gt;
For any other ''statusCode'' value than ''succeeded'' and ''running'' the occurrence of an error has to be assumed, in which further information such as the error message and error details are available in the dictionary ''error'' as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
userInfo = serverClient.GetUserInfo(&amp;quot;john.doe&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if userInfo[&amp;quot;statusCode&amp;quot;] == 'succeeded':&lt;br /&gt;
    print(userInfo[&amp;quot;result&amp;quot;][&amp;quot;emailAddresses&amp;quot;])&lt;br /&gt;
else:&lt;br /&gt;
    print(userInfo[&amp;quot;error&amp;quot;][&amp;quot;message&amp;quot;])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
Create and print a list of all email addresses assigned to MailStore users. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
addresses = list()&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
	addresses += serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;][&amp;quot;emailAddresses&amp;quot;]&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(sorted(set(addresses))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create and print a list of all regular users archive privileges&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
&lt;br /&gt;
privileges_map = dict()&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
    user_info = serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;]&lt;br /&gt;
    if &amp;quot;privilegesOnFolders&amp;quot; in user_info:&lt;br /&gt;
        for privilege in user_info[&amp;quot;privilegesOnFolders&amp;quot;]:&lt;br /&gt;
            if privilege[&amp;quot;folder&amp;quot;] not in privileges_map:&lt;br /&gt;
                privileges_map[privilege[&amp;quot;folder&amp;quot;]] = {user[&amp;quot;userName&amp;quot;]: privilege[&amp;quot;privileges&amp;quot;]}&lt;br /&gt;
            else:&lt;br /&gt;
                privileges_map[privilege[&amp;quot;folder&amp;quot;]].update({user[&amp;quot;userName&amp;quot;]: privilege[&amp;quot;privileges&amp;quot;]})&lt;br /&gt;
&lt;br /&gt;
for archive, user_dict in privileges_map.items():&lt;br /&gt;
    print(&amp;quot;Archive: {}&amp;quot;.format(archive))&lt;br /&gt;
    for username, priv in user_dict.items():&lt;br /&gt;
        print(&amp;quot;\tUser: {}: {}&amp;quot;.format(username, &amp;quot;, &amp;quot;.join(priv)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create and print a list of all admin users. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
admins = list()&lt;br /&gt;
&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
    if &amp;quot;admin&amp;quot; in serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;][&amp;quot;privileges&amp;quot;]:&lt;br /&gt;
        admins.append(user[&amp;quot;userName&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(admins))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long Running Tasks ==&lt;br /&gt;
The execution of certain API methods like ''VerifyStore'' may take several minutes or even hours until it finishes. There are different options available to deal with these long running tasks:&lt;br /&gt;
&lt;br /&gt;
# [[#Automatic Token Handling|Automatic Token Handling]]&lt;br /&gt;
# [[#Automatic Token Handling with Callback Function|Automatic Token Handling with Callback Function]]&lt;br /&gt;
# [[#Manual Token Handling|Manual Token Handling]]&lt;br /&gt;
&lt;br /&gt;
Generally it is recommended to expect that every method call can become a long running task, as this depends on the ''waitTime'' value, the called method but also the overall load on the server. Thus it is not advisable to globally turn off automatic token handling when instantiating the API client.&lt;br /&gt;
&lt;br /&gt;
If desired, automatic token handling can be enabled or disabled for each invoked method by adding ''autoHandleToken=True/False'' to the method's argument list.&lt;br /&gt;
&lt;br /&gt;
Once a method has been invoked with manual token handling or a callback function, it can be cancelled by using the ''CancelAsync'' method as described in [[#Cancelling Long Running Tasks|Cancelling Long Running Tasks]].&lt;br /&gt;
&lt;br /&gt;
=== Automatic Token Handling ===&lt;br /&gt;
When ''autoHandleToken'' is set to ''True'' (default), the wrapper polls the status of long running tasks automatically in the background and will return the final result when the process has ended.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=True)&lt;br /&gt;
storeID = 1&lt;br /&gt;
print(serverClient.VerifyStore(storeID))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
{'logOutput': None, 'statusText': None, 'error': None, 'percentProgress': 100, 'token': 'd242d822a59bd4db308eef8b85af7d2a', 'result': None, 'statusVersion': 71, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Token Handling with Callback Function ===&lt;br /&gt;
If a caller wants to keep track of the progress of a long running task (i.e. to inform the user about the progress), although automatic token handling was enabled, he could pass a function as ''callback'' argument to the instance of the API client.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
&lt;br /&gt;
def showProgress(progress):&lt;br /&gt;
   print(progress[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;, flush=True)&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=True, callback=showProgress)&lt;br /&gt;
storeID = 3&lt;br /&gt;
print(serverClient.VerifyStore(storeID))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
  1200 messages verified...&lt;br /&gt;
  1249 messages verified.&lt;br /&gt;
Finished. No errors have been found.&lt;br /&gt;
{'error': None, 'result': None, 'logOutput': '  1000 messages verified...\r\n  1100 messages verified...\r\n  1200 messages verified...\r\n  1249 messages verified.\r\nFinished. No errors have been found.\r\n', 'token': 'c56f032d9db263133c1a413f79744b84', 'statusVersion': 71, 'statusText': None, 'percentProgress': 100, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual Token Handling ===&lt;br /&gt;
If ''autoHandleToken'' is set to ''False'' the caller must handle long running tasks and the corresponding tokens all by itself. To poll for status updates, the ''GetStatus'' method must be called periodically passing the last returned result as parameter. ''GetStatus'' will extract the status token itself, poll for the latest update and return the received data to the caller again. The main call has finished when the ''statusCode'' changes to something different than ''running''. Calling ''GetStatus'' without passing a status token will result in an exception.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=False)&lt;br /&gt;
storeID = 3&lt;br /&gt;
status = serverClient.VerifyStore(storeID)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if status[&amp;quot;statusCode&amp;quot;] != &amp;quot;running&amp;quot;:&lt;br /&gt;
        break&lt;br /&gt;
    print(status[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;, flush=True)&lt;br /&gt;
    status = serverClient.GetStatus(status)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
  1200 messages verified...&lt;br /&gt;
  1249 messages verified.&lt;br /&gt;
Finished. No errors have been found.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cancelling Long Running Tasks ===&lt;br /&gt;
Tasks invoked by using the callback method or manual token handling, can be canceled at any time by using the ''CancelAsync'' method. Please notice that the API does not acknowledge the success of the cancellation request. Instead the caller must continue to monitor the ''statusCode'' of the canceled method.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=False)&lt;br /&gt;
storeID = 3&lt;br /&gt;
status = serverClient.VerifyStore(storeID)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if status[&amp;quot;statusCode&amp;quot;] != &amp;quot;running&amp;quot;:&lt;br /&gt;
        break&lt;br /&gt;
    print(status[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;)&lt;br /&gt;
    status = serverClient.GetStatus(status)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    serverClient.CancelAsync(status)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Methods Overview ==&lt;br /&gt;
All methods listed in the [[Administration API - Function Reference|function reference]] are implemented in the Python API library. Use &lt;br /&gt;
&lt;br /&gt;
  pydoc3 mailstore.mgmt.ServerClient&lt;br /&gt;
&lt;br /&gt;
to access the build in documentation, which also includes an overview of all methods and their parameters.&lt;br /&gt;
&lt;br /&gt;
[[de:Python API-Wrapper Tutorial]]&lt;br /&gt;
[[en:Python API Wrapper Tutorial]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Move_Archiving_Emails_from_Microsoft_365_-_Modern_Authentication&amp;diff=7244</id>
		<title>Move Archiving Emails from Microsoft 365 - Modern Authentication</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Move_Archiving_Emails_from_Microsoft_365_-_Modern_Authentication&amp;diff=7244"/>
		<updated>2022-11-10T17:41:23Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Redirected page to Archiving Emails from Microsoft 365 - Modern Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Archiving Emails from Microsoft 365 - Modern Authentication]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_(Modern_Authentication)&amp;diff=7243</id>
		<title>Archiving Emails from Microsoft 365 (Modern Authentication)</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_(Modern_Authentication)&amp;diff=7243"/>
		<updated>2022-11-10T16:57:05Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Changed redirect target from Move Archiving Emails from Microsoft 365 - Modern Authentication to Archiving Emails from Microsoft 365 - Modern Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Archiving Emails from Microsoft 365 - Modern Authentication]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_-_Modern_Authentication&amp;diff=7242</id>
		<title>Archiving Emails from Microsoft 365 - Modern Authentication</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_-_Modern_Authentication&amp;diff=7242"/>
		<updated>2022-11-10T16:55:07Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Created page with &amp;quot;{{Implementation Guide Preamble|Exchange&amp;amp;nbsp;Online / Microsoft&amp;amp;nbsp;365|{{#ev:youtube|https://youtu.be/X0Um0cDWGg0|350|right|''Tech Tip: Microsoft 365 Archiving Profiles''}}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Implementation Guide Preamble|Exchange&amp;amp;nbsp;Online / Microsoft&amp;amp;nbsp;365|{{#ev:youtube|https://youtu.be/X0Um0cDWGg0|350|right|''Tech Tip: Microsoft 365 Archiving Profiles''}}|&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Our Tech Tip video shows the essential configuration steps in this article.}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
{{Multiline Notices|Heading=Important Notices|MailStore Server supports archiving emails from Microsoft&amp;amp;nbsp;365 (Modern Authentication) only with the global Microsoft Cloud. National clouds such as ''Microsoft Cloud for US Government'', ''Microsoft Cloud Germany'' (operated by T-Systems) and ''Azure and Microsoft 365 operated by 21Vianet in China'' are not supported. For archiving emails from ''Office&amp;amp;nbsp;365 Germany'' and ''Office 365 operated by 21Vianet'', please refer to the [[Synchronizing_User_Accounts_with_Microsoft_365_(Basic_Authentication)|corresponding implementation guide]].|For better readability, the terms ''Microsoft&amp;amp;nbsp;365'' and ''Exchange&amp;amp;nbsp;Online'' are used interchangeably hereinafter instead of ''Exchange&amp;amp;nbsp;Online / Microsoft&amp;amp;nbsp;365''.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== App Registration &amp;amp; User Synchronization ==&lt;br /&gt;
Before archiving Microsoft&amp;amp;nbsp;365 mailboxes, registering MailStore Server in your Microsoft&amp;amp;nbsp;365 tenant is required. It is also highly recommended to synchronize users in MailStore Server directly with that tenant to fetch all information that is relevant for archiving such as email addresses. The registration and synchronization procedures are described in the chapter [[Synchronizing User Accounts with Microsoft 365 (Modern Authentication)]] of the MailStore Server manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Please note:''' MailStore Server runs as a [[MailStore Server Service Configuration|Windows service]] and thus must use ''Application Permissions'' to access user mailboxes in Microsoft&amp;amp;nbsp;365. By design, on the Microsoft identity platform, which is at the heart of Microsoft&amp;amp;nbsp;365 authentication and authorization, this permission scope encloses the full level of privileges implied by a permission. As a consequence, once registered as described above, MailStore Server has access to all mailboxes in your Microsoft&amp;amp;nbsp;365 tenant. Therefore, with regard to security, access to the Microsoft&amp;amp;nbsp;365 archiving profiles in MailStore Server is limited to MailStore Server administrators.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Including Microsoft&amp;amp;nbsp;365 Shared Mailboxes ===&lt;br /&gt;
In Microsoft&amp;amp;nbsp;365, shared mailboxes are special mailboxes that multiple users have access to. Unlike a normal mailbox, a shared mailbox is not associated to a licensed Microsoft&amp;amp;nbsp;365 user. For MailStore Server to create user entries for shared mailboxes, you must therefore deactivate the option ''Synchronize licensed Microsoft Exchange&amp;amp;nbsp;Online users only'' in the section [[Synchronizing User Accounts with Microsoft 365 (Modern Authentication)#User_Database_Synchronization|User Database Synchronization]].&amp;lt;br/&amp;gt;&lt;br /&gt;
After synchronization you can grant MailStore Server users access to the archive of the shared mailbox by [[Users,_Folders_and_Settings#Folder_Access_.28e.g._Access_to_the_Emails_of_Other_Users.29|assigning privileges]]. For archiving shared mailboxes, just proceed as for individual or multiple mailboxes as detailed below.&lt;br /&gt;
&lt;br /&gt;
== Archiving Individual Microsoft&amp;amp;nbsp;365 Mailboxes ==&lt;br /&gt;
{{Archiving Single Mailbox Preamble|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
For each mailbox, please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* Log on to MailStore Client as MailStore Server administrator.&lt;br /&gt;
* Click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Servers'' list in the ''Create Profile'' area of the ''Archive Email'' page, select ''Microsoft&amp;amp;nbsp;365'' to create a new archiving profile.&lt;br /&gt;
* A wizard opens to assist in specifying the archiving settings.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 mailbox 01.png|center|347px]]&lt;br /&gt;
* Select ''Single Mailbox'' and click on ''OK''.&lt;br /&gt;
*; [[File:Microsoft 365 mailbox 02.png|center|347px]]&lt;br /&gt;
* Select the Microsoft&amp;amp;nbsp;365 credentials that you have created during the registration of MailStore Server with Microsoft&amp;amp;nbsp;365 from the ''Credentials'' drop-down list. You can also use the button (…) to access the [[Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)#Creating_Credentials_in_MailStore_Server|Credential Manager]].&lt;br /&gt;
* In the ''Mailbox'' field, enter the primary email address of the user whose mailbox you want to archive.&lt;br /&gt;
* Click on ''Test'' to verify that MailStore Server can access the mailbox.&lt;br /&gt;
* Click on ''Next''.&lt;br /&gt;
* If needed, adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]], the [[Email_Archiving_with_MailStore_Basics#Specifying_Filter_Criteria_for_Archiving|filter]] and the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|Deletion Rules]]. By default, no emails will be deleted from the mailbox. The ''Timeout'' value only has to be adjusted in specific cases (e.g. with very slow network connections). &lt;br /&gt;
*; [[File:Microsoft_365_mailbox_03.png|center|347px]]&lt;br /&gt;
* Click on ''Next'' to continue.&lt;br /&gt;
* Select the archive of the user for whom the selected mailbox is to be archived. If the user does not exist yet, click on ''Create a New User…''.&lt;br /&gt;
*; [[File:Microsoft_365_mailbox_04.png|center|347px]]&lt;br /&gt;
* Click on ''Next''.&lt;br /&gt;
* In the last step, a name for the archiving profile can be specified. After clicking ''Finish'', the archiving profile will be listed under ''Saved Profiles'' and, if desired, can be run immediately or automatically.&lt;br /&gt;
&lt;br /&gt;
More information on how to execute archiving profiles can be found under the topic [[Email Archiving with MailStore Basics]]&lt;br /&gt;
&lt;br /&gt;
== Archiving Multiple Microsoft&amp;amp;nbsp;365 Mailboxes Centrally ==&lt;br /&gt;
{{Archiving Multiple Mailboxes Preamble|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
Please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* Log on to MailStore Client as MailStore Server administrator.&lt;br /&gt;
* Click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Servers'' list in the ''Create Profile'' area of the ''Archive Email'' page, select ''Microsoft&amp;amp;nbsp;365'' to create a new archiving profile.&lt;br /&gt;
* A wizard opens to assist in specifying the archiving settings.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 mailboxes 01.png|center|347px]]&lt;br /&gt;
* Select ''Multiple Mailboxes'' and click ''OK''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; &amp;lt;p class=msnote&amp;gt;{{Archiving_Multiple_or_Multidrop_Note|multiple mailboxes|[[#App_Registration_.26_User_Synchronization|directory synchronization]]}}&amp;lt;/p&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 mailboxes 02.png|center|347px]]&lt;br /&gt;
* Select the Microsoft&amp;amp;nbsp;365 credentials that you have created during the registration of MailStore Server with Microsoft&amp;amp;nbsp;365 from the ''Credentials'' drop-down list. You can also use the button (…) to access the [[Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)#Creating_Credentials_in_MailStore_Server|Credential Manager]].&lt;br /&gt;
* Click on ''Next'' to continue. &lt;br /&gt;
*; [[File:Microsoft 365 mailboxes 03.png|center|347px]]&lt;br /&gt;
* If needed, adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]], the [[Email_Archiving_with_MailStore_Basics#Specifying_Filter_Criteria_for_Archiving|filter]] and the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|Deletion Rules]]. By default, no emails will be deleted from the mailbox. The ''Timeout'' value only has to be adjusted in specific cases (e.g. with very slow network connections). Please keep in mind that these settings apply to all mailboxes to be archived, as specified in the next step.&lt;br /&gt;
*; {{Archiving_Multiple_Mailboxes_Centrally_Options|Microsoft_365_mailboxes_04.png|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
&lt;br /&gt;
== Archiving Incoming and Outgoing Emails Directly ==&lt;br /&gt;
{{Archiving Exchange Journal Mailbox Preamble|Exchange&amp;amp;nbsp;Online}}&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Setup and Configure MailStore Gateway ===&lt;br /&gt;
Please refer to the [https://help.mailstore.com/en/gateway/ MailStore Gateway Manual] for detailed instructions about:&lt;br /&gt;
 &lt;br /&gt;
* Installation and Setup of MailStore Gateway&lt;br /&gt;
* Logging on to MailStore Gateway's Management Console&lt;br /&gt;
* Creating MailStore Gateway mailboxes&lt;br /&gt;
&lt;br /&gt;
After these steps, a mailbox with an individual email address (e.g. mbx-dead1234beef5678@gateway.example.com) should exist.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Configure MailStore Server ===&lt;br /&gt;
{{Archiving MailStore Gateway Mailbox|''In- and Outbound E-Mail Automatically''|Microsoft 365 journal 01.png|Arch_MailStore_Gateway_Office365_02.png|''Microsoft&amp;amp;nbsp;365''|TargetFolderHint=DontShow|POP3Hint=DontShow|DSLink=[[#App_Registration_.26_User_Synchronization|directory synchronization]]}}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Creating a Journal Rule ===&lt;br /&gt;
The following steps describe how to set up journaling for your Microsoft&amp;amp;nbsp;365 account.&lt;br /&gt;
&lt;br /&gt;
Since you are planning to use an external mailbox (MailStore Gateway) as the recipient for Journal reports, we highly recommend to first create an external contact with this mail address in your Exchange mailbox administration to prevent any later errors or warnings about an unknown recipient in the process.&lt;br /&gt;
&lt;br /&gt;
* Sign in to the [https://admin.microsoft.com/ Microsoft&amp;amp;nbsp;365 admin center] as an Exchange or Global Administrator for your Microsoft&amp;amp;nbsp;365 tenant.&lt;br /&gt;
* Expand the left navigation menu by clicking ''Show all''.&lt;br /&gt;
* In the ''Admin centers'' section, either use this [https://compliance.microsoft.com/exchangeinformationgovernance?viewid=exoJournalRule direct link] or follow these steps:&lt;br /&gt;
** In the left navigation menu, click ''Compliance''. The Microsoft Purview compliance portal is opened.&lt;br /&gt;
** In the left navigation menu, select ''Data Lifecycle Management'', then select  ''Exchange&amp;amp;nbsp;(legacy)''.&lt;br /&gt;
* Open the ''Settings'' on the top right.&lt;br /&gt;
* Enter a mailbox in the ''Send undeliverable journal reports to'' section. This mailbox should be a dedicated mailbox for this purpose. This mailbox receives None Delivery Reports (NDRs) for undeliverable journal reports in case the primary journal mailbox is unreachable.&lt;br /&gt;
* Return to the ''Exchange (legacy)'' settings.&lt;br /&gt;
* Open the page ''Journal rules''.&lt;br /&gt;
* Create a new journaling rule by clicking on ''+ (New rule)''.&lt;br /&gt;
*:[[File:Arch_office365_journal_01.png|center|550px]]&lt;br /&gt;
* Enter the email address of the previously created MailStore Gateway mailbox in the ''Send journal reports to:'' box.&lt;br /&gt;
* Enter a name for the journal rule, e.g. ''Journaling''.&lt;br /&gt;
* In the ''Journal messages sent or received from'' section, select whether the rule should apply to everyone or to specific users or groups.&lt;br /&gt;
* Under ''Type of message to journal'', choose whether to capture all messages, internal messages only, or external messages only.&lt;br /&gt;
* Click on ''Next'', then validate your settings, click ''Submit'' to activate the rule.&lt;br /&gt;
&lt;br /&gt;
== Public Folders ==&lt;br /&gt;
{{Archiving Exchange Public Folders Preamble|Exchange&amp;amp;nbsp;Online|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
* Sign in to the [https://admin.microsoft.com/ Microsoft&amp;amp;nbsp;365 admin center] as an Exchange or Global Administrator for your Microsoft&amp;amp;nbsp;365 tenant.&lt;br /&gt;
* Expand the left navigation menu by clicking ''Show all''.&lt;br /&gt;
* In the ''Admin centers'' section, choose ''Exchange''.&lt;br /&gt;
* In the ''Exchange admin center'', navigate to ''public folders''.&lt;br /&gt;
* Click on the ''Ellipsis (…)'' and select ''Root permissions''.&lt;br /&gt;
*: [[File:Microsoft_365_pf_01.png|center|480px]]&lt;br /&gt;
* A new browser window opens. Click on ''+ (Add)''.&lt;br /&gt;
* Use ''Browse'' to choose the Microsoft&amp;amp;nbsp;365 user you want to grant permissions.&lt;br /&gt;
* Choose ''Custom'' as ''Permission level'' and grant ''Read items'' and ''Delete all'' permissions.&lt;br /&gt;
*: [[File:Arch_office365_pf_02.png|center|347px]]&lt;br /&gt;
* Click on ''Save''.&lt;br /&gt;
* Enable the option ''Apply changes to this public folder and all its subfolders.''&lt;br /&gt;
* Click on ''Save''.&lt;br /&gt;
* Click on ''Close'' after saving has been completed successfully.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Setting up the Archiving Process ===&lt;br /&gt;
* Log on to MailStore Client as MailStore Server administrator.&lt;br /&gt;
* Click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Servers'' list in the ''Create Profile'' area of the ''Archive Email'' page, select ''Microsoft&amp;amp;nbsp;365'' to create a new archiving profile.&lt;br /&gt;
* A wizard opens to assist in specifying the archiving settings.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 pf 03.png|center|347px]]&lt;br /&gt;
* Select ''Public Folders'' and click on ''OK''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 pf 04.png|center|347px]]&lt;br /&gt;
* Select the Microsoft&amp;amp;nbsp;365 credentials that you have created during the registration of MailStore Server with Microsoft&amp;amp;nbsp;365 from the ''Credentials'' drop-down list. You can also use the button (…) to access the [[Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)#Creating_Credentials_in_MailStore_Server|Credential Manager]].&lt;br /&gt;
* In the ''Mailbox'' field, enter the primary email address of the user that has access to the public folders as described above.&lt;br /&gt;
* The value of the ''Target Folder'' box defines the top level folder below which the public folder hierarchy will be created in the target archive. Usually, you can leave this value to its default.&lt;br /&gt;
* Click on ''Test'' to verify that MailStore can access the public folders.&lt;br /&gt;
* Click on ''Next'' to continue.&lt;br /&gt;
*; [[File:Microsoft 365 pf 05.png|center|347px]]&lt;br /&gt;
* Adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]]. By default, all public folders that contain emails will be archived.&lt;br /&gt;
* If needed, adjust [[Email_Archiving_with_MailStore_Basics#Specifying_Filter_Criteria_for_Archiving|the filter]] and the [[Email_Archiving_with_MailStore_Basics#Deleting_Emails_after_Archiving|Deletion Rules]]. By default, no emails will be deleted from the public folders. The ''Timeout'' value only has to be adjusted in specific cases (e.g. with very slow network connections).&lt;br /&gt;
* Click on ''Next'' to continue.&lt;br /&gt;
*; [[File:Microsoft 365 pf 06.png|center|347px]]&lt;br /&gt;
* In the next step, select the archive of the user you have prepared in step 1.&lt;br /&gt;
* In the last step, specify a name for the archiving profile. After clicking ''Finish'' the archiving profile will be listed under ''Saved Profiles'' and can be run immediately or automatically if desired.&lt;br /&gt;
&lt;br /&gt;
[[de:E-Mail-Archivierung_von_Microsoft_365_(Modern_Authentication)]]&lt;br /&gt;
[[en:Archiving_Emails_from_Microsoft_365_(Modern_Authentication)]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Python_API_Wrapper_Tutorial&amp;diff=7240</id>
		<title>Python API Wrapper Tutorial</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Python_API_Wrapper_Tutorial&amp;diff=7240"/>
		<updated>2022-11-08T16:21:38Z</updated>

		<summary type="html">&lt;p&gt;Chansen: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Important notice:''' The Python API wrapper for the MailStore Server Administration API provided on this website, represents an example implementation of an API client. This wrapper should help system administrators and developers to quickly understand how the Administration API of MailStore Server works and how to use it in own scripts. Please understand that beyond this documentation no further support for the Python API wrapper is provided. Unless stated otherwise, the Python API wrapper as well as all related example scripts are released under the terms an conditions of the [[wikipedia:MIT_License|MIT License]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This document explains the installation and usage of the Python API wrapper for the MailStore Server Administration API. In order to prevent loss of data, service interruption or other problems, it is highly recommended to use a non-productive test environment for this tutorial as well as for script development in general. The 30-day-trial version of MailStore Server is perfectly suited for this.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The API wrapper library is tested against Python 3.2 and newer and is compatible with 32bit and 64bit versions of Python. &lt;br /&gt;
&lt;br /&gt;
Python binaries for various operating systems can be downloaded from the [http://www.python.org/download/ Python download page] or installed using the package manager of most Linux distributions.&lt;br /&gt;
&lt;br /&gt;
Additionally create a folder &amp;quot;mailstore&amp;quot; in the Python's site-packages directory and extract the files from the [[https://help.mailstore.com/en/server/images/c/cc/Python-api-wrapper.zip|Python API wrapper library]] into this folder.&lt;br /&gt;
&lt;br /&gt;
In a UNIX like operating system the location of the site-packages directory can be found by executing the following command in a shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;from distutils.sysconfig import get_python_lib; print(get_python_lib())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Windows the location of the site-packages directory can be found by opening a ''cmd'', navigating in the Python3 installation directory and executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
python -c &amp;quot;from distutils.sysconfig import get_python_lib; print(get_python_lib())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instantiating the API Client ==&lt;br /&gt;
Before the API wrapper library can be used, it must first be imported with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
 import mailstore&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the ''mailstore.mgmt.ServerClient'' class can be instantiated as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(username=&amp;quot;admin&amp;quot;, password=&amp;quot;admin&amp;quot;, host=&amp;quot;127.0.0.1&amp;quot;, port=8463)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Default values can be omitted. The default admin credentials (username and password set to ''admin'') are only usable when connecting from the MailStore Server computer itself to ''localhost''. Find a listing of all default values in the following table:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;150px&amp;quot; | Parameter&lt;br /&gt;
! width=&amp;quot;100px&amp;quot; | Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;username&amp;lt;/tt&amp;gt;&lt;br /&gt;
| admin&lt;br /&gt;
| Username used for connecting to the API.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;password&amp;lt;/tt&amp;gt;&lt;br /&gt;
| admin&lt;br /&gt;
| Password used for connecting to the API.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 127.0.0.1&lt;br /&gt;
| Hostname or IP address of the MailStore Server computer.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 8463&lt;br /&gt;
| TCP port on which MailStore Server is listening for API requests.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;autoHandleToken&amp;lt;/tt&amp;gt;&lt;br /&gt;
| True&lt;br /&gt;
| If set to ''True'', the caller does not need to handle tokens of long running tasks, but instead has to wait for the result. When set to ''False'' and the ''statusCode'' is ''running'', a status token is returned and must be handled appropriately by the caller of the method. Further details about token handling is described the corresponding section [[#Automatic Token Handling|Automatic Token Handling]] of this document.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;waitTime&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 1000&lt;br /&gt;
| Specifies the number of milliseconds the API should wait for a final result. Otherwise the process is treated as ''running'', in which case token handling as defined by the status of ''autoHandleToken'' becomes necessary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;callback&amp;lt;/tt&amp;gt;&lt;br /&gt;
| None&lt;br /&gt;
| A callback function to which interim statuses of long running tasks should be passed. This allows keeping track of the tasks' progress even if  ''autoHandleToken'' is enabled. This can be quite useful in order to notify users about the progress without having to deal with the token logic as a whole.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;logLevel&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2&lt;br /&gt;
| Has to be in the range ''0'' to ''4'', where 0 (''NONE'') has the lowest verbosity and 4 (''DEBUG'') the highest. The loglevels are defined in the following order (low to high verbosity) ''NONE'', ''ERROR'', ''WARNING'', ''INFO'' and ''DEBUG''. Log entries will always be printed to ''stdout''.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;ignoreInvalidSSLCerts&amp;lt;/tt&amp;gt;&lt;br /&gt;
| False&lt;br /&gt;
| Has to be set to ''True'' or ''False''. Has to be enabled if untrusted certificates are used, otherwise an error occurs when using recent Python versions (&amp;gt;= 3.4.3).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Invoking API Method ==&lt;br /&gt;
After the API client has been successfully instantiated, API methods can easily be invoked. When the method call was successful, the ''statusCode'' is ''succeeded'' and the result is stored in the dictionary ''result'' as shown in the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
print(serverClient.GetServerInfo())&lt;br /&gt;
 &lt;br /&gt;
{'logOutput': None, 'statusText': None, 'error': None, 'percentProgress': None, 'token': None, 'result': {'machineName': 'WIN-2012-R2-X64', 'version': '9.0.3.9857'}, 'statusVersion': 2, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ''autoHandleToken'' was set to ''False'' and the ''statusCode'' returns ''running'', manual token handling is required as described in the [[#Auto Handle Token|Automatic Token Handling]] section.&lt;br /&gt;
&lt;br /&gt;
For any other ''statusCode'' value than ''succeeded'' and ''running'' the occurrence of an error has to be assumed, in which further information such as the error message and error details are available in the dictionary ''error'' as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
userInfo = serverClient.GetUserInfo(&amp;quot;john.doe&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if userInfo[&amp;quot;statusCode&amp;quot;] == 'succeeded':&lt;br /&gt;
    print(userInfo[&amp;quot;result&amp;quot;][&amp;quot;emailAddresses&amp;quot;])&lt;br /&gt;
else:&lt;br /&gt;
    print(userInfo[&amp;quot;error&amp;quot;][&amp;quot;message&amp;quot;])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
Create and print a list of all email addresses assigned to MailStore users. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
addresses = list()&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
	addresses += serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;][&amp;quot;emailAddresses&amp;quot;]&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(sorted(set(addresses))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create and print a list of all regular users archive privileges&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
&lt;br /&gt;
privileges_map = dict()&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
    user_info = serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;]&lt;br /&gt;
    if &amp;quot;privilegesOnFolders&amp;quot; in user_info:&lt;br /&gt;
        for privilege in user_info[&amp;quot;privilegesOnFolders&amp;quot;]:&lt;br /&gt;
            if privilege[&amp;quot;folder&amp;quot;] not in privileges_map:&lt;br /&gt;
                privileges_map[privilege[&amp;quot;folder&amp;quot;]] = {user[&amp;quot;userName&amp;quot;]: privilege[&amp;quot;privileges&amp;quot;]}&lt;br /&gt;
            else:&lt;br /&gt;
                privileges_map[privilege[&amp;quot;folder&amp;quot;]].update({user[&amp;quot;userName&amp;quot;]: privilege[&amp;quot;privileges&amp;quot;]})&lt;br /&gt;
&lt;br /&gt;
for archive, user_dict in privileges_map.items():&lt;br /&gt;
    print(&amp;quot;Archive: {}&amp;quot;.format(archive))&lt;br /&gt;
    for username, priv in user_dict.items():&lt;br /&gt;
        print(&amp;quot;\tUser: {}: {}&amp;quot;.format(username, &amp;quot;, &amp;quot;.join(priv)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create and print a list of all admin users. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient()&lt;br /&gt;
admins = list()&lt;br /&gt;
&lt;br /&gt;
for user in serverClient.GetUsers()[&amp;quot;result&amp;quot;]:&lt;br /&gt;
    if &amp;quot;admin&amp;quot; in serverClient.GetUserInfo(user[&amp;quot;userName&amp;quot;])[&amp;quot;result&amp;quot;][&amp;quot;privileges&amp;quot;]:&lt;br /&gt;
        admins.append(user[&amp;quot;userName&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(admins))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long Running Tasks ==&lt;br /&gt;
The execution of certain API methods like ''VerifyStore'' may take several minutes or even hours until it finishes. There are different options available to deal with these long running tasks:&lt;br /&gt;
&lt;br /&gt;
# [[#Automatic Token Handling|Automatic Token Handling]]&lt;br /&gt;
# [[#Automatic Token Handling with Callback Function|Automatic Token Handling with Callback Function]]&lt;br /&gt;
# [[#Manual Token Handling|Manual Token Handling]]&lt;br /&gt;
&lt;br /&gt;
Generally it is recommended to expect that every method call can become a long running task, as this depends on the ''waitTime'' value, the called method but also the overall load on the server. Thus it is not advisable to globally turn off automatic token handling when instantiating the API client.&lt;br /&gt;
&lt;br /&gt;
If desired, automatic token handling can be enabled or disabled for each invoked method by adding ''autoHandleToken=True/False'' to the method's argument list.&lt;br /&gt;
&lt;br /&gt;
Once a method has been invoked with manual token handling or a callback function, it can be cancelled by using the ''CancelAsync'' method as described in [[#Cancelling Long Running Tasks|Cancelling Long Running Tasks]].&lt;br /&gt;
&lt;br /&gt;
=== Automatic Token Handling ===&lt;br /&gt;
When ''autoHandleToken'' is set to ''True'' (default), the wrapper polls the status of long running tasks automatically in the background and will return the final result when the process has ended.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=True)&lt;br /&gt;
storeID = 1&lt;br /&gt;
print(serverClient.VerifyStore(storeID))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
{'logOutput': None, 'statusText': None, 'error': None, 'percentProgress': 100, 'token': 'd242d822a59bd4db308eef8b85af7d2a', 'result': None, 'statusVersion': 71, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Token Handling with Callback Function ===&lt;br /&gt;
If a caller wants to keep track of the progress of a long running task (i.e. to inform the user about the progress), although automatic token handling was enabled, he could pass a function as ''callback'' argument to the instance of the API client.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
&lt;br /&gt;
def showProgress(progress):&lt;br /&gt;
   print(progress[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;, flush=True)&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=True, callback=showProgress)&lt;br /&gt;
storeID = 3&lt;br /&gt;
print(serverClient.VerifyStore(storeID))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
  1200 messages verified...&lt;br /&gt;
  1249 messages verified.&lt;br /&gt;
Finished. No errors have been found.&lt;br /&gt;
{'error': None, 'result': None, 'logOutput': '  1000 messages verified...\r\n  1100 messages verified...\r\n  1200 messages verified...\r\n  1249 messages verified.\r\nFinished. No errors have been found.\r\n', 'token': 'c56f032d9db263133c1a413f79744b84', 'statusVersion': 71, 'statusText': None, 'percentProgress': 100, 'statusCode': 'succeeded'}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual Token Handling ===&lt;br /&gt;
If ''autoHandleToken'' is set to ''False'' the caller must handle long running tasks and the corresponding tokens all by itself. To poll for status updates, the ''GetStatus'' method must be called periodically passing the last returned result as parameter. ''GetStatus'' will extract the status token itself, poll for the latest update and return the received data to the caller again. The main call has finished when the ''statusCode'' changes to something different than ''running''. Calling ''GetStatus'' without passing a status token will result in an exception.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=False)&lt;br /&gt;
storeID = 3&lt;br /&gt;
status = serverClient.VerifyStore(storeID)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if status[&amp;quot;statusCode&amp;quot;] != &amp;quot;running&amp;quot;:&lt;br /&gt;
        break&lt;br /&gt;
    print(status[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;, flush=True)&lt;br /&gt;
    status = serverClient.GetStatus(status)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
  1200 messages verified...&lt;br /&gt;
  1249 messages verified.&lt;br /&gt;
Finished. No errors have been found.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cancelling Long Running Tasks ===&lt;br /&gt;
Tasks invoked by using the callback method or manual token handling, can be canceled at any time by using the ''CancelAsync'' method. Please notice that the API does not acknowledge the success of the cancellation request. Instead the caller must continue to monitor the ''statusCode'' of the canceled method.&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
import mailstore&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
serverClient = mailstore.mgmt.ServerClient(autoHandleToken=False)&lt;br /&gt;
storeID = 3&lt;br /&gt;
status = serverClient.VerifyStore(storeID)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if status[&amp;quot;statusCode&amp;quot;] != &amp;quot;running&amp;quot;:&lt;br /&gt;
        break&lt;br /&gt;
    print(status[&amp;quot;logOutput&amp;quot;], end=&amp;quot;&amp;quot;)&lt;br /&gt;
    status = serverClient.GetStatus(status)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    serverClient.CancelAsync(status)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Output ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot; smart-tabs=&amp;quot;true&amp;quot; toolbar=&amp;quot;false&amp;quot; gutter=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Verifying file group #3...&lt;br /&gt;
Creating a list of messages to be verified...&lt;br /&gt;
1249 messages are about to be verified.&lt;br /&gt;
Verifying...&lt;br /&gt;
  100 messages verified...&lt;br /&gt;
  200 messages verified...&lt;br /&gt;
  300 messages verified...&lt;br /&gt;
  400 messages verified...&lt;br /&gt;
  500 messages verified...&lt;br /&gt;
  600 messages verified...&lt;br /&gt;
  700 messages verified...&lt;br /&gt;
  800 messages verified...&lt;br /&gt;
  900 messages verified...&lt;br /&gt;
  1000 messages verified...&lt;br /&gt;
  1100 messages verified...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Methods Overview ==&lt;br /&gt;
All methods listed in the [[Administration API - Function Reference|function reference]] are implemented in the Python API library. Use &lt;br /&gt;
&lt;br /&gt;
  pydoc3 mailstore.mgmt.ServerClient&lt;br /&gt;
&lt;br /&gt;
to access the build in documentation, which also includes an overview of all methods and their parameters.&lt;br /&gt;
&lt;br /&gt;
[[de:Python API-Wrapper Tutorial]]&lt;br /&gt;
[[en:Python API Wrapper Tutorial]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7239</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7239"/>
		<updated>2022-11-08T14:28:00Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen uploaded a new version of File:Python-api-wrapper.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7238</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7238"/>
		<updated>2022-11-08T14:15:45Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen uploaded a new version of File:Python-api-wrapper.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_External_Systems_(File_Import)&amp;diff=7225</id>
		<title>Archiving Emails from External Systems (File Import)</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_External_Systems_(File_Import)&amp;diff=7225"/>
		<updated>2022-11-03T16:17:48Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Archiving Emails from External Systems (File Import) to Archiving Emails from External Systems - File Import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Archiving Emails from External Systems - File Import]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_External_Systems_-_File_Import&amp;diff=7224</id>
		<title>Archiving Emails from External Systems - File Import</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_External_Systems_-_File_Import&amp;diff=7224"/>
		<updated>2022-11-03T16:17:48Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Archiving Emails from External Systems (File Import) to Archiving Emails from External Systems - File Import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MailStore Server can also archive the emails from applications that are not directly supported if they are available in a standardized format. With most applications it is necessary to export the emails to one of those formats first.&lt;br /&gt;
&lt;br /&gt;
Using file import, MailStore Server can archive the following formats:&lt;br /&gt;
&lt;br /&gt;
*'''EML''' - One file per email. Often called RFC 822 or MIME format.&lt;br /&gt;
*'''MSG''' - One file per email. Microsoft Outlook email files.&lt;br /&gt;
*'''PST''' - Microsoft Outlook personal folder files.&lt;br /&gt;
*'''MBOX''' - This file format is used by Mozilla Thunderbird, for example, although in this case the file ending is omitted. The MBOX file format is also used by many Unix mail servers. &lt;br /&gt;
&lt;br /&gt;
== Procedure for Archiving PST Files ==&lt;br /&gt;
Archiving PST files is described separately in chapter [[Archiving_Outlook_PST_Files_Directly|Archiving Outlook PST Files Directly]].&lt;br /&gt;
&lt;br /&gt;
== Procedure for Archiving EML and MSG Files ==&lt;br /&gt;
Setting up archiving processes for files from the file system is done using archiving profiles. General information about archiving profiles is available in chapter [[Email_Archiving_with_MailStore_Basics#Working_with_Archiving_Profiles|Working with Archiving Profiles]].&lt;br /&gt;
&lt;br /&gt;
=== Archiving Emails of a Single User ===&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' If you do not want to archive email files in your personal user archive only, you'll have to be logged on to MailStore Client as a MailStore Server administrator. Only a MailStore Server administrator can archive emails for other users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
*In MailStore Server, click on ''Archive Email''.&lt;br /&gt;
*From the ''E-mail Files'' category in the ''Create Profile'' section select ''EML and MSG files''.&lt;br /&gt;
*A wizard opens, guiding you through the setup process.&lt;br /&gt;
*: [[File:arch_filesystem_00.png|center|350px]]&lt;br /&gt;
*Select ''Single User'' and click on ''OK''.&lt;br /&gt;
*The dialog window ''Archive EML and MSG files'' appears.&lt;br /&gt;
*: [[File:arch_filesystem_01.png|center|350px]]&lt;br /&gt;
*Select the folder to be archived. All email files in this folder will be archived. &lt;br /&gt;
*If desired, adjust the advanced settings or simply click ''Next''.&lt;br /&gt;
:*'''Include Subfolders:'''&amp;lt;br/&amp;gt;In addition to the emails in the selected folder also those located in any subfolders will be archived.&lt;br /&gt;
:*'''Read MailStore Headers:'''&amp;lt;br/&amp;gt;RFC 822 files created by the MailStore Server-specific export process contain additional information such as the source folder. Set the checkmark if this information should be taken into account.&lt;br /&gt;
:*'''Custom File Extensions:'''&amp;lt;br/&amp;gt;Here you can make appropriate entries if the files to be archived are in EML or MSG format but have a different file extension.&lt;br /&gt;
*If needed, adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]], the filter and the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|Deletion Rules]]. &lt;br /&gt;
*:[[File:arch_filesystem_02.png|center|350px]]&lt;br /&gt;
*If logged on to MailStore Server as a MailStore Server-administrator, the target archive can be specified in the next step of the wizard. Select the archive of the user for whom the selected files are to be archived.&lt;br /&gt;
*: [[File:arch_filesystem_03.png|center|350px]]&lt;br /&gt;
*In the final step you can specify a name for the new archiving profile. After clicking on ''Finish'', the archiving profile will be listed under ''Saved Profiles'' and can be run immediately, if desired.&lt;br /&gt;
&lt;br /&gt;
=== Archiving Emails of Multiple Users ===&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' In order to be able to select this archiving method, you'll have to be logged on to MailStore Client as a MailStore Server administrator. Only a MailStore Server administrator can archive emails for other users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to archiving email files of a single user, MailStore Server can archive email files of multiple users from a single directory; such emails may have been exported from a multidrop mailbox.&amp;lt;br/&amp;gt;&lt;br /&gt;
To archive such emails please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* In MailStore Server, click on ''Archive Email''.&lt;br /&gt;
* From the ''E-mail Files'' category in the ''Create Profile'' section select ''EML and MSG files''.&lt;br /&gt;
* A wizard opens, guiding you through the setup process.&lt;br /&gt;
*: [[File:arch_filesystem_04.png|center|350px]]&lt;br /&gt;
* Select ''Multiple Users'' and click on ''OK''.&lt;br /&gt;
*: {{Archiving_Multiple_or_Multidrop_Note|from a source that contains emails of multiple users}}&lt;br /&gt;
* The dialog window ''Archive Multidrop Mailbox (Filesystem)'' appears.&lt;br /&gt;
*: [[File:arch_filesystem_05.png|center|350px]]&lt;br /&gt;
* Select the folder with the email files to be archived.&lt;br /&gt;
* Adjust any further settings such as how to handle emails with unknown addresses or asking MailStore Server to delete email files after they have been archived.&lt;br /&gt;
* Click on ''Next''.&lt;br /&gt;
* In the final step you can specify a name for the new archiving profile. After clicking on ''Finish'', the archiving profile will be listed under ''Saved Profiles'' and can be run immediately, if desired.&lt;br /&gt;
&lt;br /&gt;
=== Archiving Emails from a MailStore Export ===&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' In order to be able to select this archiving method, you'll have to be logged on to MailStore Client as a MailStore Server administrator. Only a MailStore Server administrator can archive emails for other users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To archive EML files which have been created by a MailStore Export, the correct options have been pre-selected. This provides an easy way to file emails exported from MailStore Server into the correct user archives and folders again.&amp;lt;br/&amp;gt;&lt;br /&gt;
Please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
*In MailStore Server, click on ''Archive Email''.&lt;br /&gt;
*From the ''E-mail Files'' category in the ''Create Profile'' section select ''EML and MSG files''.&lt;br /&gt;
*A wizard opens, guiding you through the setup process.&lt;br /&gt;
*: [[File:arch_filesystem_06.png|center|350px]]&lt;br /&gt;
*Select ''MailStore Export'' and click on ''OK''.&lt;br /&gt;
*The dialog window ''Archive EML and MSG files'' appears.&lt;br /&gt;
*: [[File:arch_filesystem_07.png|center|350px]]&lt;br /&gt;
*Select the folder to be archived. All email files in this folder will be archived. &lt;br /&gt;
*If desired, adjust the advanced settings or simply click ''Next''.&lt;br /&gt;
:*'''Include Subfolders:'''&amp;lt;br/&amp;gt;In addition to the emails in the selected folder also those located in any subfolders will be archived.&lt;br /&gt;
:*'''Read MailStore Headers:'''&amp;lt;br/&amp;gt;RFC 822 (EML) files created by the MailStore Server-specific export process contain additional information about the source archives and folders. This information allows to file emails exported from MailStore Server into the correct user archives and folders when being rearchived. Non-existent archives and folders will be created automatically.&lt;br /&gt;
:*'''Custom File Extensions:'''&amp;lt;br/&amp;gt;Here you can make appropriate entries if the files to be archived are in EML or MSG format but have a different file extension.&lt;br /&gt;
*If needed, adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]], the filter and the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|Deletion Rules]]. &lt;br /&gt;
*:[[File:arch_filesystem_02.png|center|350px]]&lt;br /&gt;
*You can specify the target archive in the next step of the wizard. Select the archive of the user for whom the selected files are to be archived. The target archive will be ignored if the option ''Read MailStore Headers'' has been selected and the email to be archived contains such headers.&lt;br /&gt;
*: [[File:arch_filesystem_03.png|center|350px]]&lt;br /&gt;
*In the final step you can specify a name for the new archiving profile. After clicking on ''Finish'', the archiving profile will be listed under ''Saved Profiles'' and can be run immediately, if desired.&lt;br /&gt;
&lt;br /&gt;
== Procedure for Archiving MBOX Files ==&lt;br /&gt;
Setting up the archiving process for files from the file system is done using archiving profiles. General information about archiving profiles is available in chapter [[Email_Archiving_with_MailStore_Basics#Working_with_Archiving_Profiles|Working with Archiving Profiles]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' If you do not want to archive email files in your personal user archive only, you'll have to be logged on to MailStore Client as a MailStore Server administrator. Only a MailStore Server administrator can archive emails for other users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* In MailStore Server, click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Files'' list in the ''Create Profile'' area of the application window select ''MBOX File''.&lt;br /&gt;
* A wizard opens, guiding you through the setup process.&lt;br /&gt;
* Select the MBOX file to be archived.&lt;br /&gt;
*: [[File:Arch_mbox_01.png|center|350px]]&lt;br /&gt;
* If logged on to MailStore Server as administrator, the target archive can be specified. Select the archive of the user for whom the selected file is to be archived.&lt;br /&gt;
*: [[File:Arch_mbox_02.png|center|350px]]&lt;br /&gt;
* In the final step you can specify a name for the new archiving profile. After clicking on ''Finish'', the archiving profile will be listed under ''Saved Profiles'' and can be run immediately, if desired.&lt;br /&gt;
&lt;br /&gt;
== Archiving with Drag &amp;amp; Drop ==&lt;br /&gt;
&lt;br /&gt;
Files can also be archived using Drag &amp;amp; Drop: Simply drag the appropriate folder containing EML files or the appropriate MBOX file into the list of saved settings to create an archiving profile for this process directly.&lt;br /&gt;
&lt;br /&gt;
{{Starting the Archiving Process}}&lt;br /&gt;
&lt;br /&gt;
[[de:E-Mails_aus_Fremdsystemen_archivieren_(Dateiimport)]]&lt;br /&gt;
[[en:Archiving Emails from External Systems (File Import)]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_(Basic_Authentication)&amp;diff=7223</id>
		<title>Archiving Emails from Microsoft 365 (Basic Authentication)</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_(Basic_Authentication)&amp;diff=7223"/>
		<updated>2022-11-03T16:16:37Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Archiving Emails from Microsoft 365 (Basic Authentication) to Archiving Emails from Microsoft 365 - Basic Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Archiving Emails from Microsoft 365 - Basic Authentication]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_-_Basic_Authentication&amp;diff=7222</id>
		<title>Archiving Emails from Microsoft 365 - Basic Authentication</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_-_Basic_Authentication&amp;diff=7222"/>
		<updated>2022-11-03T16:16:37Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Archiving Emails from Microsoft 365 (Basic Authentication) to Archiving Emails from Microsoft 365 - Basic Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p class=msnote&amp;gt;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''Information in this document is no longer maintained and may no longer be up-to-date.'''&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
On September 23rd, 2021 [https://techcommunity.microsoft.com/t5/exchange-team-blog/basic-authentication-and-exchange-online-september-2021-update/ba-p/2772210 Microsoft announced] the end of support for Basic Authentication for Exchange Online APIs on '''October 1st, 2022'''. This affects any MailStore Server version prior to 13, which will then no longer be able to archive Microsoft 365 mailboxes.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In MailStore Server 13, support for modern authentication methods via OAuth 2.0 &amp;amp; OpenID Connect as per Microsoft's recommendation as well as corresponding archiving profiles were introduced. Therefore, for archiving Microsoft 365 mailboxes, please refer to the implementation guide [[Archiving Emails from Microsoft 365 (Modern Authentication)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Implementation Guide Preamble|Exchange&amp;amp;nbsp;Online / Office&amp;amp;nbsp;365}}&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' For better readability the term ''Exchange&amp;amp;nbsp;Online / Office&amp;amp;nbsp;365'' hereinafter is being referred to as ''Office&amp;amp;nbsp;365''.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing Users ==&lt;br /&gt;
MailStore offers direct user synchronization support for Office 365. The setup procedure for the required service principal is described in the chapter [[Office 365 Integration]] of the MailStore Server manual.&lt;br /&gt;
&lt;br /&gt;
Note that while Office 365 manages users in Azure Active Directory, this itself can be synchronized with on-premise user information. Even if Office 365 / Azure AD is not the primary source of user account information in your environment, it is highly recommended to synchronize MailStore directly with Office 365 to fetch all information that is relevant for archiving such as email addresses.&lt;br /&gt;
&lt;br /&gt;
== Archiving Individual Office 365 Mailboxes ==&lt;br /&gt;
{{Archiving Single Mailbox Preamble|Office 365}}&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Important notice:''' Archiving a single mailbox requires the Exchange Online feature ''EWS Application support''. Please make sure that your Office 365 plan supports this feature. More information is available in this [https://technet.microsoft.com/en-us/library/exchange-online-service-description.aspx TechNet article].&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Archiving Exchange Single Mailbox|Office 365}}&lt;br /&gt;
&lt;br /&gt;
== Archiving Multiple Office 365 Mailboxes Centrally ==&lt;br /&gt;
{{Archiving Multiple Mailboxes Preamble|Office 365}}&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Important notice:''' Archiving multiple mailboxes requires the Exchange Online features ''EWS Application support'' and ''Role-Based Permissions''. Please make sure that your Office 365 plan supports these features. More information is available in this [https://technet.microsoft.com/en-us/library/exchange-online-service-description.aspx TechNet article].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Setting up a service account for accessing mailboxes ===&lt;br /&gt;
To be able to archive multiple Office 365 mailboxes, you need to create an Office 365 user first. Afterwards follow these steps, to grant access permissions to the newly created user on all mailboxes:&lt;br /&gt;
&lt;br /&gt;
* Log on to your Office 365 tenant through Microsoft's Online Portal with an admin account.&lt;br /&gt;
* In the ''Office 365 admin center'' choose ''ADMIN &amp;gt; Exchange''.&lt;br /&gt;
* Now, in the ''Exchange admin center'', navigate to ''permissions''.&lt;br /&gt;
* Under ''admin roles'' select ''+ (New)''.&lt;br /&gt;
*: [[Image:Arch_office365_multi_01.png|center|550px]]&lt;br /&gt;
* Enter a meaningful name (e.g. ''MailStore Impersonation'') and description for the new role group.&lt;br /&gt;
* Under ''Roles'' add the role ''ApplicationImpersonation''.&lt;br /&gt;
* Under ''Members'' add the user you want to give permission to access all mailboxes.&lt;br /&gt;
* Click on ''Save'' to create the new role group.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Configuration of MailStore Server ===&lt;br /&gt;
{{Archiving Exchange Multiple Mailboxes|Office 365|DSLink=[[#Synchronizing_Users|directory synchronization]]}}&lt;br /&gt;
&lt;br /&gt;
== Archiving Incoming and Outgoing Emails Directly ==&lt;br /&gt;
{{Archiving Exchange Journal Mailbox Preamble|Office 365}}&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Setup and Configure MailStore Gateway ===&lt;br /&gt;
Please refer to the [https://help.mailstore.com/en/gateway/ MailStore Gateway Manual] for detailed instructions about:&lt;br /&gt;
 &lt;br /&gt;
* Installation and Setup of MailStore Gateway&lt;br /&gt;
* Logging on to MailStore Gateway's Management Console&lt;br /&gt;
* Creating MailStore Gateway mailboxes&lt;br /&gt;
&lt;br /&gt;
After these steps, a mailbox with an individual email address (e.g. mbx-dead1234beef5678@gateway.example.com) should exist.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating a Journal Rule ===&lt;br /&gt;
The following steps describe how to set up journaling for your Microsoft Office 365 account.&lt;br /&gt;
&lt;br /&gt;
* Log on to your Office 365 tenant through Microsoft's Online Portal with an admin account.&lt;br /&gt;
* In the ''Office 365 admin center'' choose ''ADMIN &amp;gt; Exchange''.&lt;br /&gt;
* Now, in the ''Exchange admin center'', navigate to ''compliance management''.&lt;br /&gt;
* Select ''journal rules''.&lt;br /&gt;
* Under ''Send undeliverable journal reports to'' select an alternate journaling mailbox that receives None Delivery Reports (NDRs) for undeliverable journal reports in case the primary journal mailbox is unreachable. This mailbox must be a dedicated mailbox, any mail sent directly to this mailbox won't be journaled.&lt;br /&gt;
* Click on ''+ (New)''.&lt;br /&gt;
*:The dialog window ''New Journal Rule'' opens:&lt;br /&gt;
*:[[File:Arch_office365_journal_01.png|center|550px]]&lt;br /&gt;
* Enter a name for the journal rule, e.g. ''Journaling''.&lt;br /&gt;
* In the ''If the message is sent to or received from...'' section select whether the rule should apply to all messages or to specific users or groups.&lt;br /&gt;
* Under ''Journal the following messages...'', choose whether to capture all messages, internally sent messages only, or only those messages with an external sender or recipient.&lt;br /&gt;
* Enter the email address of the previously created MailStore Gateway mailbox in the ''Send journal reports to:'' box.&lt;br /&gt;
* Click on ''save'' to activate the rule.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Configuration of MailStore ===&lt;br /&gt;
{{Archiving MailStore Gateway Mailbox|TargetFolderHint=DontShow|POP3Hint=DontShow|DSLink=[[#Synchronizing_Users|directory synchronization]]}}&lt;br /&gt;
&lt;br /&gt;
== Public Folders ==&lt;br /&gt;
{{Archiving Exchange Public Folders Preamble|Office 365}}&lt;br /&gt;
* Log on to your Office 365 tenant through Microsoft's Online Portal with an admin account.&lt;br /&gt;
* In the ''Office 365 admin center'' choose ''ADMIN &amp;gt; Exchange''.&lt;br /&gt;
* Now, in the ''Exchange admin center'', navigate to ''public folders''.&lt;br /&gt;
* Click on the ''Ellipsis (…)'' and select ''Root permissions''.&lt;br /&gt;
*: [[File:Arch_office365_pf_01.png|center|480px]]&lt;br /&gt;
* A new browser window opens. Click on ''+ (Add)''.&lt;br /&gt;
* Use ''Browse'' to choose the Office 365 user you want to grant permissions.&lt;br /&gt;
* Choose ''Custom'' as ''Permission level'' and grant ''Read items'' and ''Delete all'' permissions.&lt;br /&gt;
*: [[File:Arch_office365_pf_02.png|center|347px]]&lt;br /&gt;
* Click on ''Save''.&lt;br /&gt;
* Enable the option ''Apply changes to this public folder and all its subfolders.''&lt;br /&gt;
* Click on ''Save''.&lt;br /&gt;
* Click on ''Close'' after saving has been completed successfully.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Setting up the Archiving Process ===&lt;br /&gt;
{{Archiving Exchange Public Folder|Office 365}}&lt;br /&gt;
&lt;br /&gt;
== Shared Mailboxes ==&lt;br /&gt;
{{Template:Archiving_Exchange_Shared_Mailbox|Office 365}}&lt;br /&gt;
&lt;br /&gt;
[[de:E-Mail-Archivierung von Microsoft Office 365]]&lt;br /&gt;
[[en:Archiving_Emails_from_Microsoft_Office_365]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Using_Network_Attached_Storage_(NAS)&amp;diff=7221</id>
		<title>Using Network Attached Storage (NAS)</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Using_Network_Attached_Storage_(NAS)&amp;diff=7221"/>
		<updated>2022-11-03T16:16:18Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Using Network Attached Storage (NAS) to Using Network Attached Storage - NAS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Using Network Attached Storage - NAS]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Using_Network_Attached_Storage_-_NAS&amp;diff=7220</id>
		<title>Using Network Attached Storage - NAS</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Using_Network_Attached_Storage_-_NAS&amp;diff=7220"/>
		<updated>2022-11-03T16:16:18Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Using Network Attached Storage (NAS) to Using Network Attached Storage - NAS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Network Attached Storage (NAS) systems provide file-based access to their own local storage to remote clients via special network protocols. In Microsoft Windows environments, the SMB or CIFS protocol is typically used to access files on a remote system. Throughout this article, the term ''NAS'' represents any computer system that is capable of sharing its own local storage via SMB or CIFS protocol, may it be a traditional Windows file server, a Linux server with a running Samba service, or a dedicated physical or virtual appliance with its own operating system and management interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' A storage system attached via FibreChannel, iSCSI, or other block-level storage protocols, is called Storage Area Network (SAN) storage. SAN storage is used like any other local disk (also referred to as Direct Attached Storage or DAS); no further configuration is needed to let MailStore Server store its data on it.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MailStore Server can utilize NAS systems to store its production data or as target for its backup data. In general, it is recommended to store production data locally for best performance, stability and reliability, and to use NAS systems for backup data. &lt;br /&gt;
&lt;br /&gt;
Irregardless of where the production data is stored, the archive can always be accessed from other client computers by using MailStore Client, MailStore Web Access, MailStore Outlook Add-in, or IMAP compatible email clients via the integrated IMAP Server as described in [[Accessing the Archive]].&lt;br /&gt;
&lt;br /&gt;
To ensure successful operation, the NAS should meet the following prerequisites:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;mswarning&amp;quot;&amp;gt;The NAS must not be turned off, disconnected or put into standby mode at any time, as long as there is a MailStore Server service accessing the data on the NAS. Otherwise, data corruption may occur, which can lead to irreparable loss of data.&amp;lt;/span&amp;gt;&lt;br /&gt;
* If possible, disable &amp;quot;Opportunistic Locking&amp;quot; for network shares on which production data is to be stored.&lt;br /&gt;
* The shared directories on the NAS should be excluded from any server-side anti-virus scanning, real-time backups, file level replication, or anything else that could prevent MailStore from accessing any file at any time.&lt;br /&gt;
* When moving an existing MailStore database, the available disk space should be twice the size of the current archive.&lt;br /&gt;
&lt;br /&gt;
== Creating a Network Share ==&lt;br /&gt;
The follow three steps are needed to setup a network share that can be used by MailStore Server:&lt;br /&gt;
&lt;br /&gt;
* Create a dedicated folder for the MailStore data to reside in on the NAS.&lt;br /&gt;
* Share that folder if it is not already inside a shared folder on the network, via SMB or CIFS protocol. Please consult the vendor's documentation on how to share a folder on the network.&lt;br /&gt;
* As described below, authorize either a computer or user object to access the network share and the data therein.&lt;br /&gt;
&lt;br /&gt;
=== Authorizing a Computer Object ===&lt;br /&gt;
As the MailStore Server service runs under the account of the ''SYSTEM'' user on the Windows operating system, the ''SYSTEM'' user is identified by the computer object (e.g. SERVER01$) where MailStore Server is installed on when accessing network resources. Thus permissions to access the network share must be granted to the corresponding computer object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' Granting access to computer objects requires all involved systems to be part of an Active Directory domain. If this requirement cannot be satisfied, or the NAS system does not support granting access to computer objects at all, use the instructions in the [[Using_Network_Attached_Storage_(NAS)#Authorizing a User Object|Authorizing a User Object]] section instead.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grant the computer object full control over the network share. This enables the local system account of the computer on which MailStore Server is installed to access the network share. &lt;br /&gt;
*: [[File:Tech_netshares_01.png|center]]&lt;br /&gt;
* If file system permissions are required on the shared directory, grant the computer object full control here as well.&lt;br /&gt;
*: [[File:Tech_netshares_02.png|center]]&lt;br /&gt;
&lt;br /&gt;
=== Authorizing a User Object ===&lt;br /&gt;
* Create a user object either locally on the NAS system or in a directory service (e.g. Active Directory) that is used by the NAS to authenticate users.&lt;br /&gt;
* Grant the user object full control over the directory share. &lt;br /&gt;
*: [[File:Tech_netshares_04.png|center]]&lt;br /&gt;
* If file system permissions are required, grant the user object full control here as well.&lt;br /&gt;
*: [[File:Tech_netshares_05.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Installing MailStore Server while using a NAS system ==&lt;br /&gt;
* Install MailStore Server on the desired machine. Detailed instructions can be found in the [[Installation]] section if the MailStore manual.&lt;br /&gt;
* Open the [[MailStore Server Service Configuration]].&lt;br /&gt;
* Stop the MailStore Server service.&lt;br /&gt;
* Navigate to ''General'' and enter the full path to a directory on the network share provided by the NAS system in UNC notation (&amp;lt;code&amp;gt;\\computer\sharename\directory&amp;lt;/code&amp;gt;). In the example below, the name of the NAS system is NAS01, the name of the share is MailStore, and the directory is MailArchive. &lt;br /&gt;
&lt;br /&gt;
[[File:Tech_netshares_06.png|center|550px]]&lt;br /&gt;
&lt;br /&gt;
If a computer object was granted access to the network share, the MailStore service can be started by clicking on ''Start'' in the MailStore Server Service Configuration interface.&lt;br /&gt;
&lt;br /&gt;
If a user object was granted access to the network share, proceed with the next section.&lt;br /&gt;
&lt;br /&gt;
== Connecting to Network Shares ==&lt;br /&gt;
If a user object has been granted access on the network share, MailStore Server must establish a connection to the share during startup using this user object. Proceed as follows to configure access to the network share for the MailStore Server service:&lt;br /&gt;
&lt;br /&gt;
* On the MailStore Server computer, open the [[MailStore Server Service Configuration]]. &lt;br /&gt;
* Click on ''Network Shares''. &lt;br /&gt;
* Click on ''Add...''&lt;br /&gt;
* Enter the path for the network share on the NAS system into the ''Share Path'' field in UNC notation (&amp;lt;code&amp;gt;\\computer\sharename&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Enter the username and password of the corresponding user object that has access to the network share into the ''User Name'' and ''Password'' fields.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;div class=&amp;quot;msnote&amp;quot;&amp;gt;'''Important notice:''' It is highly recommended to always put the corresponding computer or domain name in front of the username, e.g. &amp;lt;code&amp;gt;computer\username&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;computer&amp;lt;/code&amp;gt; has to be the host name of the NAS, or, if applicable, &amp;lt;code&amp;gt;domain\username&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;domain&amp;lt;/code&amp;gt; has to be the name of the Active Directory domain the NAS has joined and where the user object exists.&amp;lt;/div&amp;gt;&lt;br /&gt;
*:[[File:Tech_netshares_07.png|center|550px]]&lt;br /&gt;
* Click on ''OK''.&lt;br /&gt;
* The MailStore Server service can now be started by clicking on ''Start'' in the MailStore Server Service Configuration interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Please note:''' Due to the different security contexts of the MailStore Server service and the MailStore Server Service Configuration application, the user interface does not provide any test functionality and thus checking the ''Event Viewer'' for potential error messages is recommended after starting the service.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Moving the archive to a Network Share ==&lt;br /&gt;
&lt;br /&gt;
Moving the archive to a network share is described in the article [[Moving_the_Archive#Moving_the_Archive_to_a_Network_Share|Moving the Archive]].&lt;br /&gt;
&lt;br /&gt;
== Writing a backup to a Network Share ==&lt;br /&gt;
&lt;br /&gt;
* [[#Creating_a_Network_Share|Create a network share]] on the NAS system first.&lt;br /&gt;
* If a user object has been granted permissions on the share, you have to configure a [[#Connecting_to_Network_Shares|connection to a network share]].&lt;br /&gt;
* Follow the instructions from the [[Backup_and_Restore#Using_the_MailStore_Integrated_Backup_Feature|backup article]].&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
In case of errors or problems the [[MailStore_Server_Service_Configuration#Event_Viewer|event viewer]] or [[MailStore_Server_Service_Configuration#Debug_Log|debug log]] can be used to troubleshoot.&lt;br /&gt;
&lt;br /&gt;
[https://cs.mailstore.com/index.php?/Knowledgebase/Article/View/73/10/debugging-nas-connection-issues Debugging NAS connection issues]&lt;br /&gt;
&lt;br /&gt;
[https://cs.mailstore.com/index.php?/Knowledgebase/Article/View/99/10/a-mailstore-database-residing-on-a-network-share-cannot-be-opened Opportunistic Locking]&lt;br /&gt;
&lt;br /&gt;
[[de:Verwendung_von_Network_Attached_Storage_(NAS)]]&lt;br /&gt;
[[en:Using Network Attached Storage (NAS)]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)&amp;diff=7219</id>
		<title>Synchronizing User Accounts with Microsoft 365 (Modern Authentication)</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)&amp;diff=7219"/>
		<updated>2022-11-03T16:15:51Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Synchronizing User Accounts with Microsoft 365 (Modern Authentication) to Synchronizing User Accounts with Microsoft 365 - Modern Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Synchronizing User Accounts with Microsoft 365 - Modern Authentication]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Synchronizing_User_Accounts_with_Microsoft_365_-_Modern_Authentication&amp;diff=7218</id>
		<title>Synchronizing User Accounts with Microsoft 365 - Modern Authentication</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Synchronizing_User_Accounts_with_Microsoft_365_-_Modern_Authentication&amp;diff=7218"/>
		<updated>2022-11-03T16:15:51Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Synchronizing User Accounts with Microsoft 365 (Modern Authentication) to Synchronizing User Accounts with Microsoft 365 - Modern Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Directory Services Preamble|Microsoft 365 tenant|Microsoft 365|{{#ev:youtube|https://youtu.be/OtJx2EKEW0Y|350|right|''Tech Tip: Preparation of the Microsoft 365 Tenant and User Synchronization''}}|&amp;lt;br/&amp;gt;Our Tech Tip video shows the essential configuration steps in this article.}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
== Prerequisites, Recommendations and Limitations ==&lt;br /&gt;
* For best user experience, the certificate used by MailStore Server should be trusted by all clients and the used web browsers. Using a certificate that is signed by a trusted certificate authority or [[Using_Lets_Encrypt_Certificates|using Let's Encrypt certificates]] is highly recommended.&lt;br /&gt;
* If users are supposed to log in to MailStore Server from outside the organization's network without a VPN using [[Accessing_the_Archive_with_the_MailStore_Client_software|MailStore Client]], [[Accessing_the_Archive_with_the_Microsoft_Outlook_integration|MailStore Outlook Add-in]] or the [[Accessing_the_Archive_with_MailStore_Web_Access|Web Access]], the URIs mentioned in this article must be resolvable via DNS on the Internet and port-forwardings to the MailStore Server computer must be set up on the firewall or router if necessary. &lt;br /&gt;
* When using Microsoft&amp;amp;nbsp;365 to authenticate users at login, [[Accessing_the_Archive_via_Integrated_IMAP_Server|accessing the archive via IMAP]] is not possible for technical reasons.&lt;br /&gt;
* MailStore Server supports synchronizing user accounts with Microsoft&amp;amp;nbsp;365 (Modern Authentication) only with the global Microsoft Cloud. National clouds such as ''Microsoft Cloud for US Government'', ''Microsoft Cloud Germany'' (operated by T-Systems) and ''Azure and Microsoft 365 operated by 21Vianet in China'' are not supported. For synchronizing users with ''Office&amp;amp;nbsp;365 Germany'' and ''Office 365 operated by 21Vianet'', please refer to the [[Synchronizing_User_Accounts_with_Microsoft_365_(Basic_Authentication)|corresponding manual chapter]].&lt;br /&gt;
&lt;br /&gt;
== Connecting MailStore Server and Microsoft 365 ==&lt;br /&gt;
In order to synchronize user information from Microsoft 365, MailStore Server has to be connected to your Microsoft 365 tenant and been granted the required permissions. Microsoft 365 relies on Azure Active Directory as directory service. Each Microsoft 365 tenant corresponds to an Azure AD tenant that stores its user information.&lt;br /&gt;
&lt;br /&gt;
=== Registering of MailStore Server as App in Azure AD ===&lt;br /&gt;
Through registration, MailStore Server gets an identity in Azure AD that makes it possible to authenticate to the tenant's services and use their resources.&lt;br /&gt;
* Sign in to the [https://portal.azure.com Azure Portal] as a Global Administrator for your Microsoft 365 tenant.&lt;br /&gt;
* In the navigation menu (☰), select the option ''Azure Active Directory''.&lt;br /&gt;
* On the next page, select ''App registrations'' in the ''Manage'' section of the left navigation menu.&lt;br /&gt;
* Select ''New Registration''. The ''Register an application'' page appears.&lt;br /&gt;
* In the ''Name'' field, enter a meaningful display name, e.g. ''MailStore Server''. This name will be shown to users on logon later on, for example.&lt;br /&gt;
* Leave all other settings on this page to their defaults.&lt;br /&gt;
* Click on ''Register''. If the registration has been successful, you are shown the overview page of the newly registered app.&lt;br /&gt;
The ''Application (client) ID'' shown on this page identifies MailStore Server in your Azure AD tenant and has to be copied into MailStore Server next, together with the ''Directory (tenant) ID''. Therefore, for the following steps, leave the overview page open in your web browser.&lt;br /&gt;
&lt;br /&gt;
=== Creating Credentials in MailStore Server ===&lt;br /&gt;
Credentials for Microsoft 365 consist of the aforementioned IDs and a secret that MailStore Server uses to proof its identity to Azure AD. Microsoft recommends using certificates as secrets to identify apps in Azure AD. When creating credentials, such a certificate is generated automatically by MailStore Server but can also be recreated later on.&lt;br /&gt;
{{Directory Services Accessing Configuration|Microsoft 365 (Modern Authentication)|Microsoft 365 sync 01.png}}&lt;br /&gt;
* In the ''Connection'' section, click on the button (…) next to the ''Credentials'' drop-down list.&lt;br /&gt;
* In the ''Credential Manager'' that appears, click on ''Create…''&lt;br /&gt;
* In the ''Azure AD App Credentials'' dialog, enter the following information in the ''Settings'' section:&lt;br /&gt;
** '''Name'''&amp;lt;br/&amp;gt; A meaningful display name for the credentials, e.g. the name of your Microsoft 365 tenant.&lt;br /&gt;
** '''Application (client) ID'''&amp;lt;br/&amp;gt; The value of the corresponding field that you can copy from the Azure AD app overview page in your web browser.&lt;br /&gt;
** '''Directory (tenant) ID'''&amp;lt;br/&amp;gt; The value of the corresponding field that you can copy from the Azure AD app overview page in your web browser.&lt;br /&gt;
[[File:Microsoft 365 cred 01.png|center|347px]]&lt;br /&gt;
* In the ''Authentication'' section, click on the drop-down button next to the ''Certificate'' text box und select ''Download Certificate''. Save the certificate on your hard drive.&lt;br /&gt;
* Confirm your entries by clicking ''OK''.&lt;br /&gt;
* The newly created credentials are listed in the ''Credential Manager'' under the name you have entered with the type ''Microsoft 365''. Here you can also edit or delete existing credentials if necessary.&lt;br /&gt;
* Leave the ''Credential Manager'' by clicking ''Close''.&lt;br /&gt;
* The newly created credentials are selected in the corresponding drop-down list by default.&lt;br /&gt;
&lt;br /&gt;
=== Publishing Credentials in Azure AD ===&lt;br /&gt;
For Azure AD to validate the identity of MailStore Server, the created certificate needs to be published in Azure AD.&lt;br /&gt;
* Switch to the Azure AD app overview page in your web browser.&lt;br /&gt;
* Select ''Certificates &amp;amp; secrets'' in the ''Manage'' section of the left navigation menu.&lt;br /&gt;
* Click on ''Upload certificate'' in the ''Certificates'' section. Select the certificate file that you have saved previously and upload it to Azure AD by clicking ''Add''.&lt;br /&gt;
* If uploading has been successful, the certificate's thumbprint as well as its start and expiry dates appear in the certificates list. You can compare the thumbprint and expiry date with those listed in the MailStore Credential Manager to check that you've uploaded the correct certificate.&lt;br /&gt;
&lt;br /&gt;
=== Configuring App Authentication in Azure AD ===&lt;br /&gt;
For Azure AD to return the result of a user's authentication request to MailStore Server, the endpoint where MailStore Server expects authentication responses, the so-called ''Redirect URI'', has to be conveyed to Azure AD.&lt;br /&gt;
* In the Azure Portal in the web browser, select ''Authentication'' in the ''Manage'' section of the left navigation menu.&lt;br /&gt;
* Click on the ''Add a platform'' button in the ''Platform configurations'' section of the ''Authentication'' page.&lt;br /&gt;
* Select ''Web'' in the ''Web applications'' section of the ''Configure platforms'' menu page.&lt;br /&gt;
* In the field ''Redirect URI'', enter a URI in the format (without brackets)&lt;br /&gt;
*: &amp;lt;code&amp;gt;https://&amp;lt;fqdn&amp;gt;[:&amp;lt;port&amp;gt;]/oidc/signin&amp;lt;/code&amp;gt;&lt;br /&gt;
*; with the following components&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*: '''https://'''&amp;lt;br/&amp;gt; Specifying the &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt; protocol is obligatory. To avoid certificate warnings during user logon, the web browsers on the client machines must trust the [[MailStore_Server_Service_Configuration#Certificate|certificate used by MailStore Server]].&lt;br /&gt;
*: '''FQDN'''&amp;lt;br/&amp;gt;The Fully Qualified Domain Name (FQDN) of your MailStore Server that consists of the machine name and the DNS domain, e.g. &amp;lt;code&amp;gt;mailstore.example.com&amp;lt;/code&amp;gt;. This name must be resolvable by all clients from which users shall be able to log on to MailStore Server.&lt;br /&gt;
*: '''Port'''&amp;lt;br/&amp;gt;The TCP port of the MailStore Web Access (&amp;lt;code&amp;gt;8462&amp;lt;/code&amp;gt; by default). This value must be equal to the port configured in the section ''Base Configuration &amp;gt; Network Settings &amp;gt; MailStore Web Access / Outlook Add-in (HTTPS)'' of the [[MailStore_Server_Service_Configuration#Services|MailStore Server Service Configuration]]. The TCP port has to be specified only if it is different from the default port of the HTTPS protocol (&amp;lt;code&amp;gt;443&amp;lt;/code&amp;gt;).&lt;br /&gt;
*: '''/oidc/signin'''&amp;lt;br/&amp;gt;The endpoint where MailStore Server expects the authentication responses of Azure AD. This path has to be specified exactly as stated here at the end of the redirect URI.&lt;br /&gt;
* Leave the field ''Logout URL'' blank.&lt;br /&gt;
* Enable the ''ID tokens'' option in the ''Implicit grant'' section.&lt;br /&gt;
* Click on ''Configure'' to finish the configuration of the app authentication in Azure AD.&lt;br /&gt;
&amp;lt;div class=&amp;quot;resp-table&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%;&amp;quot;&lt;br /&gt;
|+ Examples for valid redirect URIs&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:80px;&amp;quot; | Product&lt;br /&gt;
! style=&amp;quot;width:80px;&amp;quot; | FQDN&lt;br /&gt;
! style=&amp;quot;width:40px;&amp;quot; | Port&lt;br /&gt;
! Resulting Redirect URI&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| MailStore Server&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| mailstore.example.com&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 8462&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://mailstore.example.com:8462/oidc/signin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Redirect URI with Fully Qualified Domain Name and MailStore Web Access default  port&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| MailStore Server&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| mailstore.example.com&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 443&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://mailstore.example.com/oidc/signin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The port can be ommited if the HTTPS default port 443 has been configured for MailStore Web Access or as source port of a port-forwarding on the firewall or router.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| MailStore SPE&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| archive.example.com&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 443&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://archive.example.com/&amp;lt;instanceid&amp;gt;/oidc/signin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The ''instanceid'' of the instance is part of the Redirect URI. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:: &amp;lt;p class=&amp;quot;msnote&amp;quot;&amp;gt;'''Important Notice:''' Please note that the redirect URI is case-sensitive. Also review the requirements on resolving URIs in the [[#Prerequisites, Recommendations and Limitations|Prerequisites, Recommendations and Limitations]] section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Redirect URI in MailStore Server ===&lt;br /&gt;
For MailStore Server to convey the redirect URI to requesting clients, it must be configured there, too.&lt;br /&gt;
* Switch to the ''Directory Services'' page in the MailStore Client.&lt;br /&gt;
* Enter the redirect URI in the corresponding field in the ''Authentication'' section. Just copy the value previously configured in Azure AD from the web browser.&lt;br /&gt;
[[File:Microsoft 365 sync 02.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
=== Configuring API Permissions in Azure AD ===&lt;br /&gt;
* Switch again to Azure AD in your web browser.&lt;br /&gt;
* Select ''API permissions'' in the ''Manage'' section of the left navigation menu.&lt;br /&gt;
* Click on the ''Add a permission'' button in the ''Configured permissions'' section.&lt;br /&gt;
* On the ''Request API permissions'' menu page, select the API ''Microsoft Graph'' in the ''Commonly used Microsoft APIs'' section.&lt;br /&gt;
* Select the option ''Application permissions''.&lt;br /&gt;
* Enable the ''Directory &amp;gt; Directory.Read.All'' permission in the ''Select permissions'' section.&lt;br /&gt;
* Click on ''Add permissions''.&lt;br /&gt;
* The permissions are updated and the ''Directory.Read.All'' permission appears in the API permissions list under ''Microsoft Graph''.&lt;br /&gt;
* Click on the ''Add a permission'' button in the ''Configured permissions'' section again.&lt;br /&gt;
* On the ''Request API permissions'' menu page, select ''APIs my organization uses''.&lt;br /&gt;
* Search for ''Office 365 Exchange Online'' and click on the corresponding entry.&lt;br /&gt;
* Select the option ''Application permissions''.&lt;br /&gt;
* Enable the ''full_access_as_app'' permission in the ''Select permissions'' section.&lt;br /&gt;
* Click on ''Add permissions''.&lt;br /&gt;
* The permissions are updated and the ''full_access_as_app'' permission appears in the API permissions list under ''Exchange''.&lt;br /&gt;
* Now click on the ''Grant admin consent for &amp;lt;your tenant name&amp;gt;'' button in the ''Configured permissions'' section.&lt;br /&gt;
* Acknowledge the following notice with ''Yes''.&lt;br /&gt;
* The status of all granted permissions is updated to ''Granted for &amp;lt;your tenant name&amp;gt;''.&lt;br /&gt;
The configuration of MailStore Server's connection to Microsoft 365 within Azure AD is now complete. You can sign out of your Azure AD tenant and close the browser window. Switch to the ''Directory Services'' page in the MailStore Client again, all remaining configuration steps must be done there.&lt;br /&gt;
&lt;br /&gt;
=== User Database Synchronization ===&lt;br /&gt;
After configuring the connection settings as described above, you can specify filter criteria for the Microsoft 365 synchronization in this section.&lt;br /&gt;
*'''Synchronize licensed Microsoft Exchange Online users only'''&amp;lt;br/&amp;gt;Only Microsoft 365 user accounts with a Microsoft Exchange Online license assigned to them will be taken into account by the synchronization.&lt;br /&gt;
*'''Synchronize enabled users only'''&amp;lt;br/&amp;gt;Only Microsoft 365 user accounts that do not have their login to Microsoft 365 blocked will be taken into account by the synchronization.&lt;br /&gt;
*'''Sync only these groups'''&amp;lt;br/&amp;gt;Choose one or several Microsoft 365 security groups if you only want their members to be created as MailStore Server users. That way it's possible to exclude certain users from being synchronized to MailStore Server.&lt;br /&gt;
&lt;br /&gt;
{{Directory Services Options|Microsoft 365 tenant}}&lt;br /&gt;
{{Directory Services Assign Default Privileges|Microsoft 365}}&lt;br /&gt;
{{Directory Services Run Synchronization|Microsoft 365 tenant}}&lt;br /&gt;
[[File:Office365_sync_02.png|450px|center]]&lt;br /&gt;
&lt;br /&gt;
{{Directory Services Test Authentication}}&lt;br /&gt;
[[de:Synchronisieren_von_Benutzerkonten_mit_Microsoft_365_(Modern_Authentication)]]&lt;br /&gt;
[[en:Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_(Modern_Authentication)&amp;diff=7217</id>
		<title>Archiving Emails from Microsoft 365 (Modern Authentication)</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Archiving_Emails_from_Microsoft_365_(Modern_Authentication)&amp;diff=7217"/>
		<updated>2022-11-03T16:15:08Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Archiving Emails from Microsoft 365 (Modern Authentication) to Move Archiving Emails from Microsoft 365 - Modern Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Move Archiving Emails from Microsoft 365 - Modern Authentication]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Move_Archiving_Emails_from_Microsoft_365_-_Modern_Authentication&amp;diff=7216</id>
		<title>Move Archiving Emails from Microsoft 365 - Modern Authentication</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Move_Archiving_Emails_from_Microsoft_365_-_Modern_Authentication&amp;diff=7216"/>
		<updated>2022-11-03T16:15:08Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen moved page Archiving Emails from Microsoft 365 (Modern Authentication) to Move Archiving Emails from Microsoft 365 - Modern Authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Implementation Guide Preamble|Exchange&amp;amp;nbsp;Online / Microsoft&amp;amp;nbsp;365|{{#ev:youtube|https://youtu.be/X0Um0cDWGg0|350|right|''Tech Tip: Microsoft 365 Archiving Profiles''}}|&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Our Tech Tip video shows the essential configuration steps in this article.}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
{{Multiline Notices|Heading=Important Notices|MailStore Server supports archiving emails from Microsoft&amp;amp;nbsp;365 (Modern Authentication) only with the global Microsoft Cloud. National clouds such as ''Microsoft Cloud for US Government'', ''Microsoft Cloud Germany'' (operated by T-Systems) and ''Azure and Microsoft 365 operated by 21Vianet in China'' are not supported. For archiving emails from ''Office&amp;amp;nbsp;365 Germany'' and ''Office 365 operated by 21Vianet'', please refer to the [[Synchronizing_User_Accounts_with_Microsoft_365_(Basic_Authentication)|corresponding implementation guide]].|For better readability, the terms ''Microsoft&amp;amp;nbsp;365'' and ''Exchange&amp;amp;nbsp;Online'' are used interchangeably hereinafter instead of ''Exchange&amp;amp;nbsp;Online / Microsoft&amp;amp;nbsp;365''.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== App Registration &amp;amp; User Synchronization ==&lt;br /&gt;
Before archiving Microsoft&amp;amp;nbsp;365 mailboxes, registering MailStore Server in your Microsoft&amp;amp;nbsp;365 tenant is required. It is also highly recommended to synchronize users in MailStore Server directly with that tenant to fetch all information that is relevant for archiving such as email addresses. The registration and synchronization procedures are described in the chapter [[Synchronizing User Accounts with Microsoft 365 (Modern Authentication)]] of the MailStore Server manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Please note:''' MailStore Server runs as a [[MailStore Server Service Configuration|Windows service]] and thus must use ''Application Permissions'' to access user mailboxes in Microsoft&amp;amp;nbsp;365. By design, on the Microsoft identity platform, which is at the heart of Microsoft&amp;amp;nbsp;365 authentication and authorization, this permission scope encloses the full level of privileges implied by a permission. As a consequence, once registered as described above, MailStore Server has access to all mailboxes in your Microsoft&amp;amp;nbsp;365 tenant. Therefore, with regard to security, access to the Microsoft&amp;amp;nbsp;365 archiving profiles in MailStore Server is limited to MailStore Server administrators.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Including Microsoft&amp;amp;nbsp;365 Shared Mailboxes ===&lt;br /&gt;
In Microsoft&amp;amp;nbsp;365, shared mailboxes are special mailboxes that multiple users have access to. Unlike a normal mailbox, a shared mailbox is not associated to a licensed Microsoft&amp;amp;nbsp;365 user. For MailStore Server to create user entries for shared mailboxes, you must therefore deactivate the option ''Synchronize licensed Microsoft Exchange&amp;amp;nbsp;Online users only'' in the section [[Synchronizing User Accounts with Microsoft 365 (Modern Authentication)#User_Database_Synchronization|User Database Synchronization]].&amp;lt;br/&amp;gt;&lt;br /&gt;
After synchronization you can grant MailStore Server users access to the archive of the shared mailbox by [[Users,_Folders_and_Settings#Folder_Access_.28e.g._Access_to_the_Emails_of_Other_Users.29|assigning privileges]]. For archiving shared mailboxes, just proceed as for individual or multiple mailboxes as detailed below.&lt;br /&gt;
&lt;br /&gt;
== Archiving Individual Microsoft&amp;amp;nbsp;365 Mailboxes ==&lt;br /&gt;
{{Archiving Single Mailbox Preamble|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
For each mailbox, please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* Log on to MailStore Client as MailStore Server administrator.&lt;br /&gt;
* Click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Servers'' list in the ''Create Profile'' area of the ''Archive Email'' page, select ''Microsoft&amp;amp;nbsp;365'' to create a new archiving profile.&lt;br /&gt;
* A wizard opens to assist in specifying the archiving settings.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 mailbox 01.png|center|347px]]&lt;br /&gt;
* Select ''Single Mailbox'' and click on ''OK''.&lt;br /&gt;
*; [[File:Microsoft 365 mailbox 02.png|center|347px]]&lt;br /&gt;
* Select the Microsoft&amp;amp;nbsp;365 credentials that you have created during the registration of MailStore Server with Microsoft&amp;amp;nbsp;365 from the ''Credentials'' drop-down list. You can also use the button (…) to access the [[Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)#Creating_Credentials_in_MailStore_Server|Credential Manager]].&lt;br /&gt;
* In the ''Mailbox'' field, enter the primary email address of the user whose mailbox you want to archive.&lt;br /&gt;
* Click on ''Test'' to verify that MailStore Server can access the mailbox.&lt;br /&gt;
* Click on ''Next''.&lt;br /&gt;
* If needed, adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]], the [[Email_Archiving_with_MailStore_Basics#Specifying_Filter_Criteria_for_Archiving|filter]] and the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|Deletion Rules]]. By default, no emails will be deleted from the mailbox. The ''Timeout'' value only has to be adjusted in specific cases (e.g. with very slow network connections). &lt;br /&gt;
*; [[File:Microsoft_365_mailbox_03.png|center|347px]]&lt;br /&gt;
* Click on ''Next'' to continue.&lt;br /&gt;
* Select the archive of the user for whom the selected mailbox is to be archived. If the user does not exist yet, click on ''Create a New User…''.&lt;br /&gt;
*; [[File:Microsoft_365_mailbox_04.png|center|347px]]&lt;br /&gt;
* Click on ''Next''.&lt;br /&gt;
* In the last step, a name for the archiving profile can be specified. After clicking ''Finish'', the archiving profile will be listed under ''Saved Profiles'' and, if desired, can be run immediately or automatically.&lt;br /&gt;
&lt;br /&gt;
More information on how to execute archiving profiles can be found under the topic [[Email Archiving with MailStore Basics]]&lt;br /&gt;
&lt;br /&gt;
== Archiving Multiple Microsoft&amp;amp;nbsp;365 Mailboxes Centrally ==&lt;br /&gt;
{{Archiving Multiple Mailboxes Preamble|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
Please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* Log on to MailStore Client as MailStore Server administrator.&lt;br /&gt;
* Click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Servers'' list in the ''Create Profile'' area of the ''Archive Email'' page, select ''Microsoft&amp;amp;nbsp;365'' to create a new archiving profile.&lt;br /&gt;
* A wizard opens to assist in specifying the archiving settings.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 mailboxes 01.png|center|347px]]&lt;br /&gt;
* Select ''Multiple Mailboxes'' and click ''OK''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; &amp;lt;p class=msnote&amp;gt;{{Archiving_Multiple_or_Multidrop_Note|multiple mailboxes|[[#App_Registration_.26_User_Synchronization|directory synchronization]]}}&amp;lt;/p&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 mailboxes 02.png|center|347px]]&lt;br /&gt;
* Select the Microsoft&amp;amp;nbsp;365 credentials that you have created during the registration of MailStore Server with Microsoft&amp;amp;nbsp;365 from the ''Credentials'' drop-down list. You can also use the button (…) to access the [[Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)#Creating_Credentials_in_MailStore_Server|Credential Manager]].&lt;br /&gt;
* Click on ''Next'' to continue. &lt;br /&gt;
*; [[File:Microsoft 365 mailboxes 03.png|center|347px]]&lt;br /&gt;
* If needed, adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]], the [[Email_Archiving_with_MailStore_Basics#Specifying_Filter_Criteria_for_Archiving|filter]] and the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|Deletion Rules]]. By default, no emails will be deleted from the mailbox. The ''Timeout'' value only has to be adjusted in specific cases (e.g. with very slow network connections). Please keep in mind that these settings apply to all mailboxes to be archived, as specified in the next step.&lt;br /&gt;
*; {{Archiving_Multiple_Mailboxes_Centrally_Options|Microsoft_365_mailboxes_04.png|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
&lt;br /&gt;
== Archiving Incoming and Outgoing Emails Directly ==&lt;br /&gt;
{{Archiving Exchange Journal Mailbox Preamble|Exchange&amp;amp;nbsp;Online}}&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Setup and Configure MailStore Gateway ===&lt;br /&gt;
Please refer to the [https://help.mailstore.com/en/gateway/ MailStore Gateway Manual] for detailed instructions about:&lt;br /&gt;
 &lt;br /&gt;
* Installation and Setup of MailStore Gateway&lt;br /&gt;
* Logging on to MailStore Gateway's Management Console&lt;br /&gt;
* Creating MailStore Gateway mailboxes&lt;br /&gt;
&lt;br /&gt;
After these steps, a mailbox with an individual email address (e.g. mbx-dead1234beef5678@gateway.example.com) should exist.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Configure MailStore Server ===&lt;br /&gt;
{{Archiving MailStore Gateway Mailbox|''In- and Outbound E-Mail Automatically''|Microsoft 365 journal 01.png|Arch_MailStore_Gateway_Office365_02.png|''Microsoft&amp;amp;nbsp;365''|TargetFolderHint=DontShow|POP3Hint=DontShow|DSLink=[[#App_Registration_.26_User_Synchronization|directory synchronization]]}}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Creating a Journal Rule ===&lt;br /&gt;
The following steps describe how to set up journaling for your Microsoft&amp;amp;nbsp;365 account.&lt;br /&gt;
&lt;br /&gt;
Since you are planning to use an external mailbox (MailStore Gateway) as the recipient for Journal reports, we highly recommend to first create an external contact with this mail address in your Exchange mailbox administration to prevent any later errors or warnings about an unknown recipient in the process.&lt;br /&gt;
&lt;br /&gt;
* Sign in to the [https://admin.microsoft.com/ Microsoft&amp;amp;nbsp;365 admin center] as an Exchange or Global Administrator for your Microsoft&amp;amp;nbsp;365 tenant.&lt;br /&gt;
* Expand the left navigation menu by clicking ''Show all''.&lt;br /&gt;
* In the ''Admin centers'' section, either use this [https://compliance.microsoft.com/exchangeinformationgovernance?viewid=exoJournalRule direct link] or follow these steps:&lt;br /&gt;
** In the left navigation menu, click ''Compliance''. The Microsoft Purview compliance portal is opened.&lt;br /&gt;
** In the left navigation menu, select ''Data Lifecycle Management'', then select  ''Exchange&amp;amp;nbsp;(legacy)''.&lt;br /&gt;
* Open the ''Settings'' on the top right.&lt;br /&gt;
* Enter a mailbox in the ''Send undeliverable journal reports to'' section. This mailbox should be a dedicated mailbox for this purpose. This mailbox receives None Delivery Reports (NDRs) for undeliverable journal reports in case the primary journal mailbox is unreachable.&lt;br /&gt;
* Return to the ''Exchange (legacy)'' settings.&lt;br /&gt;
* Open the page ''Journal rules''.&lt;br /&gt;
* Create a new journaling rule by clicking on ''+ (New rule)''.&lt;br /&gt;
*:[[File:Arch_office365_journal_01.png|center|550px]]&lt;br /&gt;
* Enter the email address of the previously created MailStore Gateway mailbox in the ''Send journal reports to:'' box.&lt;br /&gt;
* Enter a name for the journal rule, e.g. ''Journaling''.&lt;br /&gt;
* In the ''Journal messages sent or received from'' section, select whether the rule should apply to everyone or to specific users or groups.&lt;br /&gt;
* Under ''Type of message to journal'', choose whether to capture all messages, internal messages only, or external messages only.&lt;br /&gt;
* Click on ''Next'', then validate your settings, click ''Submit'' to activate the rule.&lt;br /&gt;
&lt;br /&gt;
== Public Folders ==&lt;br /&gt;
{{Archiving Exchange Public Folders Preamble|Exchange&amp;amp;nbsp;Online|Microsoft&amp;amp;nbsp;365}}&lt;br /&gt;
* Sign in to the [https://admin.microsoft.com/ Microsoft&amp;amp;nbsp;365 admin center] as an Exchange or Global Administrator for your Microsoft&amp;amp;nbsp;365 tenant.&lt;br /&gt;
* Expand the left navigation menu by clicking ''Show all''.&lt;br /&gt;
* In the ''Admin centers'' section, choose ''Exchange''.&lt;br /&gt;
* In the ''Exchange admin center'', navigate to ''public folders''.&lt;br /&gt;
* Click on the ''Ellipsis (…)'' and select ''Root permissions''.&lt;br /&gt;
*: [[File:Microsoft_365_pf_01.png|center|480px]]&lt;br /&gt;
* A new browser window opens. Click on ''+ (Add)''.&lt;br /&gt;
* Use ''Browse'' to choose the Microsoft&amp;amp;nbsp;365 user you want to grant permissions.&lt;br /&gt;
* Choose ''Custom'' as ''Permission level'' and grant ''Read items'' and ''Delete all'' permissions.&lt;br /&gt;
*: [[File:Arch_office365_pf_02.png|center|347px]]&lt;br /&gt;
* Click on ''Save''.&lt;br /&gt;
* Enable the option ''Apply changes to this public folder and all its subfolders.''&lt;br /&gt;
* Click on ''Save''.&lt;br /&gt;
* Click on ''Close'' after saving has been completed successfully.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Setting up the Archiving Process ===&lt;br /&gt;
* Log on to MailStore Client as MailStore Server administrator.&lt;br /&gt;
* Click on ''Archive Email''.&lt;br /&gt;
* From the ''Email Servers'' list in the ''Create Profile'' area of the ''Archive Email'' page, select ''Microsoft&amp;amp;nbsp;365'' to create a new archiving profile.&lt;br /&gt;
* A wizard opens to assist in specifying the archiving settings.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 pf 03.png|center|347px]]&lt;br /&gt;
* Select ''Public Folders'' and click on ''OK''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*; [[File:Microsoft 365 pf 04.png|center|347px]]&lt;br /&gt;
* Select the Microsoft&amp;amp;nbsp;365 credentials that you have created during the registration of MailStore Server with Microsoft&amp;amp;nbsp;365 from the ''Credentials'' drop-down list. You can also use the button (…) to access the [[Synchronizing_User_Accounts_with_Microsoft_365_(Modern_Authentication)#Creating_Credentials_in_MailStore_Server|Credential Manager]].&lt;br /&gt;
* In the ''Mailbox'' field, enter the primary email address of the user that has access to the public folders as described above.&lt;br /&gt;
* The value of the ''Target Folder'' box defines the top level folder below which the public folder hierarchy will be created in the target archive. Usually, you can leave this value to its default.&lt;br /&gt;
* Click on ''Test'' to verify that MailStore can access the public folders.&lt;br /&gt;
* Click on ''Next'' to continue.&lt;br /&gt;
*; [[File:Microsoft 365 pf 05.png|center|347px]]&lt;br /&gt;
* Adjust the settings for the [[Email_Archiving_with_MailStore_Basics#Archiving_Specific_Folders|List of Folders to be Archived]]. By default, all public folders that contain emails will be archived.&lt;br /&gt;
* If needed, adjust [[Email_Archiving_with_MailStore_Basics#Specifying_Filter_Criteria_for_Archiving|the filter]] and the [[Email_Archiving_with_MailStore_Basics#Deleting_Emails_after_Archiving|Deletion Rules]]. By default, no emails will be deleted from the public folders. The ''Timeout'' value only has to be adjusted in specific cases (e.g. with very slow network connections).&lt;br /&gt;
* Click on ''Next'' to continue.&lt;br /&gt;
*; [[File:Microsoft 365 pf 06.png|center|347px]]&lt;br /&gt;
* In the next step, select the archive of the user you have prepared in step 1.&lt;br /&gt;
* In the last step, specify a name for the archiving profile. After clicking ''Finish'' the archiving profile will be listed under ''Saved Profiles'' and can be run immediately or automatically if desired.&lt;br /&gt;
&lt;br /&gt;
[[de:E-Mail-Archivierung_von_Microsoft_365_(Modern_Authentication)]]&lt;br /&gt;
[[en:Archiving_Emails_from_Microsoft_365_(Modern_Authentication)]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7215</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7215"/>
		<updated>2022-11-02T12:32:56Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen uploaded a new version of File:Python-api-wrapper.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7214</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7214"/>
		<updated>2022-11-02T12:30:35Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen reverted File:Python-api-wrapper.zip to an old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7213</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7213"/>
		<updated>2022-11-02T12:29:42Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen reverted File:Python-api-wrapper.zip to an old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7212</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7212"/>
		<updated>2022-11-02T12:18:09Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen uploaded a new version of File:Python-api-wrapper.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7206</id>
		<title>File:Python-api-wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=File:Python-api-wrapper.zip&amp;diff=7206"/>
		<updated>2022-10-24T12:50:11Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Chansen uploaded a new version of File:Python-api-wrapper.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Privacy_policy&amp;diff=7181</id>
		<title>Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Privacy_policy&amp;diff=7181"/>
		<updated>2022-07-07T08:45:38Z</updated>

		<summary type="html">&lt;p&gt;Chansen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Click [https://www.opentext.com/about/privacy here] for privacy policy on our official website.&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Moving_the_Archive&amp;diff=7170</id>
		<title>Moving the Archive</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Moving_the_Archive&amp;diff=7170"/>
		<updated>2022-06-21T15:54:58Z</updated>

		<summary type="html">&lt;p&gt;Chansen: /* Moving the Archive to a New Machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is possible to move a single archive store, its components or the complete MailStore Server archive to a new hard-disk, machine or network share at any time. What is required to successfully move an archive is described in the following sections.&lt;br /&gt;
&lt;br /&gt;
== Moving an Entire Single Archive Store ==&lt;br /&gt;
To move an entire archive store to a different hard-disk or network share, follow the instructions below. The MailStore master database and all other archive stores remain unchanged.&lt;br /&gt;
&lt;br /&gt;
When moving an archive store to a network share, the information from the article [[Using Network Attached Storage (NAS)]] are also applicable.&lt;br /&gt;
&lt;br /&gt;
* Start the MailStore Client and log in as a MailStore user with administrative privileges.&lt;br /&gt;
* Navigate to ''Administrative Tools &amp;gt; Storage &amp;gt; Storage Locations''.&lt;br /&gt;
[[File:Tech_storageloc_01.png|center|550px]]&lt;br /&gt;
* Follow these steps for the archive store you want to move:&lt;br /&gt;
:* Make note of the status and the path on disk. You can find this information in the summary next to the archive store list.&lt;br /&gt;
:* Change the status to ''Disabled''.&lt;br /&gt;
:* In the file system, move the folder you've jotted down in the first step to the new location.&lt;br /&gt;
:* In the context menu or in the details pane, click on ''Edit...''&lt;br /&gt;
:* The ''Edit Archive Store Properties'' dialog opens.&lt;br /&gt;
:* Change the base directory to the new folder. If a network share is used, enter the UNC path of the share i.e. &amp;lt;code&amp;gt;\\computer\myshare\folder&amp;lt;/code&amp;gt;.&lt;br /&gt;
:* Click on ''Finish''.&lt;br /&gt;
:* Change the status of the archive store back to the one you've noted in the first step.&lt;br /&gt;
&lt;br /&gt;
== Moving Components of an Archive Store ==&lt;br /&gt;
In MailStore, archive stores always consist of the following three components:&lt;br /&gt;
{{Archive_Stores_Structure}}&lt;br /&gt;
These individual components can be moved to different physical storages. For example, you can move the database with folder information and meta data as well as the search index on a fast storage to accelerate folder operations and the MailStore search while leaving the email content files on a slower storage.&amp;lt;br/&amp;gt;&lt;br /&gt;
To move parts of an archive store to another hard-disk or network share, follow the instructions below. The MailStore master database and all other archive stores remain unchanged.&lt;br /&gt;
&lt;br /&gt;
When moving an archive store to a network share, the information from the article [[Using Network Attached Storage (NAS)]] are also applicable.&lt;br /&gt;
&lt;br /&gt;
* Start the MailStore Client and log in as a MailStore user with administrative privileges.&lt;br /&gt;
* Navigate to ''Administrative Tools &amp;gt; Storage &amp;gt; Storage Locations''.&lt;br /&gt;
* Follow these steps for the archive store you want to move parts of:&lt;br /&gt;
:* Make note of the status. You can find this information in the summary next to the archive store list.&lt;br /&gt;
:* [[File:Tech_storageloc_03.png|right|350px]]Change the status to ''Disabled''.&lt;br /&gt;
:* In the context menu or in the details pane, click on ''Edit...''&lt;br /&gt;
:* The ''Edit Archive Store Properties'' dialog opens.&lt;br /&gt;
:* Enable the option ''Use different directories for database, content and search index''. The folders of the individual archive store components are shown.&lt;br /&gt;
:* In the file system, move the folders to their new locations.&lt;br /&gt;
:* In the dialog, change the base directories to the new folders. If network shares are used, enter the UNC paths of the shares i.e. &amp;lt;code&amp;gt;\\computer\myshare\folder&amp;lt;/code&amp;gt;.&lt;br /&gt;
:* Click on ''Finish''.&lt;br /&gt;
:* Change the status of the archive store back to the one you've noted in the first step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Moving the Archive to a Different Hard-Disk ==&lt;br /&gt;
To move a MailStore Server installation, where all archive stores are located underneath the directory of the master database (default: &amp;lt;code&amp;gt;C:\MailArchive&amp;lt;/code&amp;gt;), to a different hard-disk, follow the steps below. The MailStore program directory remains unchanged. &lt;br /&gt;
&lt;br /&gt;
* Stop the MailStore Server service through the [[MailStore Server Service Configuration]].&lt;br /&gt;
* Move the master database directory (default: &amp;lt;code&amp;gt;C:\MailArchive&amp;lt;/code&amp;gt;) and all subdirectories to the new location. The folder structure must remain unchanged.&lt;br /&gt;
* Use the MailStore Server Service Configuration to change the directory of the &amp;quot;Master Database&amp;quot; to the new location.&lt;br /&gt;
* Start the MailStore Server service again.&lt;br /&gt;
&lt;br /&gt;
'''Notice:''' Please be aware that the throughput of an external hard-disk may have a negative impact on the performance of MailStore Server.&lt;br /&gt;
&lt;br /&gt;
'''Please note:''' Archive stores that are not stored in a relative path to the master database may have to be re-attached or their paths edited after moving the archive. Details about managing archive stores are available in chapter [[Storage Locations]] of the MailStore Server manual.&lt;br /&gt;
&lt;br /&gt;
== Moving the Archive to a New Machine ==&lt;br /&gt;
To move a MailStore Server archive, including all users, settings and emails, to a new machine, follow these steps:&lt;br /&gt;
{{#ev:youtube|https://youtu.be/3XZgBhFgya0|350|center|''Tech Tip: How to Move MailStore Server''}}&lt;br /&gt;
* Stop the MailStore Server service on the current machine through the [[MailStore Server Service Configuration]].&lt;br /&gt;
* Move the master database directory (default: &amp;lt;code&amp;gt;C:\MailArchive&amp;lt;/code&amp;gt;), all of its subdirectories and all archive stores that exist on the current machine to the new machine. The folder structure must remain unchanged.&lt;br /&gt;
* Uninstall MailStore Server on the current machine.&lt;br /&gt;
* Transfer your MailStore Server license to the new machine through our [https://my.mailstore.com/TransferLicense license portal].&lt;br /&gt;
* [https://my.mailstore.com/downloads Install MailStore Server] on the new machine. You can install the latest version. Please note the [[Update_Notices_for_MailStore_Server|update notes]].&lt;br /&gt;
* If the location of the master database directory to use does not match the default path &amp;lt;code&amp;gt;C:\MailArchive&amp;lt;/code&amp;gt;, run the MailStore Server Service Configuration, stop the MailStore Server service and change the directory of the &amp;quot;Master Database&amp;quot; to the new location.&lt;br /&gt;
* If you have any client-sided scheduled tasks and are using your own SSL certificate, export the SSL certificate and private key (usually packaged in a PKCS#12 file) which is used by MailStore Server from the machines certificate store and import it to the same location on the new machine. Refer to the Windows help for further information about managing SSL certificates.&lt;br /&gt;
* In case the new installation is using the same product key than the old installation and the product key is used as recovery key, nothing has to be done in regards to [[MailStore_Server_Service_Configuration#Security_and_Encryption|archive security]]. In case a different product key is used on the new machine or the archive was secured with a [[MailStore_Server_Service_Configuration#Set_Recovery_Key|generated random value]] the archive must be [[MailStore_Server_Service_Configuration#Reinitialize_Archive_Encryption|reinitialized]] before the first start.&lt;br /&gt;
* Start the MailStore Server service on the new machine if it's not running.&lt;br /&gt;
&lt;br /&gt;
'''Please note:''' Archive stores that are not stored in a relative path to the master database may have to be re-attached or their paths edited after moving the archive. Details about managing archive stores are available in chapter [[Storage Locations]] of the MailStore Server manual.&lt;br /&gt;
&lt;br /&gt;
== Moving the Archive to a Network Share ==&lt;br /&gt;
To move a MailStore Server archive, including all users, settings and emails, to a network share, follow the instructions below. The information from the article [[Using Network Attached Storage (NAS)]] are also applicable. The MailStore program directory remains unchanged.&lt;br /&gt;
&lt;br /&gt;
* Stop the MailStore Server service through the [[MailStore Server Service Configuration]].&lt;br /&gt;
* Create a new share on the NAS-system.&lt;br /&gt;
* Either grant the MailStore Server machine account or a user read-/write-permissions on that newly created share.&lt;br /&gt;
* If you granted the permissions to a user object, configure MailStore Server as described in [[Using Network Attached Storage (NAS)]].&lt;br /&gt;
* Move all files from the original archive folder to the network share.&lt;br /&gt;
* Use the MailStore Server Service Configuration to set the path to the MailStore Server Master-Database to the UNC path of the share, i.e. &amp;lt;code&amp;gt;\\computer\myshare&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Start the MailStore Server service again.&lt;br /&gt;
&lt;br /&gt;
'''Please note:''' Archive stores that are not stored in a relative path to the master database may have to be re-attached or their paths edited after moving the archive. Details about managing archive stores are available in chapter [[Storage Locations]] of the MailStore Server manual.&lt;br /&gt;
&lt;br /&gt;
== Moving an Archive Store to a Different Installation ==&lt;br /&gt;
To move an archive store to a different installation, follow the instructions below. The product key or the recovery key of the installation where the archive store is coming from is required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;'''Please note:''' The archive store must be on version 7 or higher, so that it can move to a different archive. If that is not the case, the archive store and the associated Master Database have to be loaded once with  MailStore Server 7 or higher, because then some necessary database upgrades will be performed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Start the MailStore Client and log in as a MailStore user with administrative privileges on the installation where the archive store is still attached to.&lt;br /&gt;
* Navigate to ''Administrative Tools &amp;gt; Storage &amp;gt; Storage Locations''.&lt;br /&gt;
* [[Storage_Locations#Detaching|Detach]] the archive store you want to move.&lt;br /&gt;
* Move the folder or folders of the archive store to the new location.&lt;br /&gt;
* Start the MailStore Client and log in as a MailStore user with administrative privileges on the installation where the archive store will be attached to.&lt;br /&gt;
* Navigate to ''Administrative Tools &amp;gt; Storage &amp;gt; Storage Locations''.&lt;br /&gt;
* [[Storage_Locations#Attaching|Attach]] the moved archive store.&lt;br /&gt;
&lt;br /&gt;
[[de:Umziehen des Archivs]]&lt;br /&gt;
[[en:Moving the Archive]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=Google_Workspace_Integration&amp;diff=7163</id>
		<title>Google Workspace Integration</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=Google_Workspace_Integration&amp;diff=7163"/>
		<updated>2022-05-14T10:31:50Z</updated>

		<summary type="html">&lt;p&gt;Chansen: /* Create OAuth 2.0 Client for User Authentication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Synchronizing User Accounts with Google Workspace}}&lt;br /&gt;
{{Directory Services Preamble|Google Workspace account|Google Workspace}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=msnote&amp;gt;Please note that on December 16th 2019, [https://go.mailstore.com/?lang=en&amp;amp;target=gsuite-lsa-restriction Google announced] to limit access to Google Workspace accounts for less secure apps in the future.  This affects any MailStore Server version prior to 13, which therefore will no longer be able to authenticate users against Google Workspace when trying to log into MailStore Server.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In MailStore Server 13, support for modern authentication methods via OAuth 2.0 &amp;amp; OpenID Connect as per Google's recommendation was introduced. Although MailStore Server 13 still comes with support for IMAP-based authentication, this document only covers the setup using modern authentication methods as required by Google in the future.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prerequisites, Recommendations, Limitations ==&lt;br /&gt;
* To comply with Google's requirements for ''Authorized redirect URIs'' of  OAuth 2.0 clients, MailStore Server must be accessible via an URI that ends with a public top-level domain. This does not necessarily mean that it must  indeed be accessible from the Internet. Google uses the list from https://publicsuffix.org for validation.&lt;br /&gt;
* For best user experience, the certificate used by MailStore Server should be trusted by all client and the used web browsers. Using a certificate that is signed by an trusted certificate authority or [[Using_Lets_Encrypt_Certificates|using Let's Encrypt certificates]] is highly recommended.&lt;br /&gt;
* If users are supposed to login to MailStore Server from outside the organization's network without a VPN, using [[Accessing_the_Archive_with_the_MailStore_Client_software|MailStore Client]], [[Accessing_the_Archive_with_the_Microsoft_Outlook_integration|MailStore Outlook Add-in]] or the [[Accessing_the_Archive_with_MailStore_Web_Access|Web Access]], the URIs mentioned in this article must be resolvable via DNS on the Internet and port-forwardings to the MailStore Server computer must be set up on the firewall or router if necessary. &lt;br /&gt;
* When using Google to authenticate users at login, [[Accessing_the_Archive_via_Integrated_IMAP_Server|accessing the archive via IMAP]] is not possible for technical reasons.&lt;br /&gt;
&lt;br /&gt;
== Register Project with Google ==&lt;br /&gt;
Regardless of whether own or third-party applications such as MailStore Server are supposed to interact with a Google Workspace account through Google APIs, they must be registered as a project with Google first. This is necessary to ensure that access by external applications is limited to a necessary  minimum and that each application uses its own set of credentials to authenticate with Google.&lt;br /&gt;
&lt;br /&gt;
=== Create New Project ===&lt;br /&gt;
To register a project  for MailStore Server with Google, proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* Go to the [https://console.cloud.google.com Google Cloud Platform Console].&lt;br /&gt;
* If prompted, login using a Google account of you Google Workspace organization. Logging in with a user that has admin privileges is highly recommended. &lt;br /&gt;
* If no project exists, click ''Create Project'' on the dashboard. Otherwise, open the project list by clicking on the project drop-down in the header bar and click ''New project''.&lt;br /&gt;
* Type in a meaningful name into the ''Project name'' field, e.g. &amp;lt;tt&amp;gt;MailStore Server&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Verify that ''Organization'' matches the desired organization and adjust the ''Location'' if needed.&lt;br /&gt;
* Click on ''Create''.&lt;br /&gt;
&lt;br /&gt;
Once the project has been created, make sure that it is selected in the project drop-down list before proceeding. &lt;br /&gt;
&lt;br /&gt;
==== Add API Libraries ====&lt;br /&gt;
* Open the ''Navigation menu'' (☰) and select ''APIs &amp;amp; Services'' &amp;gt; ''Library''.&lt;br /&gt;
* In the ''API Library'', search and enable the following APIs and services:&lt;br /&gt;
*: &amp;lt;tt&amp;gt;Admin SDK API&amp;lt;/tt&amp;gt;&lt;br /&gt;
*: &amp;lt;tt&amp;gt;Gmail API&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Customize Consent Screen ====&lt;br /&gt;
* Open the ''Navigation menu'' (☰) and select ''APIs &amp;amp; Services'' &amp;gt; ''OAuth consent screen''.&lt;br /&gt;
* Under ''User Type'' select ''Internal''.&lt;br /&gt;
* Click ''Create''.&lt;br /&gt;
* Enter a meaningful name into the ''App name'' field, e.g. &amp;lt;tt&amp;gt;MailStore Server&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Fill out the other fields according to the policies of your organization.&lt;br /&gt;
* Click ''Save and Continue''.&lt;br /&gt;
* In the next steps, directly click ''Save and Continue'' again as MailStore Server does not need users to authorize any scopes.&lt;br /&gt;
&lt;br /&gt;
=== Create Service Account ===&lt;br /&gt;
A service account is required for MailStore Server to authenticate with Google and request authorization to use certain Google APIs for synchronizing users and accessing mailboxes. Follow these steps to create such a service account.&lt;br /&gt;
&lt;br /&gt;
* Open the ''Navigation menu'' (☰) and select ''APIs &amp;amp; Services'' &amp;gt; ''Credentials''.&lt;br /&gt;
* Click ''+ Create Credentials'' and select ''Service account'' from the drop-down list.&lt;br /&gt;
* On the ''Create service account'' page, enter a name for the service account, e.g. &amp;lt;tt&amp;gt;MailStore Server Service&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* You can leave the the service account id at default settings or customize it.&lt;br /&gt;
* Enter a description such as: &amp;lt;tt&amp;gt;Service account for MailStore Server to synchronize users and access mailboxes&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Click ''Create and Continue''.&lt;br /&gt;
* The service account does not require permissions on project level, therefore do not select a role. Also, users do not need access to the service account, so no changes are needed in the ''Grant users access to this service account'' step.&lt;br /&gt;
* Click ''Done''.&lt;br /&gt;
* In the list of service accounts that is now displayed, click on the newly created service account to open its properties.&lt;br /&gt;
* Under ''Keys'' click on ''Add Key'' and select ''Create new key''.&lt;br /&gt;
* Select ''JSON'' as key type and click ''Create''.&lt;br /&gt;
* The JSON file will be downloaded automatically. Save the JSON file in a secure location as it allows access to cloud resources of your organization.&lt;br /&gt;
* Click ''Close''.&lt;br /&gt;
* Back under ''Details'', click ''Show Advanced Settings''.&lt;br /&gt;
* In the ''Domain-wide Delegation'' section, copy the ''Client ID'' to the clipboard.&lt;br /&gt;
* Open the [https://admin.google.com/ Google Workspace Admin Console] by clicking on the button and log in with your Google Workspace domain admin credentials.&lt;br /&gt;
* Open the ''Navigation menu'' (☰) and select ''Security'' &amp;gt; ''Access and data control'' &amp;gt; ''API controls''.&lt;br /&gt;
* Under ''Domain wide delegation'', click ''Manage domain wide delegation''.&lt;br /&gt;
* On the ''Domain-wide delegation'' page, click ''Add new''.&lt;br /&gt;
* Copy the ''Client ID'' of the OAuth 2.0 Client that is linked with the service account from the clipboard.&lt;br /&gt;
* Under ''OAuth Scope'', add the following scopes:&lt;br /&gt;
*: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;https://mail.google.com/, https://www.googleapis.com/auth/admin.directory.group.readonly, https://www.googleapis.com/auth/admin.directory.user.readonly&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click ''Authorize''.&lt;br /&gt;
&lt;br /&gt;
=== Create OAuth 2.0 Client for User Authentication ===&lt;br /&gt;
To allow users to log in to MailStore Server by authenticating with Google using the OpenID Connect mechanism, another OAuth 2.0 client must be created as described below.&lt;br /&gt;
&lt;br /&gt;
* Go to the [https://console.cloud.google.com Google Cloud Platform Console].&lt;br /&gt;
* Open the ''Navigation menu'' (☰) and select ''APIs &amp;amp; Services'' &amp;gt; ''Credentials''.&lt;br /&gt;
* Click ''+ Create Credentials'' and select ''OAuth client ID'' from the drop-down list.&lt;br /&gt;
* Select ''Web application'' as ''Application type''.&lt;br /&gt;
* Enter a ''Name'', e.g. &amp;lt;tt&amp;gt;MailStore Server OpenID Connect&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Click ''+ Add URI'' under ''Authorized redirect URIs''.&lt;br /&gt;
* Enter the URI that is reachable by clients in the ''URIs'' field using the the following scheme:&lt;br /&gt;
*:&amp;lt;tt&amp;gt;https://&amp;lt;fqdn&amp;gt;[:&amp;lt;port&amp;gt;]/oidc/signin&amp;lt;/tt&amp;gt;&lt;br /&gt;
*; with the following components:&lt;br /&gt;
*: '''https://'''&amp;lt;br/&amp;gt;Specifying the protocol ''https://'' is mandatory. To prevent certificate warnings later at login, the [[MailStore_Server_Service_Configuration#Certificate|certificate used by MailStore Server]] must be trusted by all client and the used web browsers. &lt;br /&gt;
*: '''FQDN'''&amp;lt;br/&amp;gt;The fully qualified domain name of the MailStore Server computer, e.g. &amp;lt;tt&amp;gt;mailstore.example.com&amp;lt;/tt&amp;gt;. This must be resolvable from all clients, from where users are supposed to log in to MailStore Server.&lt;br /&gt;
*: '''Port'''&amp;lt;br/&amp;gt;The TCP port of MailStore Web Access (default: &amp;lt;tt&amp;gt;8462&amp;lt;/tt&amp;gt;). This must match the port configured in the [[MailStore Server Service Configuration#Services|MailStore Server Service Configuration]] at ''Network Settings'' &amp;gt; ''Services'' &amp;gt; ''MailStore Web Access / Outlook Add-in (HTTPS)''. The TCP port is only required if it is different from the default port of the HTTPS protocol (443).&lt;br /&gt;
*: '''/oidc/signin'''&amp;lt;br/&amp;gt;The path at which MailStore Server expects to receive the authentication response from Google via the web browser.&lt;br /&gt;
* Click ''Create'' to finish.&lt;br /&gt;
* Copy the client ID and client secret from the ''Your Client ID'' and ''Your Client Secret'' fields to a safe place (e.g. password safe or similar) and click ''OK''.&lt;br /&gt;
&amp;lt;div class=&amp;quot;resp-table&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%;&amp;quot;&lt;br /&gt;
|+ Examples of valid redirect URIs&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:80px;&amp;quot; | Product&lt;br /&gt;
! style=&amp;quot;width:80px;&amp;quot; | FQDN&lt;br /&gt;
! style=&amp;quot;width:40px;&amp;quot; | Port&lt;br /&gt;
! Resulting Redirect URI&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| MailStore Server&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| mailstore.example.com&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 8462&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://mailstore.example.com:8462/oidc/signin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Redirect URI with fully qualified domain name and MailStore Web Access default port.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| MailStore Server&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| mailstore.example.com&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 443&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://mailstore.example.com/oidc/signin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the HTTPS default port 443 is used for MailStore Web Access or as source of a port forwarding rule on a firewall, specifying the port as part of the redirect URI can be omitted.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| MailStore SPE&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| archive.example.com&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 443&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://archive.example.com/&amp;lt;instanceid&amp;gt;/oidc/signin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The ''instanceid'' of the instance is part of the Redirect URI. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure MailStore Server ==&lt;br /&gt;
After the project has been successfully set up on the Google side, MailStore Server can now be configured to synchronize and authenticate users with Google Workspace.&lt;br /&gt;
&lt;br /&gt;
{{Directory Services Accessing Configuration|Google Workspace|gapps_sync_01.png}}&lt;br /&gt;
&lt;br /&gt;
=== Connection ===&lt;br /&gt;
For synchronization, MailStore Server requires information on how to connect to the Google Workspace.&lt;br /&gt;
&lt;br /&gt;
* '''Key ID'''&amp;lt;br/&amp;gt;To import the private key, select the JSON file hat has been generated by Google for the service account in the [[#Create_Service_Account|Create Service Account]] step.&lt;br /&gt;
* '''Service Account'''&amp;lt;br/&amp;gt;The service account is determined automatically from the JSON file.&lt;br /&gt;
* '''User Name'''&amp;lt;br/&amp;gt;The email address of a Google Workspace Administrator (e.g. admin@example.com).&lt;br /&gt;
&lt;br /&gt;
=== User Database Synchronization ===&lt;br /&gt;
After configuring the connection settings as described above, you can specify filter criteria for the Google Workspace synchronization in this section.&lt;br /&gt;
&lt;br /&gt;
* '''Sync only these groups'''&amp;lt;br/&amp;gt;Choose one or several Google Workspace groups if you only want their members to be created as MailStore Server users. That way it's possible to exclude certain users from being synchronized to MailStore Server.&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
The authentication settings define how MailStore Server should authenticate users at login, that have been synchronized from Google Workspace.&lt;br /&gt;
&lt;br /&gt;
* '''Method'''&amp;lt;br/&amp;gt;Ensure that ''OpenID Connect'' is selected. As mentioned in the introduction, the ''IMAP'' option is only available for backward compatibility.&lt;br /&gt;
* '''Client ID'''&amp;lt;br/&amp;gt;Enter the client ID from the [[#Create_OAuth_2.0_Client_for_User_Authentication|Create OAuth_2.0 Client…]] step.&lt;br /&gt;
* '''Client Secret'''&amp;lt;br/&amp;gt;Enter the client secret from the [[#Create_OAuth_2.0_Client_for_User_Authentication|Create OAuth_2.0 Client…]] step. &lt;br /&gt;
* '''Redirect URI'''&amp;lt;br/&amp;gt;Enter the same redirect URI as defined in the [[#Create_OAuth_2.0_Client_for_User_Authentication|Create OAuth 2.0 Client…]] step .&lt;br /&gt;
&lt;br /&gt;
{{Directory Services Options|Google Workspace Account}}&lt;br /&gt;
{{Directory Services Assign Default Privileges|Google Workspace Account}}&lt;br /&gt;
{{Directory Services Run Synchronization|Google Workspace Account}}&lt;br /&gt;
[[File:ApplicationIntegration_sync_02.png|450px|center]]&lt;br /&gt;
&lt;br /&gt;
{{Directory Services Test Authentication}}&lt;br /&gt;
[[de:Google Workspace-Integration]]&lt;br /&gt;
[[en:Google Workspace Integration]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=MailStore_Help&amp;diff=7160</id>
		<title>MailStore Help</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=MailStore_Help&amp;diff=7160"/>
		<updated>2022-05-04T11:01:24Z</updated>

		<summary type="html">&lt;p&gt;Chansen: /* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{DISPLAYTITLE:{{Product Name}} Help}}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;3&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
== Email Archiving with {{Product Name}} ==&lt;br /&gt;
In addition to the latest version of the {{Product Name}} manual, you can find important articles and instructions here, which will help you to set up email archiving. Please do not hesitate to contact our support team if you have any further questions.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[Quick Start Guide]]&lt;br /&gt;
* [[System Requirements]]&lt;br /&gt;
* [[Choosing the Right Archiving Strategy]]&lt;br /&gt;
&lt;br /&gt;
== What's New ==&lt;br /&gt;
* [https://go.mailstore.com?product=MailStore%20Server&amp;amp;target=changelog&amp;amp;lang=en Changelog]&lt;br /&gt;
* [[Update Notices for MailStore Server|Update Notices]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|&lt;br /&gt;
== Manual ==&lt;br /&gt;
* [[Installation]]&lt;br /&gt;
* [[Archiving Email]]&lt;br /&gt;
* [[Accessing the Archive]]&lt;br /&gt;
* [[Exporting Email]]&lt;br /&gt;
* [[Administration]]&lt;br /&gt;
* [[MailStore Server Service Configuration]]&lt;br /&gt;
* [https://help.mailstore.com/en/gateway MailStore Gateway Help]&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
== Implementation Guides ==&lt;br /&gt;
{{:Implementation}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50% |&lt;br /&gt;
== Articles ==&lt;br /&gt;
==== Deployment ====&lt;br /&gt;
* [[MailStore Client Deployment|MailStore Client]]&lt;br /&gt;
* [[MailStore Outlook Add-in Deployment|MailStore Outlook Add-in]]&lt;br /&gt;
==== Operation ====&lt;br /&gt;
* [[Backup and Restore]]&lt;br /&gt;
* [[Maintenance and Repair]]&lt;br /&gt;
* [[Monitoring]]&lt;br /&gt;
==== Security ====&lt;br /&gt;
* [[Security Advisories]]&lt;br /&gt;
* [[Enhancing SSL Security]]&lt;br /&gt;
* [[Notes on Antivirus Software]]&lt;br /&gt;
* [[Using Your Own SSL Certificate]]&lt;br /&gt;
* [[Using_Lets_Encrypt_Certificates|Using Let's Encrypt Certificates]]&lt;br /&gt;
==== Automation &amp;amp; Scripting ====&lt;br /&gt;
* [[Scripting|Automation with scripts]]&lt;br /&gt;
* [[Bulk Import of Email Files]]&lt;br /&gt;
* [[Implementing an Application Integration Server]]&lt;br /&gt;
==== How-to ====&lt;br /&gt;
* [[Changing Archiving from Microsoft Exchange Server to Microsoft 365]]&lt;br /&gt;
* [[Moving the Archive]]&lt;br /&gt;
* [[Using Network Attached Storage (NAS)]]&lt;br /&gt;
* [[Verifying a Signed Export]]&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
In the [https://cs.mailstore.com/index.php?/Knowledgebase/List/Index/8/en knowledgebase] of our [https://cs.mailstore.com/ Customer Service Centers] you can find many answers to the most often asked questions or reoccurring error messages. Detailed troubleshooting instructions are also available there.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Administration API ==&lt;br /&gt;
The Administration API extends the management capabilities of {{Product Name}}  by providing command-line as well as HTTP based access to all management functions. This allows to fully automate the administration of {{Product Name}} via scripts or even integration into centralized management solutions. For an even faster development, example API libraries for different scripting and programming languages are provided. &lt;br /&gt;
* [[MailStore Server Management Shell]]&lt;br /&gt;
* [[Administration API - Using the API|Using the API]]&lt;br /&gt;
* [[Administration API - Function Reference|Function Reference]]&lt;br /&gt;
==== Example Implementations of API Libraries ====&lt;br /&gt;
* [[PowerShell API Wrapper Tutorial|PowerShell]]&lt;br /&gt;
* [[Python API Wrapper Tutorial|Python]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
== Tech Tip Videos ==&lt;br /&gt;
In our [https://youtube.com/playlist?list=PLGTSLnfosYvSkdccnpMDv5fjqYhJ_asQp Tech Tip Videos on Youtube] we provide valuable information and useful insights from our technical support team. Our technical support engineers will showcase specific features of MailStore Server and feature common use cases of our clients.&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
* [https://www.mailstore.com/en/products/mailstore-server/downloads/ MailStore Setup Files]&lt;br /&gt;
* [http://help.mailstore.com/manual/server13-manual-en.pdf MailStore Server 13 Manual]&lt;br /&gt;
==== Manuals of Older Versions ====&lt;br /&gt;
* [http://help.mailstore.com/manual/server12-manual-en.pdf MailStore Server 12]&lt;br /&gt;
* [http://help.mailstore.com/manual/server11-manual-en.pdf MailStore Server 11]&lt;br /&gt;
* [http://help.mailstore.com/manual/server10-manual-en.pdf MailStore Server 10]&lt;br /&gt;
* [http://help.mailstore.com/manual/server9-manual-en.pdf MailStore Server 9]&lt;br /&gt;
* [http://help.mailstore.com/manual/server8-manual-en.pdf MailStore Server 8]&lt;br /&gt;
* [http://help.mailstore.com/manual/server7-manual-en.pdf MailStore Server 7]&lt;br /&gt;
* [http://help.mailstore.com/manual/server6-manual-en.pdf MailStore Server 6]&lt;br /&gt;
* [http://help.mailstore.com/manual/server5-manual-en.pdf MailStore Server 5]&lt;br /&gt;
==== Active Directory Group Policy Templates ====&lt;br /&gt;
* [[Media:MailStore_ADMX.zip|ADMX-Template]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[de:MailStore Hilfe]]&lt;br /&gt;
[[en:MailStore Help]]&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=MediaWiki:Sidebar-banner3&amp;diff=7159</id>
		<title>MediaWiki:Sidebar-banner3</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=MediaWiki:Sidebar-banner3&amp;diff=7159"/>
		<updated>2022-05-04T09:29:38Z</updated>

		<summary type="html">&lt;p&gt;Chansen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Read in our &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/blog/mailstore-v22-1-usability-security-compliance/&amp;quot; target_blank&amp;quot;&amp;gt;blog&amp;lt;/a&amp;gt; about the most important changes and updates in MailStore 22.1. The complete list of technical changes can be read in the &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/products/mailstore-server/changelog/&amp;quot; target_blank&amp;gt;changelog&amp;lt;/a&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=MediaWiki:Sidebar-banner3&amp;diff=7158</id>
		<title>MediaWiki:Sidebar-banner3</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=MediaWiki:Sidebar-banner3&amp;diff=7158"/>
		<updated>2022-05-04T09:11:11Z</updated>

		<summary type="html">&lt;p&gt;Chansen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Read in our &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/blog/mailstore-v22-1-usability-security-compliance/&amp;quot; target_blank&amp;quot;&amp;gt;blog&amp;lt;/a&amp;gt; about the most important changes and updates in MailStore Server 22.1. The complete list of technical changes can be read in the &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/products/mailstore-server/changelog/&amp;quot; target_blank&amp;gt;changelog&amp;lt;/a&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
	<entry>
		<id>https://help.mailstore.com/en/server/index.php?title=MediaWiki:Sidebar-banner3&amp;diff=7157</id>
		<title>MediaWiki:Sidebar-banner3</title>
		<link rel="alternate" type="text/html" href="https://help.mailstore.com/en/server/index.php?title=MediaWiki:Sidebar-banner3&amp;diff=7157"/>
		<updated>2022-05-04T08:32:40Z</updated>

		<summary type="html">&lt;p&gt;Chansen: Created page with &amp;quot;Read in our &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/blog/mailstore-v22-1-usability-security-compliance/&amp;quot; target_blank&amp;quot;&amp;gt;blog&amp;lt;/a&amp;gt; about the most important changes and updates in M...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Read in our &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/blog/mailstore-v22-1-usability-security-compliance/&amp;quot; target_blank&amp;quot;&amp;gt;blog&amp;lt;/a&amp;gt; about the most important changes and updates in MailStore Server 22.1. The complete list of technical changes can be read in the &amp;lt;a href=&amp;quot;https://www.mailstore.com/en/blog/mailstore-v22-1-usability-security-compliance/&amp;quot; target_blank&amp;gt;changelog&amp;lt;/a&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Chansen</name></author>
	</entry>
</feed>