j’ai fini par comprendre comment ça fonctionnait, le bouchonnage des fonctions natives de PHP ; et j’ai proposé un petit ajout à la doc Atoum, ça évitera aux suivants de s’arracher les cheveux \o/
En reprenant l’exemple d’hier avec la fonction mail(), voilà un exemple :
$that = $this;
$this
->assert('mail')
->given($this->newTestedInstance())
->if($this->function->mail = function (string $to, string $subject, string $message, $headers, string $params = '') use ($that) {
$that
->string($to)
->isNotEmpty()
->boolean(filter_var($to, FILTER_VALIDATE_EMAIL) !== false)
->isTrue()
->string($subject)
->isNotEmpty()
->string($message)
->isNotEmpty()
;
return true;
})
->then
->boolean($this->testedInstance->sendMail('contact@example.com', 'Subject', 'Content'))
->isTrue()
->function('mail')
->wasCalled()
->once()
->assert('mail failed')
->given($this->newTestedInstance())
->if($this->function->mail = fn () => false)
->then
->exception(function () { $this->testedInstance->sendMail('contact', 'Subject', 'Content'); })
;
Et on peut donc définir exactement comment va réagir la fonction, voire même comme ci-dessus exploiter Atoum pour tester les paramètres fournis.
En gros, l’expression $this->function->function_native_PHP =
suivi d’une valeur, d’une expression voire d’une fonction anonyme permet de faire ça.
1 De Gilles -
Bonjour, Comme vous semblez avoir testé récemment la fonction d’envoi de mail, je voulais savoir s’il y avait une quelque chose à paramétrer dans le cas de figure d’une authentification smtp (ce qui semble nécessaire sur notre hébergement Ikoula). Actuellement les mails envoyés par le blog (récupération de mot de passe, notification par mail de nouveaux commentaires avec le plugin idoine,…) aboutissent par un message « unable to send e-mail » (messageries de destination Google ou autres).
Bon début de retraite en passant ! Gilles
2 De Franck -
Il n’existe rien au niveau de Dotclear pour authentifier l’envoi SMTP, à part utiliser la fonction
_mail()
à définir dans le fichierinc/config.php
, fonction qu’il faudra modifier en fonction des pré-requis de l’hebergeur.3 De Gilles -
Merci J’y vois un peu plus clair. Ca m’a aussi aidé à trouver un code sur le forum dc, j’ai espoir que ça colle à mon cas : https://forum.dotclear.org/viewtopic.php?id=49170
4 De Gilles -
Bonjour, Je reviens sur ce sujet pour un avis. Il semblerait que l’authentification SMTP qui soit un pré requis de certains hébergements mutualisés, puissent se faire sans utiliser une librairie tierce (expl phpmail) et avec l’actuel sendmail. Dans ce cas il faudrait que la fonction mail() paramètrable dans config.php de dc accepte une cinquième entrée « options » qui sert à passer identifiant et mot de passe (https://www.w3docs.com/snippets/php/php-ini-smtp-how-do-you-pass-username-password.html). J’avoue être un peu coincé. Gilles
5 De Franck -
Oui mais non parce qu’il faudrait dans ce cas que ces nouveaux paramètres soient pris en compte par la fonction
MailSocket::mail()
ce qui n’est pas le cas pour l’instant.En attendant ouvrir un ticket serait pas mal pour qu’on oublie pas ça dans les modifications futures.
6 De Gilles -
Ok pour le ticket. Dernière question, derrière MailSocket::mail() ce n’est rien d’autre que la fonction sendmail « native » des systèmes Linux ou bien est ce encore une autre librairie ?
7 De Franck -
Non c’est du code interne.