2010-03-02 3 views
4

Je me demande simplement comment puis-je envoyer des emails en utilisant C? Je l'ai googlé un peu, mais je n'ai rien trouvé de convenable.Comment puis-je envoyer un e-mail en C?

+1

double possible de [l'envoi d'un e-mail d'un programme C/C++ sous Linux] (http://stackoverflow.com/questions/9317305/sending-an-email-from- acc-program-in-linux) – rogerdpack

Répondre

1

Exécutez sendmail et passez l'e-mail à son entrée standard (sur les systèmes de type Unix) ou utilisez une bibliothèque client SMTP pour vous connecter au serveur de messagerie SMTP.

4

Les choix les plus évidents:

  1. Utilisez system() pour appeler un outil de ligne de commande existante pour envoyer du courrier. Pas très portable (nécessite un outil externe avec une syntaxe d'appel donnée, etc.) mais très facile à implémenter.
  2. Utilisez une bibliothèque.
  3. Implémentez SMTP et parlez directement à un serveur de messagerie. Beaucoup de travail.
+0

En effet, je veux apprendre à implémenter SMTP moi-même comme vous l'avez mentionné dans votre troisième option. Connaissez-vous un tutoriel, un article ou un code source? – mehmet6parmak

+3

À l'avenir, essayez de ne pas recommander system() et à la place la famille de fonctions exec(). –

+1

@rogue: Merci. Mais system() est plus portable, exec *() est Unix seulement. – unwind

4

Sur Unix, vous pouvez utiliser system et sendmail comme les systèmes comme suit:

#include <stdio.h> 
#include <string.h> 

int main() { 

     char cmd[100]; // to hold the command. 
     char to[] = "[email protected]"; // email id of the recepient. 
     char body[] = "SO rocks"; // email body. 
     char tempFile[100];  // name of tempfile. 

     strcpy(tempFile,tempnam("/tmp","sendmail")); // generate temp file name. 

     FILE *fp = fopen(tempFile,"w"); // open it for writing. 
     fprintf(fp,"%s\n",body);  // write body to it. 
     fclose(fp);    // close it. 

     sprintf(cmd,"sendmail %s < %s",to,tempFile); // prepare command. 
     system(cmd);  // execute it. 

     return 0; 
} 

Je sais que laid et il y a plusieurs meilleures façons de le faire ... mais ça fonctionne :)

2

Vous pouvez également utiliser la commande mail.

A l'intérieur du programme C, vous pouvez envoyer le courrier à l'utilisateur à l'aide de la commande de courrier et de la fonction système.

system("mail -s subject address < filename") 

    Example 
system ("mail -s test [email protected] < filename") 

Remarque: Le fichier doit exister. Si vous voulez taper le contenu, vous pouvez taper le contenu dans le fichier, puis envoyer ce fichier au destinataire.

2

Utilisez libcurl. Il prend en charge SMTP et TLS, au cas où vous auriez besoin de vous authentifier pour l'envoyer. Ils offrent certains example C code.

1

Une façon plus portable est d'utiliser libquickmail (http://sf.net/p/libquickmail), sous licence GPL. Il permet même d'envoyer des pièces jointes.

code Exemple:

quickmail_initialize(); 
    quickmail mailobj = quickmail_create(FROM, "libquickmail test e-mail"); 
    quickmail_set_body(mailobj, "This is a test e-mail.\nThis mail was sent using libquickmail."); 
    quickmail_add_attachment_file(mailobj, "attachment.zip", NULL); 
    const char* errmsg; 
    if ((errmsg = quickmail_send(mailobj, SMTPSERVER, SMTPPORT, SMTPUSER, SMTPPASS)) != NULL) 
    fprintf(stderr, "Error sending e-mail: %s\n", errmsg); 
    quickmail_destroy(mailobj); 
Questions connexes