Commit eb66c02a authored by Zied SELLAMI's avatar Zied SELLAMI
Browse files

Delete unused files

parent 46972ed5
......@@ -26,7 +26,7 @@ docker run -it -p 5551:9991 demo:priorityInbox
### Keywords extractor service
```
curl -X POST 'http://0.0.0.0:5551/rest/priorityinbox/parsejson -F "file=@/path/to/email.json"
curl -X POST 'http://0.0.0.0:5551/rest/priorityinbox/parsejson' -F "file=@/path/to/email.json"
```
Sample of json file :
```
......
{
"messageId" : "<9d0ed80f9e38222618c97793080275f7@linagora.com>",
"from" : {
"address" : "szribi@linagora.com",
"personal" : "Sarah ZRIBI"
},
"to" : [ {
"address" : "openpaas-ng@linagora.com",
"personal" : "OpenPaas NG"
} ],
"cc" : [ {
"address" : "azapolsky@linagora.com",
"personal" : null
}, {
"address" : "rbourgueil@linagora.com",
"personal" : "Regis BOURGUEIL"
}, {
"address" : "odaniel@linagora.com",
"personal" : "Olivier DANIEL"
} ],
"bcc" : [ ],
"Received" : "Mon, 28 Jan 2019 07:56:43 +0000",
"Date" : "Mon, 28 Jan 2019 07:56:43 +0000",
"in-Reply-To" : "<7f122e70-ed8f-b98b-4a14-fc37f0c79f26@linagora.com>",
"subject" : "OPNG - IMPORTANT - Changement de la date de revue - Nv Doodle",
"body" : "\nChers partenaires, \r\n\r\nJe viens tout juste de recevoir un mail de Mme. Géraldine EYANG\r\nNDONG,(ci-après) me demandant de reporter la date de la revue. \r\n\r\nVoici le nouveau Doodle : https://doodle.com/poll/kh8ywd7hb4c83esx . Je\r\nvous prie de le remplir as soon as possible. \r\n\r\nCeci ne reporte pas la date de livraison initiale (aujourd\"hui) afin de\r\npermettre aux personnes du CGI et de la DGE de prendre connaissance des\r\ntravaux du projet. \r\n\r\nÀ ce jour voici la liste des reviewers que j'ai : \r\n\r\n- Mme. Geraldine EYANG NDONG \r\n\r\n- Le nouveau directeur adjoint du CGI \r\n\r\n- Une personne de la DGE (je n'ai pas encore son nom) \r\n\r\n- M. Jean Christophe GOUGEON \r\n\r\n- M. Philippe ROY de Cap Digital \r\n\r\n\"Je suis contrainte de modifier la date de l'Etape clé 3 pour permettre\r\nau CGI et à la DGE de se joindre à nous. Aussi je vous propose nos\r\nnouvelles disponibilités : le 15 mai (toute la journée), les 16 et 17\r\nmai (matin uniquement). J'insiste encore sur la nécessité de nous\r\ntransmettre les documents le plus tôt possible afin de nous permettre de\r\nles analyser en amont de la réunion. \"\r\n\r\nJe vous remercie par avance de votre retour rapide. \r\n\r\nCordialement, \r\n\r\nSarah\r\n\r\n-- \r\nDr. Sarah ZRIBI\r\nResearch Project Manager\r\nLinagora - France\r\nPhone: +33 (0) 9 72 36 97 95\r\nCell: +33 (0) 7 69 22 72 54\r\nResearch web site: http://research.linagora.com ",
"attachments" : [{
"file_size" : "243534",
"content_name" : "presentation.pdf",
"content_type" : "APPLICATION/PDF"
}, {
"file_size": "243534",
"content_name" : "APPLICATION/ICS",
"content_type" : "meeting.ics"
}],
"emailFolder" : "INBOX",
"user" : "Zied Sellami",
"alternativeAddress" : [ "zsellami@linagora.com", "zied.sellami@linagora.com" ],
"X-Spam-Flag" : "NO"
}
\ No newline at end of file
{
"messageId" : "<9d0ed80f9e38222618c97793080275f7@linagora.com>",
"from" : {
"address" : "vstefenn@linagora.com",
"personal" : "Valérie Stefenn"
},
"to" : [ {
"address" : "zsellami@linagora.com",
"personal" : "Zied Sellami"
} ],
"cc" : [ {
"address" : "jplorre@linagora.com",
"personal" : "Jean-Pierre Lorré"
}],
"bcc" : [ ],
"Received" : "Mon, 28 Jan 2019 07:56:43 +0000",
"Date" : "Mon, 28 Jan 2019 07:56:43 +0000",
"in-Reply-To" : "<7f122e70-ed8f-b98b-4a14-fc37f0c79f26@linagora.com>",
"subject" : "Re: Linagora GSO : Convention de stage de Sonia Ratsiandavana : Pour vérification et signature",
"body" : "Bonjour,\n\nVoici le scan comportant des modifications.\n\nUn fois cela fait, Jean-Pierre peut signer en P/O\n\nMerci de nous renvoyer un scan avec les signatures.\n-- \nCordialement.\n\nValérie STEFFEN\nAssistante \n\n06.43.90.91.26\n\n------------------------------------------------\nLINAGORA\nTour Franklin\n100 Terrasse Boieldieu\n92042 Paris La Défense Cedex\nTel : +33(0)1 46 96 63 63\nfax : +33(0)1 46 96 63 64\n\n-------------------------------------------------\nhttp://www.linagora.com\n\n\"La présente transmission contient des informations confidentielles appartenant à Linagora, exclusivement destinées au(x) destinataire(s) identifié(s) ci-dessus. Si vous n'en faites pas partie, toute reproduction, distribution ou divulgation de tout ou partie des informations de cette transmission, ou toute action effectuée sur la base de celles-ci vous sont formellement interdites.\nSi vous avez reçu cette transmission par erreur, nous vous remercions de nous en avertir et de la détruire de votre système d'information.\n\nThe present transmission contains privileged and confidential information belonging to Linagora, exclusively intended for the recipient(s) thereabove identified. If you are not one of these aforementioned recipients, any reproduction, distribution, disclosure of said information in whole or in part, as well as any action undertaken on the basis of said information are strictly prohibited. If you received the present transmission by mistake, please inform us and destroy it from your messenging and information systems.\"\nLe 29/01/2019 à 10:21, Zied SELLAMI a écrit :\nBonjour Valérie,\n\nci-joint la convention de stage de Sonia Ratsiandavana que nous avons reçu de la part de son université.\n\n \n\nCordialement,\n\nZied Sellami\n\n-- \nZied Sellami\nIngénieur de Recherche - Linagora Grand Sud Ouest\n75 Route de Revel, 31500 Toulouse\nEmail : zsellami@linagora.com\nTéléphone : 05 62 19 24 91\nPortable : 06 64 53 93 84\nwww.linagora.com",
"attachments" : [{
"file_size" : "243534",
"content_name" : "convention.pdf",
"content_type" : "APPLICATION/PDF"
}],
"emailFolder" : "INBOX",
"user" : "Zied Sellami",
"alternativeAddress" : [ "zsellami@linagora.com", "zied.sellami@linagora.com" ],
"X-Spam-Flag" : "NO"
}
\ No newline at end of file
package org.linagora.priorityInbox;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.apache.commons.io.FileUtils;
import org.joda.time.DateTime;
import org.linagora.priorityInbox.data.EmailAttachment;
import org.linagora.priorityInbox.emailReader.CSVReader;
import org.linagora.priorityInbox.data.Email;
import org.linagora.priorityInbox.text.Text;
import org.linagora.priorityInbox.text.TextCleaner;
public class PriorityInboxPredictor {
private static List<String> ATTACH_TYPES = Arrays.asList("docx", "doc", "odt", "pdf", "pttx", "ptt", "xls", "ods", "odp", "rtf", "csv", "opendocument", "msword");
private static HashMap<String, Double> bodyModel = null;
private static HashMap<String, Double> subjectModel = null;
private static HashMap<String, Double> recipientModel = null;
public static void main(String[] args) {
HashMap<String, Double> result = new HashMap<String, Double>();
HashMap<String, Email> emails = new HashMap<String, Email>();
String DATA_FILE_PATH = "/home/zsellami/newCorpus/zied2/DATA.csv";
String BODY_DIR_PATH = "/home/zsellami/newCorpus/zied2/emails_body/";
String user = "Zied Sellami";
//List<String> alternativeEmails = Arrays.asList("jplorre@linagora.com","jean-pierre.lorre@linagora.com","jean-pierre.lorre@petalslink.com","jean-pierre.lorre@ebmwebsourcing.com", "jean-pierre.lorre@toulouse.valtech.fr");
List<String> alternativeEmails = Arrays.asList("zsellami@linagora.com","zied.sellami@linagora.com");
emails = CSVReader.parseEmails(DATA_FILE_PATH, BODY_DIR_PATH);
emails = PriorityInboxLearner.standardizeUser(user, alternativeEmails, emails);
bodyModel = loadModel("body.model");
subjectModel = loadModel("subject.model");
recipientModel = loadModel("recipient.model");
HashMap<String, Double> spamBodyModel = loadModel("bodySpam.model");
HashMap<String, Double> spamSubjectModel = loadModel("subjectSpam.model");
for(Entry<String, Double> entry: spamBodyModel.entrySet()) {
Double existValue = bodyModel.get(entry.getKey());
if(existValue == null) {
bodyModel.put(entry.getKey(), entry.getValue());
}else {
bodyModel.replace(entry.getKey(), existValue + entry.getValue());
}
}
for(Entry<String, Double> entry: spamSubjectModel.entrySet()) {
Double existValue = subjectModel.get(entry.getKey());
if(existValue == null) {
subjectModel.put(entry.getKey(), entry.getValue());
}else {
subjectModel.replace(entry.getKey(), existValue + entry.getValue());
}
}
int counter = 0;
for(Email email: emails.values()) {
DateTime time = email.getEmailTime();
if(time == null)
continue;
if(time.getYear() == 2018 && time.getMonthOfYear() == 5 && time.getDayOfMonth() == 25) {
System.out.println("process score");
if(email.getFrom()!= null) {
if(!email.getFrom().getAddress().equals(user)) {
double score = computeScore(email);
//System.out.println(email.getSubject() + "\t\t" + score);
if(score > -100d) {
result.put(email.getFrom() + "(" + email.getEmailTime()+ "): " + email.getSubject(), score);
counter ++;
if(counter == 100) break;
}
}
}
}
}
Map<String,Double> sortedResult =
result.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
for(Entry<String, Double> entry: sortedResult.entrySet()) {
System.out.println(entry.getKey()+"\t\t"+entry.getValue());
}
}
public static HashMap<String, Double> loadModel(String path){
HashMap<String, Double> model = new HashMap<String, Double>();
try {
for(String line: FileUtils.readLines(new File(path))) {
String elements[] = line.split("\t");
model.put(elements[0], Double.parseDouble(elements[1]));
}
}catch(Exception e) {
}
return model;
}
public static double computeScore(Email email) {
double score = 0d;
Double fromScore = recipientModel.get(email.getFrom());
if(fromScore != null) {
score = score + 1d * fromScore;
}
String subject = email.getSubject();
String body = email.getBody();
body = TextCleaner.cleanReplyBlock(body);
String emailContent = subject + "\n" + body;
String language = Text.detectLanguage(emailContent);
Text.setStopWordsDirectory("stopwords/");
if(subject != null) {
Text.language = language;
String processedText = Text.process(body);
List<String> ngrams = Text.toNGramsALL(3, processedText.toLowerCase());
//HashMap<String, Double> subjectKeywords = Text.countTokensRecursive(String.join(" ", ngrams));
for(String key: ngrams) {
Double keyScore = subjectModel.get(key);
if(keyScore != null) {
score = score + 1d * keyScore;
}
}
}
if(body != null) {
String processedText = Text.process(body);
List<String> ngrams = Text.toNGramsALL(3, processedText.toLowerCase());
//HashMap<String, Double> bodyKeywords = Text.countTokensRecursive(String.join(" ", ngrams));
for(String key: ngrams) {
Double keyScore = bodyModel.get(key);
if(keyScore != null) {
score = score + 1d * keyScore;
}
}
}
double attachementWeight = 0d;
// for(EmailAttachment emailAttachment: email.getAttachments()) {
// System.out.println("Attachement value: " + emailAttachment);
// for(String attach_type: ATTACH_TYPES) {
// if(emailAttachment.getContentName().contains(attach_type) || emailAttachment.getContentType().contains(attach_type)) {
// attachementWeight = attachementWeight + 1d;
// break;
//
// }
//
// }
// }
return score + attachementWeight;
}
}
package org.linagora.priorityInbox.emailReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.mail.internet.MailDateFormat;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
public class Test {
public static void main(String[] args) {
try {
MailDateFormat mailDateFormat = new MailDateFormat();
String str = "Thu, 1 Sep 2016 06:16:03 -0700 (PDT)";
// SimpleDateFormat formatter = new SimpleDateFormat("EE MMM dd HH:mm:ss zzzz yyyy", Locale.US);
Date d = mailDateFormat.parse(str);
DateTime time = new DateTime(d);
System.out.println(d);
System.out.println(time.toString(DateTimeFormat.fullDateTime()));
}catch(Exception e) {
e.printStackTrace();
}
}
}
......@@ -26,9 +26,6 @@ public class Test {
// String DATA_FILE_PATH = "/home/zsellami/newCorpus/test/DATA.csv";
// String BODY_DIR_PATH = "/home/zsellami/newCorpus/test/emails_body/";
//
// String user = "Jean-Pierre Lorré";
// List<String> alternativeEmails = Arrays.asList("jplorre@linagora.com","jean-pierre.lorre@linagora.com","jean-pierre.lorre@petalslink.com","jean-pierre.lorre@ebmwebsourcing.com", "jean-pierre.lorre@toulouse.valtech.fr");
long startTime = System.currentTimeMillis();
......
package org.linagora.priorityInbox.text;
import java.util.List;
import java.util.Map.Entry;
import org.tartarus.snowball.SnowballProgram;
public class Test {
public static void main(String[] args) {
for(String str: "bonjour".split("")) {
System.out.println(str+"#");
}
System.exit(0);
// TODO Auto-generated method stub
// SnowballProgram stemmer = new org.tartarus.snowball.ext.CatalanStemmer();
// stemmer.setCurrent("bonjour");
// stemmer.stem();
// System.out.println(stemmer.getCurrent());
// System.exit(0);
String text ="<debut> </fin> dernièrement et éspère dernier je suis revenu sur le reflexe Bonjour tout le monde la semaine prochaine ici. zied.sellami@yahoo.fr http://www.voila.fr Je suis partie la semaine dernière à Paris. Je crois qu'il s'agit d'une nouvelle offre de marketing.";
Text.setStopWordsDirectory("stopwords/");
//Text.removeRegexStopWords = false;
//Text.removeSpecificPunctuation = false;
String processed = Text.process(text);
System.out.println(processed);
List<String> ngrams = Text.toNGramsALL(3, processed.toLowerCase());
System.out.println(String.join(" ", ngrams));
for(String ngram: ngrams)
System.out.println(ngram);
for(Entry<String, Double> count: Text.countTokens(String.join(" ", ngrams)).entrySet()) {
System.out.println(count);
}
System.out.println("======With recursion======");
for(Entry<String, Double> count: Text.countTokensRecursive(String.join(" ", ngrams)).entrySet()) {
System.out.println(count);
}
}
}
package org.linagora.priorityInbox.text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import org.linagora.priorityInbox.PriorityInboxLearner;
import org.linagora.priorityInbox.data.Email;
import org.linagora.priorityInbox.data.EmailFolder;
import org.linagora.priorityInbox.data.Inbox;
import org.linagora.priorityInbox.emailReader.CSVReader;
public class Test2 {
private static String URGENT_RULE = "(?i)(très urgent|très important|very urgent|extremely important|extremely urgent|very important|extr[êe]mement important|important|rapidement|urgent|à lire attentivement|répondre rapidement|answer quickly|à traiter dans les plus brefs délais|très grave|grave)";
private static String[] regexList = { "^>* *Le .+, .+ a écrit :", "^Le .+, .+ a écrit :", "^>* *On .+, .+ wrote:",
"^.*, .+ a écrit :", "^.*On .+, .+ wrote:", "^On .+, .+ wrote:", "^>* *Le .+, .+ de [\\w.]+@[\\w]+.\\w+$",
"^Le .+, .+ de [\\w.]+@[\\w]+.\\w+$", "^>* *On .+, .+ from [\\w.]+@[\\w]+.\\w+$",
"^.*On .+, .+ from [\\w.]+@[\\w]+.\\w+$", "^On .+, .+ from [\\w.]+@[\\w]+.\\w+$",
"^\\d\\d.+ \\d\\d:\\d\\d [\\w\\d\\W]+? <[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+>:",
"^De : [\\w\\d\\W]+? <[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+>",
"^From: [\\w\\d\\W]+? <[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+>",
"(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Dimanche|Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi),.+,.+ from [\\w\\d\\W]+? [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+ *:",
"(-+ *[a-zA-Z]+ (original|transf(é|é|.{0,5})r(é|é|.{0,5})) *-+|-+ *Forwarded [a-zA-Z]+ *-+)"};
// "-------- Message original --------",
// "-------- Courriel original --------",
// "-------- Forwarded Message --------",
// "------- Message transféré -------",
// "-------- Message transféré --------",
// "----- Mail original -----" };
private static Pattern repliedOrTransferredEmailPattern = null;
private static Pattern FWD_RE_PATTERN = Pattern.compile("(?im)^(fwd|re)(:| :| )");
private static Pattern URGENT_PATTERN = Pattern.compile(URGENT_RULE);
public static void main(String[] args) {
//HashMap<String, Email> emails = new HashMap<String, Email>();
String DATA_FILE_PATH = "/home/zsellami/newCorpus/test/DATA.csv";
String BODY_DIR_PATH = "/home/zsellami/newCorpus/test/emails_body/";
String user = "Zied Sellami";
List<String> alternativeEmails = Arrays.asList("zsellami@linagora.com", "zied.sellami@linagora.com");
Inbox inbox = CSVReader.parseInbox(DATA_FILE_PATH, BODY_DIR_PATH);
for(EmailFolder emailFolder: inbox.getEmailFolders().values()) {
PriorityInboxLearner.standardizeUser(user, alternativeEmails, emailFolder.getEmails());
}
Set<Email> repliedEmails = new HashSet<Email>();
Set<Email> notificationEmails = new HashSet<Email>();
Set<Email> otherEmails = new HashSet<Email>();
Set<Email> used = new HashSet<Email>();
for(EmailFolder emailFolder: inbox.getEmailFolders().values()) {
for (Email email : emailFolder.getEmails().values()) {
if (!used.contains(email)) {
if (email.getInReplyTo() != null && !email.getInReplyTo().equals("null") && !email.getInReplyTo().equals("")) {
repliedEmails.add(email);
used.add(email);
List<Email> inReplyEmails = emailFolder.searchEmail(email.getMessageId());
if (!inReplyEmails.isEmpty()) {
repliedEmails.addAll(inReplyEmails);
used.addAll(inReplyEmails);
}
continue;
}
if (email.getBody() != null) {
boolean matchReplyOrTransferred = getRepliedOrTransferredEmailPattern().matcher(email.getBody()).find();
if (matchReplyOrTransferred) {
repliedEmails.add(email);
used.add(email);
continue;
}
}
if (email.getSubject() != null) {
boolean matchReply = FWD_RE_PATTERN.matcher(email.getSubject()).find();
if (matchReply) {
repliedEmails.add(email);
used.add(email);
continue;
}
boolean urgent = URGENT_PATTERN.matcher(email.getSubject()).find();
if (urgent) {
repliedEmails.add(email);
used.add(email);
continue;
}
}
if (PriorityInboxLearner.isAChannelEmail(email.getFrom().getAddress())) {
notificationEmails.add(email);
used.add(email);
continue;
}
otherEmails.add(email);
used.add(email);
}
}
}
System.out.println(" Need to reply " + repliedEmails.size());
// System.out.println(" Urgent email " + urgentEmail.size());
System.out.println(" Social email " + notificationEmails.size());
System.out.println(" other " + otherEmails.size());
int all = repliedEmails.size() + notificationEmails.size() + otherEmails.size();
System.out.println(" All " + all);
}
public static Pattern getRepliedOrTransferredEmailPattern() {
if(repliedOrTransferredEmailPattern == null) {
List<String> regex = new ArrayList<String>();
for (String re : regexList) {
regex.add(re);
}
String expr = "(?im)(" + String.join("|", regex) + ")";
repliedOrTransferredEmailPattern = Pattern.compile(expr);
}
return repliedOrTransferredEmailPattern;
}
}
......@@ -142,219 +142,5 @@ public class TextCleaner {
return reply.replace(signature, "").trim();
}
public static void main(String[] args) {
String mail ="\n" +
"C'est Ok du côté de l'étudiant pour l'échange téléphonique de ce\n" +
"vendredi à 17h. \n" +
"\n" +
"Zied \n" +
"\n" +
"-------- Courriel original -------- \n" +
"\n" +
" OBJET:\n" +
" Re: LINAGORA : stage de fin d'étude\n" +
"\n" +
" DATE:\n" +
" 2019-01-22 14:27\n" +
"\n" +
" DE:\n" +
" Zhengkang Shi <zhengkang.shi@telecom-paristech.fr>\n" +
"\n" +
" À:\n" +
" Zied SELLAMI <zsellami@linagora.com>\n" +
"\n" +
"Bonjour\n" +
"Merci pour m'informer.\n" +
"Cordialement\n" +
"Zhengkang\n" +
"\n" +
"----- Mail original -----\n" +
"De: \"Zied SELLAMI\" <zsellami@linagora.com>\n" +
"À: \"Zhengkang Shi\" <zhengkang.shi@telecom-paristech.fr>\n" +
"Cc: \"Jean-Pierre LORRE\" <jplorre@linagora.com>\n" +
"Envoyé: Mardi 22 Janvier 2019 14:18:27\n" +
"Objet: LINAGORA : stage de fin d'étude\n" +
"\n" +
"Bonjour Monsieur Zhengkang, \n" +
"\n" +
"suite à notre entretien d'hier je vous propose d'échanger avec notre\n" +
"directeur de recherche Monsieur Jean-Pierre Lorré. \n" +
"\n" +
"Il vous contactera par téléphone ce vendredi 25 janvier à 17h00. \n" +
"\n" +
"Cordialement, \n" +
"\n" +
"Zied Sellami \n" +
"-- \n" +
"Zied Sellami\n" +
"Ingénieur de Recherche - Linagora Grand Sud Ouest\n" +
"75 Route de Revel, 31500 Toulouse\n" +
"Email : zsellami@linagora.com\n" +
"Téléphone : 05 62 19 24 91\n" +
"Portable : 06 64 53 93 84\n" +
"www.linagora.com [1] \n" +
"\n" +
"Links:\n" +
"------\n" +
"[1] http://www.linagora.com\n" +
"";
mail = "Bonjour à tous,\n" +
"\n" +
"\n" +
"pour votre information, nous ne recevont pas actuellement de mails provenant de l'extérieur. Ceci n'est pas normal mais cependant ne soyez pas étonné. Seuls passent les mails internes.\n" +
"\n" +
"De ce que l'on a bien voulu me dire, cela serait du à des BAL chez nous qui auraient été piratées et qui auraient été utilisé comme relais de spam. En absence d'informations plus complètes, je n'en sais pas plus.\n" +
"\n" +
"Pour info : vos clients/contacts ne sont pas au courant que leur mail n'arrivent pas dans votre boite.\n" +
"\n" +
"Toujours est il qu'il semble que nos équipes techniques travaillent sur ce sujet. Elles seront bien aimables de nous faire savoir quand est ce que l'on pourra compter sur un retour de la messagerie.\n" +
"\n" +
"\n" +