Mail & attachments -> wrong type

Hi,

I’m integrating the new Mail management provide by 4D and it seems really fine.
I’m in trouble with attachment (just one for the moment) as PDF. From the documentation, it should work but I got an error message (see picture).

[]29554392;“Your comment here…”[/]

I don’t see where I have an issue.
Any idea?

Patrick

Apparemment ton mail est en html et le cid est vide, or ladocdikeu :
« cid…Texte…in…ID de la pièce jointe (messages HTML uniquement) »
« Cet ID correspond à la valeur de l’en-tête Content-Id et ne sera utilisé que dans les messages HTML. »
même s’il est dit plus loin que le cid n’a de rôle que pour l’affichage “inline” de la pièce jointe, au pif, j’essaierais d’ajouter un cid.

Autre possibilité, ton objet $mail a 2 propriétés UUIDmember et UUIDmessage que je ne vois pas dans la doc.

je vais voir si cela est du aux 2 propriétés, mais là j’ai un doute car l’erreur est sur la prop “attachments” et dit que le type de la PJ n’est pas le bon

bizarre tout de même

Patrick

Bonjour,

Comment est affecté l’attachment ? Avec MAIL new attachment ?

Bonjour

oui.

voici le code de constitution de l’email:

<code 4D>
$mail:=New object
// Récupération du texte du mail
$mail.subject:=Form.ent.ObjetMessage
$mail.htmlBody:=HTML_CheckCaracteres (Form.ent.Texte)
$mail.htmlBody:=""+$mail.htmlBody+""

If (Form.documents.length>0)
	$mail.attachments:=New collection()
	
	For each ($entity;Form.documents)
		$uuid:=$entity.PK_UUID
		$nomDocument:=Storage.Shared.dossier_pdf+$entity.Nom+$entity.Extension
		
		If (Test path name($nomDocument)=Is a document)
			DELETE DOCUMENT($nomDocument)
		End if 
		
		QUERY([Documents];[Documents]PK_UUID=$uuid) 
		BLOB TO DOCUMENT($nomDocument;[Documents]Doc)  
		
		$mail.attachments.push(MAIL New attachment($nomDocument;$entity.Nom))
		
	End for each 
	ZAmnistiePartielle (->[Documents])  // libérons la (dernbière) fiche immédiatement
End if 

// Pour chacun des destinataires
For each ($entity;Form.destinataires)
// Récupération des infos du destinataire
$Config:=ds.Membres.query(“PK_UUID = :1”;$entity.PK_UUID).first().allContacts.query(“Nature = :1 and Principal = :2”;“mail@”;True).first()
$mail.to:=$Config.Coordonnee

// Sauvegarder dans la table Messages pour faire le lien
$mail.UUIDMember:=$entity.PK_UUID
$mail.UUIDMessage:=Form.ent.PK_UUID

	$envoyé:=mail_sendIt (->$mail)
	ORDA_UpdateFicheSelonDataForm ("Messages")
End for each 

</code 4D>

et mail_sendIt

<code 4D>
// Code coupé ici …

// Paramétrage du processus d’envoi d’email
$smtp:=New object
$smtp.host:=$TbSMTPHost{$pos}
$smtp.user:=$TbUsername{$pos}
$smtp.port:=Num($TbSMTP_Port{$pos})
$smtp.password:=$TbPassword{$pos}
$smtpTransporter:=SMTP New transporter($smtp)

$mail:=$1->
$mail.from:=$TbEmail{$pos}
$status:=$smtpTransporter.send($mail)

// Verification if connection check is success or not and display a message
If ($status.success)
//ALERT(“Email envoyé”)
$0:=True
Else
ALERT("Erreur # “+String($status.status)+”, "+$status.statusText)
End if

</code 4D>

Même en déplacent les 2 propriétés, cela ne change rien.

Pour info, le “cid” n’est utile que pour afficher des images ou vidéos “inlinées” dans le message HTML.

Je vais essayer de réduire le problème et comprendre pourquoi vous avez ce message.

Bonjour Yannick,

l’envoi de l’email fonctionne si j’exécute ces 2 méthodes l’une à la suite de l’autre et ne fonctionne pas si j’exécute la seconde (celle de l’envoi) dans le cadre d’un process à part qui s’exécute en tâche de fond.
Donc, tant qu’il n’y a que quelques destinataires et que les PJ ne sont pas lourdes, le temps d’exécution est “rapide”, cela devient vite catastrophique pour la suite.

Patrick

: Patrick EMANUEL

l’envoi de l’email fonctionne si j’exécute ces 2 méthodes l’une à la
suite de l’autre et ne fonctionne pas si j’exécute la seconde (celle
de l’envoi) dans le cadre d’un process à part qui s’exécute en tâche
de fond.
Voulez-vous dire que le même message envoyé de deux manières différentes (dans un worker et dans un process) ne produit pas le même résultat ? Auriez-vous un sample réduit ?

: Patrick EMANUEL

Donc, tant qu’il n’y a que quelques destinataires et que les PJ ne
sont pas lourdes, le temps d’exécution est “rapide”, cela devient
vite catastrophique pour la suite.
Le temps d’envoi est nécessairement proportionnel au nombre de pièces jointes ainsi qu’à leur taille, mais quand vous dites catastrophique… diriez-vous que c’est plus lent qu’avec 4DIC ?

Je viens de faire le test, avec une version modifiée de vos sources et pièce jointe différente, et je n’ai rencontré aucun souci.

Est-ce que la commande https://doc.4d.com/4Dv17R4/4D/17-R4/MAIL-Convert-to-MIME.301-4017429.fe.htmlMAIL Convert to MIME> retourne la même erreur ou produit-elle un message MIME ?

: Yannick TRINH

Voulez-vous dire que le même message envoyé de deux manières
différentes (dans un worker et dans un process) ne produit pas le
même résultat ? Auriez-vous un sample réduit ?.

Je vais essayer de créer une base reproductible sinon, je transmettrais l’application (mais en MP)

: Yannick TRINH

Le temps d’envoi est nécessairement proportionnel au nombre de pièces
jointes ainsi qu’à leur taille, mais quand vous dites
catastrophique… diriez-vous que c’est plus lent qu’avec 4DIC ?

Non, non !

Je viens de faire le test, avec une version modifiée de vos sources et pièce jointe différente, et je n’ai rencontré aucun souci.

: Yannick TRINH

Est-ce que la commande
<https://doc.4d.com/4Dv17R4/4D/17-R4/MAIL-Convert-to-MIME.301-4017429.
e.html>MAIL Convert to MIME> retourne la même erreur ou produit-elle
un message MIME ?

Pas essayé. Je regarde cela et vous tiens au courant

Rebonjour

Je confirme que dans un process séparé, j’ai le problème.
Voici ce que cela me donne :

[]29579068;“Your comment here…”[/]

pour

[]29579071;“Your comment here…”[/]

Pouvez-vous me contacter en privé ?

Cordialement

Patrick

Bonjour

j’ai continué mes tests et c’est bien la présence d’une pièce jointe qui fait que l’envoi n’est pas possible depuis un autre process. En envoi direct, cela fonctionne sans problème.

Patrick

Bonsoir,

Avez-vous pu réduire le problème dans une petite base ?

Cordialement

Non. Il faut que j’extrais ce qui correspond à cela.
C’est dans ma liste des tâches à faire

Patrick

Bonjour

voici une base exemple
sans PJ ca passe
avec ca ne passe pas

https://forums.4d.com/4DBB_Main/x_User/274528/files/29609888.zip

Patrick

Bonjour,

Avez-vous pu regarder la base ? :pray:

Patrick

Bonsoir

Désolé non, pas eu le temps (je n’avais d’ailleurs pas vu votre message avant ce soir).
Je regarde dès Lundi.

Merci pour le feedback et le temps passé

Pas de soucis.
Merci à vous de prendre le temps aussi :slight_smile:

Bon WE

Patrick

Bonjour,

Pour info, j’ai jeté un oeil à votre base (enfin façon de parler parce que ça m’a pris un peu plus de temps que cela) et il ne s’agit pas, à proprement parler d’un bug, mais plutôt d’un usage inattendu de la fonctionnalité :wink:

La commande MAIL New attachment ne renvoie pas un objet 4D mais plutôt une représentation 4D d’un objet c++ (on ne peut d’ailleurs pas le modifier contrairement aux objet créés par New Object). Cet objet ne contient pas seulement les quelques attributs visibles (path, name, filename etc…) il embarque aussi le contenu du fichier ou du blob passé en paramètre. Quand on sauvegarde cet objet dans un enregistrement 4D et qu’on le restitue dans une variable objet, on perd toute ces données non visibles et surtout il ne correspond plus au type attendu pour un attachment.

C’est pour cette raison que vous avez le message d’erreur “type invalide pour l’attribut: attachments”.

Maintenant, il me semble que votre besoin de stocker un objet mail est assez légitime, alors je vais voir si une modification est possible ou non.

Cordialement

Bonsoir,

Merci d’avoir pris le temps de regarder.
J’utilise cette méthode de stocker une action non prioritaire de manière à la déporter sur une autre machine éventuellement en cas d’une utilisation C/S.

Je vais donc conserver un envoi direct depuis le poste qui créé le mail, mais oui, cela serait intéressant de pouvoir déporter :slight_smile:

Bonne soirée

Patrick