diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java
index 4319bfdc0324100558afe599c81f95cd05bc3d88..fbefdbac2a94cede8c3a41e174ea4685725fa9cc 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java
@@ -26,6 +26,7 @@ package ch.ethz.sis.openbis.generic.server.dss.plugins;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -52,6 +53,9 @@ import java.util.StringTokenizer;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.mail.util.ByteArrayDataSource;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -97,6 +101,7 @@ import ch.ethz.sis.openbis.generic.server.dss.plugins.ResourceListParserData.Pro
 import ch.ethz.sis.openbis.generic.server.dss.plugins.ResourceListParserData.SampleWithConnections;
 import ch.ethz.sis.openbis.generic.shared.entitygraph.EntityGraph;
 import ch.ethz.sis.openbis.generic.shared.entitygraph.Node;
+import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
 import ch.systemsx.cisd.common.concurrent.ITaskExecutor;
 import ch.systemsx.cisd.common.concurrent.ParallelizedExecutor;
 import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
@@ -105,6 +110,8 @@ import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.common.http.JettyHttpClientFactory;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.common.mail.EMailAddress;
+import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.common.maintenance.IMaintenanceTask;
 import ch.systemsx.cisd.common.parser.MemorySizeFormatter;
 import ch.systemsx.cisd.common.spring.HttpInvokerUtils;
@@ -196,13 +203,16 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
 
     private static final String DEFAULT_LAST_SYNC_TIMESTAMP_FILE = "last-sync-timestamp-file.txt";
 
-    private static final String HARVESTER_LAST_SYNC_TIMESTAMP_FILE = "last-sync-timestamp-file";
+    private static final String HARVESTER_LAST_SYNC_TIMESTAMP_FILE_PROPERTY_NAME = "last-sync-timestamp-file";
 
+    private static final String EMAIL_ADDRESSES_PROPERTY_NAME = "email-addresses";
     
     private static final String DEFAULT_DATA_SOURCE_SECTION = "DataSource1";
 
     private static final String HARVESTER_CONFIG_FILE_NAME = "harvester-config-file";
 
+    private static final String SEPARATOR = ",";;
+
     private File lastSyncTimestampFile;
 
     private File newLastSyncTimeStampFile;
@@ -223,6 +233,10 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
 
     private SyncConfig config = null;
 
+    private IMailClient mailClient;
+
+    private Set<EMailAddress> emailAddresses;
+
     private void initializePluginProperties()
     {
         config = new SyncConfig();
@@ -293,7 +307,7 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
 
     private List<String> extractSpaces(String spaces)
     {
-        StringTokenizer st = new StringTokenizer(spaces, ",");
+        StringTokenizer st = new StringTokenizer(spaces, SEPARATOR);
         
         List<String> harvesterSpaceList =  new ArrayList<String>();
         while(st.hasMoreElements()) {
@@ -543,6 +557,7 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         storeRoot = new File(DssPropertyParametersUtil.loadServiceProperties().getProperty(PluginTaskInfoProvider.STOREROOT_DIR_KEY));
         service = ServiceProvider.getOpenBISService();
         context = new DataSetProcessingContext(null, null, null, null, null, null);
+        mailClient = ServiceProvider.getDataStoreService().createEMailClient();
 
         String configFileProperty = properties.getProperty(HARVESTER_CONFIG_FILE_PROPERTY_NAME);
 
@@ -760,9 +775,28 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         } catch (Exception e)
         {
             operationLog.error("Sync failed: " + e.getMessage());
+            DataSource dataSource = createDataSource("/Users/gakin/Documents/sync.log");
+            for (EMailAddress recipient : emailAddresses)
+            {
+                mailClient.sendEmailMessageWithAttachment("Synchronization failed",
+                        "Hi, the syncronization failed. See the attached file for details.",
+                        "", new DataHandler(
+                                dataSource), null, null, recipient);
+            }
+
         }
     }
 
+    private DataSource createDataSource(final String filePath)
+    {
+        try
+        {
+            return new ByteArrayDataSource(new FileInputStream(filePath), "text/plain");
+        } catch (IOException ex)
+        {
+            throw CheckedExceptionTunnel.wrapIfNecessary(ex);
+        }
+    }
     private void readConfiguration() throws IOException
     {
         ConfigReader reader = new ConfigReader(harvesterConfigFile);
@@ -783,7 +817,8 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         config.setHarvesterSpaces(reader.getString(DEFAULT_DATA_SOURCE_SECTION, HARVESTER_SPACES_PROPERTY_NAME, null));
         config.setDataSourcePrefix(reader.getString(DEFAULT_DATA_SOURCE_SECTION, DATA_SOURCE_PREFIX_PROPERTY_NAME, null));
         config.setHarvesterTempDir(reader.getString(DEFAULT_DATA_SOURCE_SECTION, HARVESTER_TEMP_DIR_PROPERTY_NAME, "targets/store"));
-        config.setLastSyncTimestampFileName(reader.getString(DEFAULT_DATA_SOURCE_SECTION, HARVESTER_LAST_SYNC_TIMESTAMP_FILE,
+        config.setEmailAddresses(reader.getString(DEFAULT_DATA_SOURCE_SECTION, EMAIL_ADDRESSES_PROPERTY_NAME, null));
+        config.setLastSyncTimestampFileName(reader.getString(DEFAULT_DATA_SOURCE_SECTION, HARVESTER_LAST_SYNC_TIMESTAMP_FILE_PROPERTY_NAME,
                 DEFAULT_LAST_SYNC_TIMESTAMP_FILE));
 
 
@@ -791,9 +826,23 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         lastSyncTimestampFile = new File(fileName);
         newLastSyncTimeStampFile = new File(fileName + ".new");
 
+        emailAddresses = getEMailAddresses();
+
         config.printConfig();
     }
 
+    private Set<EMailAddress> getEMailAddresses()
+    {
+        String[] tokens =
+                config.getEmailAddresses().split(SEPARATOR);
+        Set<EMailAddress> addresses = new HashSet<EMailAddress>();
+        for (String token : tokens)
+        {
+            addresses.add(new EMailAddress(token.trim()));
+        }
+        return addresses;
+    }
+
     private void processDeletions(ResourceListParserData data)
     {
         String sessionToken = ServiceProvider.getOpenBISService().getSessionToken();
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java
index 9271bb6e30f2bcc86ce55aee5dfd13dcfcbb1dec..a703de5df9f241e789f283005538cbad3fab593a 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java
@@ -179,4 +179,16 @@ class SyncConfig
     private String harvesterSpaces;
 
     private String harvesterTempDir;
+
+    private String emailAddresses;
+
+    public String getEmailAddresses()
+    {
+        return emailAddresses;
+    }
+
+    public void setEmailAddresses(String emailAddresses)
+    {
+        this.emailAddresses = emailAddresses;
+    }
 }