2010-03-02 5 views
4

Мне просто интересно, как я могу отправить электронное письмо с помощью C? Я немного погубил, но не смог найти ничего подходящего.Как отправить электронное письмо на C?

+1

Возможный дубликат [отправка по электронной почте из C программы/C++ в Linux] (http://stackoverflow.com/questions/9317305/sending-an-email-from- acc-program-in-linux) – rogerdpack

ответ

1

Запустите sendmail и отправьте электронное письмо на его стандартный вход (в unix-подобных системах) или используйте некоторую клиентскую библиотеку SMTP для подключения к почтовому серверу SMTP.

4

Наиболее очевидный выбор:

  1. Использование system() вызвать существующий инструмент командной строки для отправки почты. Не очень портативный (требуется внешний инструмент с заданным синтаксисом вызова и т. Д.), Но очень прост в реализации.
  2. Используйте некоторую библиотеку.
  3. Внесите SMTP самостоятельно и поговорите непосредственно с почтовым сервером. Много работы.
+0

Действительно, я хочу узнать, как реализовать SMTP самостоятельно, как вы упомянули в своем третьем варианте. Вы знаете какой-либо связанный учебник, статью или исходный код? – mehmet6parmak

+3

В будущем попробуйте не рекомендовать system() и вместо этого exec() семейство функций. –

+1

@rogue: Спасибо. Но system() более портативен, exec *() - это только Unix. – unwind

4

В Unix подобных системах вы можете использовать system и sendmail следующим образом:

#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; 
} 

Я знаю, что его уродливым и Есть несколько более эффективных способов сделать это ... но это работает :)

2

Вы также можете использовать почтовую команду.

Внутри программы C, используя почтовую команду и системную функцию, вы можете отправить почту пользователю.

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

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

Примечание: Файл должен существовать. Если вы хотите ввести контент, yiu может ввести содержимое внутри файла, а затем отправить этот файл получателю.

2

Использовать libcurl. Он поддерживает SMTP, а также TLS, если вам нужно пройти аутентификацию для отправки. Они предлагают некоторые example C code.

1

Более портативный способ заключается в использовании libquickmail (http://sf.net/p/libquickmail), имеющего лицензию под GPL. Он даже позволяет отправлять вложения.

Пример кода:

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); 
Смежные вопросы