Как я могу отправить электронную почту в C? - PullRequest
5 голосов
/ 02 марта 2010

Мне просто интересно, как я могу отправить электронную почту, используя C? Я немного погуглил, но ничего не нашел.

Ответы [ 6 ]

6 голосов
/ 02 марта 2010

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

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

int main() {

        char cmd[100];  // to hold the command.
        char to[] = "sample@example.com"; // 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;
}

Я знаю, это ужасно, и есть несколько лучших способов сделать это ... но это работает:)

4 голосов
/ 25 февраля 2013

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

3 голосов
/ 02 марта 2010

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

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

Более переносимый способ - использовать 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);
2 голосов
/ 03 марта 2010

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

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

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

  Example
 system ("mail -s test hello@gmail.com < filename")

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

1 голос
/ 02 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...