diff --git a/rest/index.php b/rest/index.php
index 6563d43e759fd375331a6e22ef7678c13a76e7c2..36dae4ced8e48f8f002a3c6d4c7cde9616dd8b13 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -530,10 +530,10 @@ $app->get('/administration/notifications/new', \Notification\controllers\Notific
 $app->get('/notifications/{id}', \Notification\controllers\NotificationController::class . ':getBySid');
 $app->post('/scriptNotification', \Notification\controllers\NotificationScheduleController::class . ':createScriptNotification');
 
-$app->post('/saveNumericPackage', \MessageExchange\Controllers\ReceiveMessageExchangeController::class . ':saveMessageExchange');
-$app->post('/saveMessageExchangeReturn', \MessageExchange\Controllers\ReceiveMessageExchangeController::class . ':saveMessageExchangeReturn');
-$app->post('/saveMessageExchangeReview', \MessageExchange\Controllers\MessageExchangeReviewController::class . ':saveMessageExchangeReview');
-$app->post('/resources/{resId}/messageExchange', \MessageExchange\Controllers\SendMessageExchangeController::class . ':createMessageExchangeReview');
+$app->post('/saveNumericPackage', \MessageExchange\controllers\ReceiveMessageExchangeController::class . ':saveMessageExchange');
+$app->post('/saveMessageExchangeReturn', \MessageExchange\controllers\ReceiveMessageExchangeController::class . ':saveMessageExchangeReturn');
+$app->post('/saveMessageExchangeReview', \MessageExchange\controllers\MessageExchangeReviewController::class . ':saveMessageExchangeReview');
+$app->post('/resources/{resId}/messageExchange', \MessageExchange\controllers\SendMessageExchangeController::class . ':createMessageExchange');
 
 //ExternalSignatoryBooks
 $app->get('/maarchParapheur/user/{id}/picture', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':getUserPicture');
diff --git a/src/app/external/messageExchange/controllers/MessageExchangeReviewController.php b/src/app/external/messageExchange/controllers/MessageExchangeReviewController.php
index 35d1e7b73724d35a008f0fffb9e2acc72e45903c..87987fcbb44285bc2445fb61c8bba132f5054a75 100755
--- a/src/app/external/messageExchange/controllers/MessageExchangeReviewController.php
+++ b/src/app/external/messageExchange/controllers/MessageExchangeReviewController.php
@@ -16,12 +16,14 @@ namespace MessageExchange\controllers;
 
 use Action\models\ActionModel;
 use ExportSeda\controllers\SendMessageController;
-use MessageExchange\Controllers\ReceiveMessageExchangeController;
+use MessageExchange\controllers\ReceiveMessageExchangeController;
 use MessageExchange\controllers\SendMessageExchangeController;
 use MessageExchange\models\MessageExchangeModel;
 use Resource\models\ResModel;
 use SrcCore\models\CoreConfigModel;
 use User\models\UserModel;
+use Slim\Http\Request;
+use Slim\Http\Response;
 
 require_once 'modules/export_seda/Controllers/ReceiveMessage.php';
 
diff --git a/src/app/external/messageExchange/controllers/ReceiveMessageExchangeController.php b/src/app/external/messageExchange/controllers/ReceiveMessageExchangeController.php
index a373e2df9dec906fc0830d4713e160e424999a18..4d9244dd57cb8a995d3b43a5b652970ff1201755 100755
--- a/src/app/external/messageExchange/controllers/ReceiveMessageExchangeController.php
+++ b/src/app/external/messageExchange/controllers/ReceiveMessageExchangeController.php
@@ -13,7 +13,7 @@
 * @ingroup core
 */
 
-namespace MessageExchange\Controllers;
+namespace MessageExchange\controllers;
 
 use Basket\models\BasketModel;
 use Contact\models\ContactModel;
@@ -42,10 +42,6 @@ class ReceiveMessageExchangeController
             return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
         }
 
-        if (empty($GLOBALS['userId'])) {
-            return $response->withStatus(401)->withJson(['errors' => 'User Not Connected']);
-        }
-
         $data = $request->getParams();
 
         $this->addComment('['.date("d/m/Y H:i:s") . '] Réception du pli numérique');
@@ -432,9 +428,7 @@ class ReceiveMessageExchangeController
         }
 
         $acknowledgementObject->MessageIdentifier->value          = $dataObject->MessageIdentifier->value . '_Ack';
-        $tmpPath = CoreConfigModel::getTmpPath();
-        $filePath = SendMessageController::generateMessageFile($acknowledgementObject, 'Acknowledgement', $tmpPath);
-
+        $filePath = SendMessageController::generateMessageFile(['messageObject' => $acknowledgementObject, 'type' => 'Acknowledgement']);
         $acknowledgementObject->ArchivalAgency = $acknowledgementObject->Receiver;
         $acknowledgementObject->TransferringAgency = $acknowledgementObject->Sender;
 
@@ -477,9 +471,7 @@ class ReceiveMessageExchangeController
         $replyObject->ArchivalAgency                    = $dataObject->TransferringAgency;
 
         $replyObject->MessageIdentifier->value          = $dataObject->MessageIdentifier->value . '_Reply';
-        $tmpPath = CoreConfigModel::getTmpPath();
-        $filePath = SendMessageController::generateMessageFile($replyObject, "ArchiveTransferReply", $tmpPath);
-
+        $filePath = SendMessageController::generateMessageFile(['messageObject' => $replyObject, 'type' => 'ArchiveTransferReply']);
         $replyObject->MessageIdentifier->value          = $dataObject->MessageIdentifier->value . '_ReplySent';
         $messageExchangeSaved = SendMessageExchangeController::saveMessageExchange(['dataObject' => $replyObject, 'res_id_master' => $aArgs['res_id_master'], 'type' => 'ArchiveTransferReply', 'file_path' => $filePath]);
 
diff --git a/src/app/external/messageExchange/controllers/SendMessageExchangeController.php b/src/app/external/messageExchange/controllers/SendMessageExchangeController.php
index 45aa45d03ef6d13987f4a9f0a43f27a32424516a..a5d429ed5622f7311c2db653de86f67edc3794f3 100755
--- a/src/app/external/messageExchange/controllers/SendMessageExchangeController.php
+++ b/src/app/external/messageExchange/controllers/SendMessageExchangeController.php
@@ -20,14 +20,19 @@ use Docserver\models\DocserverModel;
 use Doctype\models\DoctypeModel;
 use Entity\models\EntityModel;
 use ExportSeda\controllers\SendMessageController;
+use Group\controllers\PrivilegeController;
 use History\controllers\HistoryController;
-use MessageExchange\Controllers\ReceiveMessageExchangeController;
+use MessageExchange\controllers\ReceiveMessageExchangeController;
 use MessageExchange\models\MessageExchangeModel;
 use Note\models\NoteModel;
+use Resource\controllers\ResController;
 use Resource\models\ResModel;
+use Respect\Validation\Validator;
 use SrcCore\models\TextFormatModel;
 use Status\models\StatusModel;
 use User\models\UserModel;
+use Slim\Http\Request;
+use Slim\Http\Response;
 
 class SendMessageExchangeController
 {
@@ -110,14 +115,14 @@ class SendMessageExchangeController
         $errors = self::control($body);
 
         if (!empty($errors)) {
-            return ['errors' => $errors];
+            return $response->withStatus(400)->withJson(['errors' => $errors]);
         }
 
         /***************** GET MAIL INFOS *****************/
         $AllUserEntities = EntityModel::getWithUserEntities(['where' => ['user_id = ?', 'business_id != \'\''], 'data' => [$GLOBALS['userId']]]);
 
         foreach ($AllUserEntities as $value) {
-            if ($value['entity_id'] == $body['senderEmail']) {
+            if ($value['id'] == $body['senderEmail']) {
                 $TransferringAgencyInformations = $value;
                 break;
             }
@@ -127,8 +132,8 @@ class SendMessageExchangeController
             return ['errors' => "no sender"];
         }
 
-        $AllInfoMainMail = ResModel::getById(['resId' => $args['resId']]);
-        $doctype = DoctypeModel::getById(['select' => ['description'], 'id' => $AllInfoMainMail['doctype']]);
+        $AllInfoMainMail = ResModel::getById(['select' => ['*'], 'resId' => $args['resId']]);
+        $doctype = DoctypeModel::getById(['select' => ['description'], 'id' => $AllInfoMainMail['type_id']]);
 
         $tmpMainExchangeDoc = explode("__", $body['mainExchangeDoc']);
         $MainExchangeDoc    = ['tablename' => $tmpMainExchangeDoc[0], 'res_id' => $tmpMainExchangeDoc[1]];
@@ -143,17 +148,18 @@ class SendMessageExchangeController
         }
 
         if ($MainExchangeDoc['tablename'] == 'res_attachments') {
-            $body['join_attachment'][] = $MainExchangeDoc['res_id'];
+            $body['joinAttachment'][] = $MainExchangeDoc['res_id'];
         }
 
         /**************** GET ATTACHMENTS INFOS ***************/
         $AttachmentsInfo = [];
         if (!empty($body['joinAttachment'])) {
             $AttachmentsInfo = AttachmentModel::get(['select' => ['*'], 'where' => ['res_id in (?)'], 'data' => [$body['joinAttachment']]]);
+            $attachmentTypes = AttachmentModel::getAttachmentsTypesByXML();
             foreach ($AttachmentsInfo as $key => $value) {
                 $AttachmentsInfo[$key]['Title']                                  = $value['title'];
                 $AttachmentsInfo[$key]['OriginatingAgencyArchiveUnitIdentifier'] = $value['identifier'];
-                $AttachmentsInfo[$key]['DocumentType']                           = $_SESSION['attachment_types'][$value['attachment_type']];
+                $AttachmentsInfo[$key]['DocumentType']                           = $attachmentTypes[$value['attachment_type']]['label'];
                 $AttachmentsInfo[$key]['tablenameExchangeMessage']               = 'res_attachments';
             }
         }
@@ -194,15 +200,25 @@ class SendMessageExchangeController
 
         foreach ($body['contacts'] as $contactId) {
             /******** GET ARCHIVAl INFORMATIONs **************/
-            $ArchivalAgencyCommunicationType   = ContactModel::getContactCommunication(['contactId' => $contactId]);
-            $ArchivalAgencyContactInformations = ContactModel::getById(['id' => $contactId]);
+            $communicationType   = ContactModel::getById(['select' => ['communication_means'], 'id' => $contactId]);
+            $aArchivalAgencyCommunicationType = json_decode($communicationType['communication_means'], true);
+            if (!empty($aArchivalAgencyCommunicationType)) {
+                if (!empty($aArchivalAgencyCommunicationType['email'])) {
+                    $ArchivalAgencyCommunicationType['type'] = 'email';
+                    $ArchivalAgencyCommunicationType['value'] = $aArchivalAgencyCommunicationType['email'];
+                } else {
+                    $ArchivalAgencyCommunicationType['type'] = 'url';
+                    $ArchivalAgencyCommunicationType['value'] = rtrim($aArchivalAgencyCommunicationType['url'], "/");
+                }
+            }
+            $ArchivalAgencyContactInformations = ContactModel::getById(['select' => ['*'], 'id' => $contactId]);
 
             /******** GENERATE MESSAGE EXCHANGE OBJECT *********/
             $dataObject = self::generateMessageObject([
                 'Comment' => $aComments,
                 'ArchivalAgency' => [
                     'CommunicationType'   => $ArchivalAgencyCommunicationType,
-                    'ContactInformations' => $ArchivalAgencyContactInformations[0]
+                    'ContactInformations' => $ArchivalAgencyContactInformations
                 ],
                 'TransferringAgency' => [
                     'EntitiesInformations' => $TransferringAgencyInformations
@@ -212,12 +228,12 @@ class SendMessageExchangeController
                 'mainExchangeDocument'  => $MainExchangeDoc
             ]);
             /******** GENERATION DU BORDEREAU */
-            $filePath = SendMessageController::generateMessageFile($dataObject, "ArchiveTransfer", $_SESSION['config']['tmppath']);
+            $filePath = SendMessageController::generateMessageFile(['messageObject' => $dataObject, 'type' => 'ArchiveTransfer']);
 
             /******** SAVE MESSAGE *********/
             $messageExchangeReturn = self::saveMessageExchange(['dataObject' => $dataObject, 'res_id_master' => $args['resId'], 'file_path' => $filePath, 'type' => 'ArchiveTransfer']);
             if (!empty($messageExchangeReturn['error'])) {
-                return ['errors' => $messageExchangeReturn['error']];
+                return $response->withStatus(400)->withJson(['errors' => $messageExchangeReturn['error']]);
             } else {
                 $messageId = $messageExchangeReturn['messageId'];
             }
@@ -247,13 +263,13 @@ class SendMessageExchangeController
 
             if ($res['status'] == 1) {
                 $errors = [];
-                array_push($errors, _SENDS_FAIL);
+                array_push($errors, "L'envoi a échoué");
                 array_push($errors, $res['content']);
-                return ['errors' => $errors];
+                return $response->withStatus(400)->withJson(['errors' => $errors]);
             }
         }
 
-        return true;
+        return $response->withStatus(200);
     }
 
     protected static function control($aArgs = [])
@@ -311,7 +327,7 @@ class SendMessageExchangeController
                     $additionalUserInfos = '';
                     if (!empty($value['entity_id'])) {
                         $entityRoot      = EntityModel::getEntityRootById(['entityId' => $value['entity_id']]);
-                        $userEntity      = Entitymodel::getByEntityId(['entityId' => $value['entity_id']]);
+                        $userEntity      = EntityModel::getByEntityId(['entityId' => $value['entity_id']]);
                         $additionalUserInfos = ' ('.$entityRoot['entity_label'].' - '.$userEntity['entity_label'].')';
                     }
                     $oComment->value = $value['firstname'].' '.$value['lastname'].' - '.$date->format('d-m-Y H:i:s'). $additionalUserInfos . ' : '.$value['note_text'];
@@ -442,7 +458,7 @@ class SendMessageExchangeController
         $contentObject->DocumentType                           = $aArgs['DocumentType'];
         $contentObject->Status                                 = StatusModel::getById(['id' => $aArgs['Status']])['label_status'];
 
-        $userInfos = UserModel::getByLogin(['login' => $aArgs['Writer']]);
+        $userInfos = UserModel::getById(['id' => $aArgs['Writer']]);
         $writer                = new \stdClass();
         $writer->FirstName     = $userInfos['firstname'];
         $writer->BirthName     = $userInfos['lastname'];
@@ -554,9 +570,9 @@ class SendMessageExchangeController
             }
 
             MessageExchangeModel::insertUnitIdentifier([
-                'messageId'   => $aArgs['messageId'], 
-                'tableName'   => $value['tablenameExchangeMessage'], 
-                'resId'       => $value['res_id'], 
+                'messageId'   => $aArgs['messageId'],
+                'tableName'   => $value['tablenameExchangeMessage'],
+                'resId'       => $value['res_id'],
                 'disposition' => $disposition
             ]);
         }
@@ -564,9 +580,9 @@ class SendMessageExchangeController
         if (!empty($aArgs['notes'])) {
             foreach ($aArgs['notes'] as $value) {
                 MessageExchangeModel::insertUnitIdentifier([
-                    'messageId'   => $aArgs['messageId'], 
-                    'tableName'   => "notes", 
-                    'resId'       => $value, 
+                    'messageId'   => $aArgs['messageId'],
+                    'tableName'   => "notes",
+                    'resId'       => $value,
                     'disposition' => "note"
                 ]);
             }
diff --git a/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php b/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php
index 19e5e97169c3dfe842de3c15febbe946df408559..e9903b052750488d74f57dcd34bfc0d2af7c6d1d 100755
--- a/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php
+++ b/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php
@@ -264,7 +264,8 @@ abstract class MessageExchangeModelAbstract
     public static function insertUnitIdentifier(array $args)
     {
         ValidatorModel::notEmpty($args, ['messageId', 'tableName', 'resId', 'disposition']);
-        ValidatorModel::stringType($args, ['messageId', 'tableName', 'resId', 'disposition']);
+        ValidatorModel::stringType($args, ['messageId', 'tableName', 'disposition']);
+        ValidatorModel::intVal($args, ['resId']);
 
         $messages = DatabaseModel::insert([
             'table'         => 'unit_identifier',
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index eea5a18363e85ab98c7660b0ac25e971c45e4243..294e90fd245216bc9303158256caec6ace7b75c5 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -840,7 +840,7 @@ export const LANG_FR = {
     "sender"                                : "Expéditeur",
     "senderRecipientInformations"           : "Informations de destination",
     "senders"                               : "Expéditeur(s)",
-    "sendmail"                              : "Envoi de courriels et plis numériques",
+    "sendmail"                              : "Envoi de courriels",
     "sendmailShort"                         : "Envoi de courriels",
     "sendMode"                              : "Mode d'envoi",
     "sendModes"                             : "Modes d'envoi",
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index fce8549f0781bafdc7da2301b84d048286757445..4626994fd4d8ac4c5489670d85b09af1b6d8aab0 100755
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -279,7 +279,7 @@ class ClassLoader
      */
     public function setApcuPrefix($apcuPrefix)
     {
-        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+        $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
     }
 
     /**
@@ -374,14 +374,10 @@ class ClassLoader
 
         $first = $class[0];
         if (isset($this->prefixLengthsPsr4[$first])) {
-            $subPath = $class;
-            while (false !== $lastPos = strrpos($subPath, '\\')) {
-                $subPath = substr($subPath, 0, $lastPos);
-                $search = $subPath . '\\';
-                if (isset($this->prefixDirsPsr4[$search])) {
-                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
-                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
-                        if (file_exists($file = $dir . $pathEnd)) {
+            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
                             return $file;
                         }
                     }
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
index f27399a042d95c4708af3a8c74d35d338763cf8f..1a28124886db89f1ca3e4fa674cb69a9a17585b3 100755
--- a/vendor/composer/LICENSE
+++ b/vendor/composer/LICENSE
@@ -1,5 +1,5 @@
 
-Copyright (c) Nils Adermann, Jordi Boggiano
+Copyright (c) 2016 Nils Adermann, Jordi Boggiano
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal