[FreeBSD] Mail kuldese C progibol

Ferenc Szentpetery szefe at kvif.hu
2002. Május. 17., P, 06:15:34 CEST


Ime egy ujabb megoldas:

1. Itt van egy C fuggveny, ami nyomtat lpr-rel:

#define PRINT_DEVICE "lp"
#define PRINT_COMMAND "lpr"
#define PRINT_PATH "/usr/bin/"
#define PRINT_COMMANDPATH "/usr/bin/lpr"
#define PRINT_PARAM1 "-P"PRINT_DEVICE

void nyomtat(char *s)
{
        int n, fd1[2], fd2[2];
        int pid;

        if ((pipe(fd1) < 0) || (pipe(fd2) < 0))
        {
          fprintf(stderr, "Hiba van !!!\n);");
          fflush(stderr);
          return;
        }
        if ((pid = fork()) < 0)
        {
          fprintf(stderr, "Mar megint hiba van \n");
          fflush(stderr);
          return;
        }
        else if (pid > 0)
        {
          close(fd1[0]);
          close(fd2[1]);
          write(fd1[1], s, strlen(s));
          close(fd1[1]);
        }
        else
        {
          close(fd1[1]);
          close(fd2[0]);
          dup2(fd1[0], STDIN_FILENO); //duplikalt file leiro
          close(fd1[0]);
          execl(PRINT_COMMANDPATH, PRINT_COMMAND, PRINT_PARAM1, (char
*)0);
          printf("nyomtatas errno: %d\n", errno);
          exit(0);
        }
}

2. Ez pedig egy perl programreszlet, ami megmutatja, hogyan
lehet a sendmail-re rakenyszeriteni egy levelet:

$mailer = '/usr/sbin/sendmail';
$adminaddr = "valakitol\@valahonnan.hu";
$adminname = 'ATeNeved';
$email = 'valakinek\@valahova.hu';

open (MAIL, "|$mailer -i -t -f $adminaddr $email") || &error("MAIL");
print MAIL "From: $adminname <$adminaddr>\n";
print MAIL "To: $nev1 $nev2 <$email>\n";
print MAIL "Subject: azonosito: $azon\n";
print MAIL "Content-Type: text/plain; charset=charset=\"ISO-8859-1\"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "\n";
print MAIL "level szovege jon itt..";
close(MAIL);

Tehat ez a 2 programtoredek, ezekbol ossze lehet rakni a kivant
funkciot.

SzeFe



További információk a(z) BSD levelezőlistáról