URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1909
[ Назад ]

Исходное сообщение
"программная отправка сообщений С"

Отправлено AlexFromNN , 24-Июл-03 17:49 
ситуация следующая: необходимо отправлять почтовые сообщения из под FreeBSD. Язык С. Помогите примерчиком, пожалуйста. В Сях я практически на нуле. Те примеры, которые я нарываю, используют виндовые билиотеки. Чуствую, что будет так же, как в PHP, а примеров не вижу. Книжки еще не нарыл.

Содержание

Сообщения в этом обсуждении
"программная отправка сообщений С"
Отправлено XMan , 24-Июл-03 18:41 
Используй внешнюю программу. Например, mail (у меня под линухом полный путь "/usr/bin/mail"; под BSD незнаю, но наверное "/usr/local/bin/mail").
Код наподобии этого:

#include <unistd.h>

...
int fifo[2];
if (pipe(&fifo) == -1) {
  perror("Can't create pipe");
  return код_возврата;
};
switch (fork()) {
  case 0: // потомок
           if (dup2(stdin,fifo[0]) == -1) {
             perror("Can't redirect sdtin to fifo");
             exit(код_возврата);
           };
           execl("/usr/bin/mail","/usr/bin/mail","-s","\"тема сообщения\"","user@host.domain",NULL);
           perror("Can't execute mail program");
           exit(код_возврата)
  case -1: // ошибка
           perror("Can't fork");
           close(fifo[0]);
           close(fifo[1]);
           return код_возврата;
  default: // родитель
           write(fifo[1],"текст сообщения",strlen("текст сообщения"));
           close(fifo[0]);
           close(fifo[1]);
};
...

За правильность синтаксиса не ручаюсь, но с мыслЁй совпадает полностью :)

Теоретически, есть готовые библиотеки, но сам про них ничего незнаю - никогда не нужно было. Третий путь самый сложный - писать SMTP-клиента.

PS. А C/C++ ты зря незнаешь :)


"программная отправка сообщений С"
Отправлено AlexFromNN , 24-Июл-03 18:53 
Спасибо. Завтра с утра буду пробовать.
Основаня специализация у меня сейчас - 1C, ну есть еще FoxPro, Delphi, PHP и СУБД. А сейчас решили сбацать кое-что на С

"программная отправка сообщений С"
Отправлено AlexFromNN , 25-Июл-03 09:30 
мда, посмотрел я внимательно, к сожалению не подходит - программа должна уметь обращаться к другому серваку, у нас три сервера :(

"программная отправка сообщений С"
Отправлено XMan , 25-Июл-03 15:44 
В смысле - должне уметь обращаться к другому серваку ?

"программная отправка сообщений С"
Отправлено Асен Тотин , 27-Июл-03 18:39 
А у тебя обезатьльно должнобыть на С? На Perl все легко получается, тебе нужны только два модуля: Mime:Base64 и  Mail:Sender.

WWell,


"программная отправка сообщений С"
Отправлено J , 28-Июл-03 12:56 
>А у тебя обезатьльно должнобыть на С? На Perl все легко получается,
>тебе нужны только два модуля: Mime:Base64 и  Mail:Sender.
>
>WWell,


а при чем тут перл?

создается нужное количество сокетов, коннектится к нужных хостам на 25 порт, а далее все очень просто, например (проверка телнетом):
telnet x.x.x.x 25
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
220 x.x.net ESMTP Exim x.x #x Mon, 28 Jul 2003 11:54:23 +0300
mail from: x@x.net
250 <x@x.net> is syntactically correct
rcpt to: x@x.net
250 <x@x.net> is syntactically correct
data
354 Enter message, ending with "." on a line by itself
test
.
250 OK id=19h3mQ-0001tJ-00
quit
221 x.x.net closing connection
Connection closed by foreign host.

Полностью протокол можно прочитать в соответствующем RFC.