Bonjour,
Le choix du pseudo, c'est pour rassurer ? ;-)
Post by Le FouSur un de mes sites j'ai un formulaire qui permet d'envoyer un message à
mon adresse e-mail via un script PHP utilisant la fonction mail().
Jusque-là, rien de mystérieux.
Post by Le FouJ'aimerais que les internautes puissent joindre un fichier (image) de
leur disque dur à ce message.
Or tous les scripts que j'ai trouvés, se contentent d'uploader le
fichier image sur le serveur du site...
Ben oui, c'est le processus classique :
- Le fichier est chargé temporairement sur le serveur.
- Le script PHP de traitement incorpore le fichier à l'e-mail et envoie
ça à l'adresse passée, avec la fonction "mail()" ou autre.
- Entre temps, le script peut stocker le fichier où on veut.
Post by Le FouConnaissez-vous un script qui récupère le fichier sur le disque de
l'internaute et l'envoie en pièce jointe à une adresse e-mail ?
Là, il y a peut-être quelques problèmes d'interprétation.
D'abord, aucun script serveur ne peut "récupérer" un fichier "sur" un
poste client. Cela créerait de sérieux trous de sécurité.
Donc, au mieux, un premier script fabrique une page Web affichant le
formulaire demandant les coordonnées et le choix du fichier. Ensuite, un
deuxième script reçoit ces données et les traite comme il se doit.
Enfin, un dernier script confirme souvent l'interaction.
D'autre part, l'appellation "pièce jointe" est un peu trompeuse en
regard de son équivalent courrier, sauf à considérer que l'e-mail
correspond à l'enveloppe, et non pas à la lettre d'accompagnement.
En réalité, le fichier est le plus souvent incorporé dans le corps de
l'émail, avec un système de séparation de données basé sur des
délimiteurs (boundary) et les types MIME.
Mais il peut aussi s'exprimer sous forme de lien externe dans l'e-mail.
C'est le cas dans beaucoup de messages publicitaires ou de newsletters,
dont les fichiers image restent stockés sur un serveur HTTP. Ils sont
appelés au moment de la lecture de l'e-mail et font généralement l'objet
d'un message de sécurité autorisant ou non ce transfert.
Dans tous les cas, chaque e-mail envoyé par SMTP ne correspond qu'à un
seul fichier transféré. Il en est de même pour chaque e-mail reçu par
POP ou IMAP, car s'il y a des liens externes il faut un autre protocole
pour les récupérer (HTTP par ex.).
Pour répondre de façon plus concrète, il existe plusieurs bibliothèques
PHP permettant de gérer, pour les envois complexes d'e-mail, toutes les
fonctionnalités requises, comprenant entre autres :
- L'encodage des données.
- La génération de délimiteurs.
- La fusion des données dans le corps de l'e-mail.
- La génération d'entêtes additionnelles (copie, copie cachée, etc.).
- L'envoi successif à plusieurs destinataires.
- Le choix du système de messagerie sortante (mail(), sendmail, SMTP).
Pour ma part, j'ai déjà utilisé avec satisfaction cette bibliothèque :
http://phpmailer.worxware.com/index.php?pg=phpmailer
Mais je suis sûr qu'il y a des tas d'autres réponses avec une simple
recherche Google du type "php mail library" !
Cordialement,
Pascal