Comment implémenter un envoi de mail par un programme C ? existe-t-il une bibliothèque prévue à cet effet ?
Merci.
Version imprimable
Comment implémenter un envoi de mail par un programme C ? existe-t-il une bibliothèque prévue à cet effet ?
Merci.
Je me suis débrouillé avec le shell unix appelé avec la fonction system du langage C et ai fait une petite fonction d'envoi de mails :
Code:
1
2
3
4
5
6
7
8 int n_Sendmailerror( char * message, char * from, char * to) { char * command = (char *) malloc(256 * sizeof(char)); sprintf(command, "echo \"%s\" | mail -s %s %s", message, from, to); system(command); return 0; }
FUITE DE MÉMOIRE!
En plus, ça manque de const, tu ne vérifies pas que la taille demandée est suffisante (tu peux utiliser ceci), et le cast de malloc() est inutile en C.
de plus, vraisemblablement il manque un "&" à la fin (qua ça se passe en background), mais surtout il n'est pas tenu compte des tailles de from et to ni de la logneur du message...
Crash inévitable :aie:
Mais veut-on vraiment que ça se passe en background?
Personnellement, je resterais synchrone.
Hum,
Les gens, c'est bien d'avoir vu la fuite de mémoire, et le problème du background. Mais il faudrait plutot ce recentré sur la question de base. Comment on envoie un courriel en C. Certes, vadereto33 c'est donné une réponse... en utilisant le shell, mais on perd la portabilité du C en faisant ça. ( En plus je n'ai jamais aimé utiliser le shell dans du code C ).
Donc ( et comme moi même je suis interessé ), comment peut on envoyer un courriel ( bibliothèque ? , commandes spéciales ? ).
Merci
Ben, il y a touhours la façon brute à base de sockets, mais j'ignore s'il existe des bibliothèques plus développées.
Bah, il y a toujours le source code de mail.. (fait pour unixoides au départ, donc source code disponible).
M'enfin c'est pas mal se compliquer la vie...
normalement mail est relativement standard...
Alors on peut réinventer la roue et repartir vers les sockets comme tu le dis...
Mais pour répondre à LittleWhite, ce serait le seul moyen d'être réellement portable.... (et encore, vu le portage des sockets sur Win)...
Et je ne sais pas, mais faire un mini-fichier de config d'une ligne qui comporte la ligne de commande et qui est lue au départ du programme me semble pas mal portable et nettement plus facile d'utilisation ;-)
Config :
Code:
1
2 ECHO = "echo " MAIL = " | mail "
Code:sprintf(command, "%s \"%s\" %s %s %s", CommandEcho, message, CommandMail, from, to);
Utiliser le protocole SMTP (RFC 5321) : si c'est pour un mail simple (juste du texte, donc), ça ne casse pas trois pattes à un canard de le faire à la main, y'en a pour 50 lignes de code à tout casser... Cela ne se complique que lorsque l'on cherche à envoyer des mails "complexes", ou avec des attaches.
Un coup de recherche, et on trouve ce code C++/Windows qui donne déjà toutes les instructions de base pour envoyer un mail simple. Plus qu'à convertir ça en C + sockets BSD, et t'as ton code portable.