Maillistener ne récupère pas les mails avec une apostrophe

Je viens d’avoir la réponse de HOMIRIS.
Ils ne feront pas la modification car le process est très compliqué. Leur procédure pour faire des modifications est très lourde.
Je crois qu’il n’y que @lunarok , en modifiant le plugin, qui pourra nous aider et résoudre ce problème.
Personnellement je ne le connais pas et je ne sais pas comment le contacter

Hello
Cela fait quelques jours que je galère également avec la réception des email HOMIRIS
J’avais identifié le nouveau mail d’Homiris mais pas l’apostrophe (c’est maintenant chose confirmée)

Comme vous, j’attend qu’un sauveur veuille bien nous aider :wink:

Bon courage

Bonjour,

Même problème pour moi avec les e-mails Homiris. J’ai jeté un oeil sur le code du plugin mais je ne suis pas certain que le bug y soit directement, peut-être que cela vient des fonctions node qui prennent en charge la gestion IMAP…

Bonjour à tous,

j’ai donc le même problème que vous.
En debuggant l’erreur renvoyée j’ai bien vu qu’il s’agissait d’un problème de protection de caractères.

TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
at new NodeError (internal/errors.js:322:7)
at new ClientRequest (_http_client.js:155:13)
at Object.request (http.js:94:10)
at Request.start (/var/www/html/plugins/maillistener/resources/node_modules/request/request.js:751:32)
at Request.write (/var/www/html/plugins/maillistener/resources/node_modules/request/request.js:1491:10)
at end (/var/www/html/plugins/maillistener/resources/node_modules/request/request.js:549:18)
at Immediate._onImmediate (/var/www/html/plugins/maillistener/resources/node_modules/request/request.js:578:7)
at processImmediate (internal/timers.js:464:21) {
code: 'ERR_UNESCAPED_CHARACTERS'
}

dans le fichier plugins/maillistener/resources/maillistener.js, du coté de la ligne 84, on trouve l’appel à l’API Jeedom

apiurl = urlJeedom+'&type=maillistener&messagetype=mailIncoming&email='+email+'&from='+mail.from[0].address+'&subject='+mail.subject;
	console.log(apiurl);
	request({
		url: apiurl,
		method: 'PUT',
		json: {"body": mail.text, "html": mail.html},
	},
	function (error, response, body) {
		if (!error && response.statusCode == 200) {
			console.log('contact Jeedom avec retour :',response.statusCode);
		}
	});

Comme le sujet est intégré à cette URL et qu’il contient des simples quotes, il faut donc « échapper » la chaine. J’ai utilisé encodeURI, il y a surement d’autres fonctions mais j’ai fait au plus vite surtout.

	request({
		url: encodeURI(apiurl),
		method: 'PUT',
		json: {"body": mail.text, "html": mail.html},
	},

Avec cette modif et un restart du listener, je peux à nouveau utiliser mes scénarios liés à l’alarme.
J’epère que ça vous portera chance aussi
++

6 « J'aime »

MERCI BEAUCOUP
Je viens de tester rapidement et apparemment ça fonctionne
Un grand merci @mmourcia pour ton aide et le partage de tes infos.

1 « J'aime »

@mmourcia un grand merci pour avoir chercher et trouver le problème.
Ce serait cool qu’un fix soit fait directement dans le plugin.

1 « J'aime »

Bonjour,
@mmourcia , Merci , modification réalisée et cela marche parfaitement, mon scénario est de nouveau fonctionnel.

Gérard

1 « J'aime »

Merci pour cette solution !
Par contre, comment utilise t-on le code supplémentaire que tu indiques ?

Bonjour @Snoopy ,

Il ne s’agit pas vraiment d’un code supplémentaire mais simplement de remplacer une ligne de code par une autre : url: apiurl, qui devient url: encodeURI(apiurl),.

Pour faire cela, soit tu te connectes en SSH et tu effectues la modification, soit tu utilises l’éditeur de fichier intégré à Jeedom; je t’ai mis un screen pour te repérer

3 « J'aime »

Bonjour @mmourcia ,
un grand merci pour cette solution rapide et efficace!, cela fonctionne également chez moi

nhi

1 « J'aime »

Super ! Merci beaucoup pour les précisions. Ca re-fonctionne sans problème :slight_smile:

1 « J'aime »

La mise à jour est faite en beta.

4 « J'aime »

Top, merci @lunarok !!!

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.