J’aimerais dans le code, pouvoir insérer une image dans le corps d’un email à l’intérieur de la balise HTML “img”, dans la propriété src : <img src="mon_url" />.
Je suis actuellement dans la capacité d’insérer du contenu à l’intérieur de la propriété src, mais je ne sais pas comment récupérer l’URL de ma ressource image.
Je suis déjà tombé sur ce topic, le problème c’est que la ligne de code suivante me retourne un id null (en remplaçant MY_IMAGE par HR_LOGO_SIPAREX) : String id = mail.addImage(mail.getMail().resourceImage("MY_IMAGE", false));
Voici le code de l’action d’envoi de mail des infos du user (vous pouvez tester ça envoie un mail avec des images inlinées dans le corps de mail et des PJ):
En suivant votre exemple, il manquait un paramètre (non obligatoire) dans la méthode resourceImage(). Je l’ai rajouté, et je n’ai plus de valeur null. Cependant, avec la méthode getRefUrl() : String img = mail.getMail().resourceImage(this, "HR_LOGO_SIPAREX", false).getRefUrl();
Voici ce que j’obtiens : <img title="logo-SIPAREX-GROUPE-Q.png" alt="logo-SIPAREX-GROUPE-Q.png" src="cid:SSzb4DE4AKDaJrufhuZf">
Le problème, c’est que dans mon mail, l’image est en erreur 404, il ne la trouve pas.
Effectivement dans l’exemple User la ressource “LOGO” est une ressource de l’objet User, pas une ressource globale => d’où l’appel à la méthode resourceImageavec l’objet en argument = le this.
Si votre ressource est une resource globale il faut utiliser la méthode resourceImagesans argument objet ou autre.
L’argument ou l’absence d’argument de ces méthodes n’est pas “facultatif” => c’est ce qui indique quel type de ressource il s’agit.
Pour rappel il y a des ressources globales, d’objet métier, de processus métier ou d’objet externe (= composant spécifique)
PS: Attention aussi à bien paramétrer votre ressource en “Image” et pas en “Icône” sinon ce sont les méthodes resourceIcon qu’il faut utiliser. cf. Mail pour la javadoc complète de cette classe helper Mail
D’accord, je comprends mieux pourquoi il faut mettre le this dans cette situation.
Mais du coup, pourquoi, mon image ne s’affiche pas et pourquoi du coup j’ai une erreur 404 (avec ce que je vous ai mis dans le message du dessus) ? Parce que pour le moment mon mail ressemble à ça:
Vous devez utiliser la bonne méthode pour le bon type de ressource =globale ou associée à votre objet.
Si c’est une ressource globale il ne faut pas ce this qui veut dire que vous cherchez une ressource d’objet et réciproquement.
Sans infos sur le paramétrage de votre ressource je ne peux pas plus vous aider.
PS: vérifiez dans le source SMTP de votre mail reçu que le pb d’affichage d’image n’est pas simplement le fait de votre client de messagerie. En effet, ceux -ci refusent systématiquement d’afficher les images contenus dans un email “douteux” or vu votre copie d’écran je pense que votre FROM est en @simplicite.io/fr => votre instance n’est pas autorisée sur ce domaine et du coup votre mail doit surement finir en spam ou dans le genre.
Je viens d’ajouter en pièce jointe l’image avant de l’afficher dans le corps du mail et ça marche:
Le problème, c’est que dans la balise HTML (<img />) la source (src) de l’image est un content-id (cid:) donc il faut impérativement que l’image soit en pièce jointe pour qu’elle soit affichée dans le corps du texte.
Du coup dans mon cas, je pense que ça règle mon problème, mais dans le futur peut-être que je voudrais afficher une image sans qu’elle soit en pièce jointe.
Dans le mail User que je vous ai indiqué le logo n’est pas en pièce jointe et il s’affiche bien dans le corps du mail (cf. la copie d’écran du mail dans le client Gmail).
Vous faites sans doute quelque chose de travers quelque part.
Comparez votre code avec le code que je vous ai fourni.
Pour insérer une image dans un email, dans Simplicité ou ailleurs… il faut obligatoirement le passer en attachement simple ou avec sa référence content-id :
Il est impossible de faire autrement car tous les clients de messagerie modernes filtrent les contenus inlinés dynamiquement de type : <img src="data:image/png...">
Il faut forcement utiliser un <img src="cid:..."> vers un attachment = attribué par les API (mail.addImage ou équivalent).