Probleme de lecture de fichier en pieces jointes via mail

Bonjour,

Dans le cadre de nos développements, nous avons des objets sauvegardés en base qui contiennent des fichiers,

Une de nos feature consiste a envoyer ces fichiers en PJ de mail,

Nous récupérons parfaitement les fichiers, ils sont intégrés dans mail avec le bon mimetype ( gmail nous propose les bonnes applis pour les ouvrir ) ont le bon titre et ont des poids cohérentes ,

Mais nous avons un problème : aucun de ses fichier ne s’ouvre,

Par exemple nous avons essayé d’ouvrir un .doc issue d’un mail avec word, libre office write et google doc, aucune de ces 3 application n’arrive a ouvrir notre .doc
le problème est similaire pour les autres types de fichiers qu’on a testé ( .xls et .pdf )

Voici un screen gmail des 4 pj d’un mail :

Un screen de l’erreur google doc : ( erreur similaire avec d’autre applications )

Screenshot_20210223_160953

Enfin voici le code qui nous permet d’envoyer le mail : ( le code est fortement simplifé pour l’exemple, nous utilisons dans les faits une classe helper, mais c’est la même philosophie ) :

Mail mail = new Mail(g);
 
List<Mail.MailAttach> pjs = new ArrayList<Mail.MailAttach>();             
DocumentDB doc1 = obj1.getField("comPJfichier").getDocument(g); // dans les faits c'est un for sur des objets en base
DocumentDB doc2 = obj2.getField("comPJfichier").getDocument(g);
try{
    java.io.File docFile1 = doc1.getFile();
    java.io.File docFile2 = doc2.getFile();
    Mail.MailAttach mA1 = new Mail.MailAttach(docFile1);
    Mail.MailAttach mA2 = new Mail.MailAttach(docFile2);
    pjs.add(mA1);
    pjs.add(mA2);
}
catch(Exception e ){
    ...
}

Mail.MailAttach[] attachements = pjs.size()>0 ? pjs.toArray(new Mail.MailAttach[pjs.size()]) : null;
Mail.MailImage[] images = null;

mail.sendWithAttach(["email1","email2"], "from", "to", ["email1","email2"] , ["email1","email2"] , "subject", "<h1>Mon super mail<h1>", Mail.MAIL_MIME_TYPE_HTML, null, attachements, images);

Pour insérer des attachements issus d’attributs Document ou Image de votre objet il faut utiliser la méthode documentAttach cf . Mail qui fera ce qu’il faut dans tous les cas (mode BLOB ou pas au niveau de la base de données)

PS: Idem si vous voulez mettre des resources (globales ou de l’objet), il faut utiliser une des méthode resourceAttach cf. Mail

Bonjour,

On a adapté notre solution pour utiliser documentAttach,
mais le script nous retourne une NullPointerException,

Ces objectDB peices jointes existent bien, et les document associés aussi car la premiere version arrive bien a les récupérer

Sans votre code et sans le détail de la stacktrace de l’erreur que vous avez on ne peut pas vous aider…

Voici un exemple qui marche (unit test sur le DemoProduct de la démo):

@Override
public String unitTests() {
	try {
		if (select("1")) {
			Mail m = new Mail(getGrant());
			return m.sendWithAttach(
				"dazoulay@simplicite.fr", // to
				"demo@simplicite.fr", // from
				null, // cc,
				null, // bcc,
				"test", // subject
				"Hello <b>world</b>", // body
				Mail.MAIL_MIME_TYPE_HTML, // body MIME type
				new Mail.MailAttach[] {
					m.documentAttach(this, getField("demoPrdPicture")),
					m.documentAttach(this, getField("demoPrdBrochure"))
				} // Attachements
			) ? "Sent" : "Not sent";
		} else
			return "Not found";
	} catch (Exception e) {
			AppLog.error(null, e, getGrant());
			return e.getMessage();
	}
}

En executant ce test je reçois bien la photo et la brochure du produit en PJ:

A adapter dans votre cas bien entendu.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.