home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / comm / bbs / eazybbs / source / eazy2mail.c < prev    next >
C/C++ Source or Header  |  1994-09-08  |  3KB  |  149 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <fcntl.h>
  5. #include <time.h>
  6. #include <proto/dos.h>
  7. #include <proto/exec.h>
  8.  
  9.  
  10.  
  11. #define VERSION "1.9"
  12. static char *version = "\0$VER: eazy2mail " VERSION " (" __AMIGADATE__ ")";
  13.  
  14.  
  15.  
  16. #define MAIL_BATCHSCRIPT    "MB_DATA:UUCP/DeliverMail.scp"
  17. #define MAIL_BATCHLOCK        "MB_DATA:UUCP/DeliverMail.lock"
  18. #define MAIL_BATCHNUM        "MB_DATA:UUCP/DeliverMail.num"
  19. #define MAIL_BATCHFILE        "MB_DATA:UUCP/Mail.%ld"
  20.  
  21.  
  22.  
  23. void space2under(char *s)
  24. {
  25.     if (s) {
  26.         while (*s) {
  27.             if (*s == ' ')
  28.                 *s = '_';
  29.             s++;
  30.         }
  31.     }
  32. }
  33.  
  34.  
  35.  
  36. int main(int argc, char *argv[])
  37. {
  38.     if (argc == 6) {
  39.         FILE *fp, *scp, *lock, *num;
  40.         long seqnum = 0;
  41.         char tmp[80];
  42.  
  43.         /* try to get lock */
  44.  
  45.         while (!(lock = fopen(MAIL_BATCHLOCK, "w")))
  46.             Delay(100);
  47.  
  48.         /* we have the lock, now want the maximum seq-number */
  49.  
  50.         if (num = fopen(MAIL_BATCHNUM, "r")) {
  51.             fscanf(num, "%ld", &seqnum);
  52.             fclose(num);
  53.         }
  54.  
  55.         ++seqnum;
  56.  
  57.         sprintf(tmp, MAIL_BATCHFILE, seqnum);
  58.  
  59.         if (seqnum > 1) {
  60.             while (!(scp = fopen(MAIL_BATCHSCRIPT, "a"))) {
  61.                 Delay(100);
  62.             }
  63.         }
  64.         else {
  65.             while (!(scp = fopen(MAIL_BATCHSCRIPT, "w"))) {
  66.                 Delay(100);
  67.             }
  68.             fprintf(scp, "delete %s\n", MAIL_BATCHNUM);
  69.         }
  70.  
  71.         /* write back new seq-number while script-file is locked by us */
  72.         if (num = fopen(MAIL_BATCHNUM, "w")) {
  73.             fprintf(num, "%ld\n", seqnum);
  74.             fclose(num);
  75.         }
  76.  
  77.         /* now finish writing to script-file */
  78.         fprintf(scp, "sendmail <%s\ndelete %s\n", tmp, tmp);
  79.  
  80.         if (fp = fopen(tmp, "w")) {
  81.             register int c = 0, last = 0;
  82.             time_t t;
  83.             struct tm *ut;
  84.             char uname[16];
  85.             char *sname = argv[2];
  86.             char *tonam = argv[4];
  87.             char *realn = argv[3];
  88.             char *sbjct = argv[5];
  89.  
  90.             time(&t);
  91.             ut = gmtime(&t);
  92.  
  93.             strcpy(uname, argv[1]);
  94.             space2under(uname);
  95.  
  96.             fprintf(fp, "From: %s@%s (%s)\n", uname, sname, realn);
  97.             fprintf(fp, "To: %s\n", tonam);
  98.             fprintf(fp, "Sender: eazybbs@%s\n", sname);
  99.             fprintf(fp, "Subject: %s\n", sbjct);
  100.             fprintf(fp, "MIME-Version: 1.0\n");
  101.  
  102.             /* This is not strictly MIME compliant, but who cares? */
  103.  
  104.             fprintf(fp, "Content-Type: text/plain; charset=ISO-8859-1\n");
  105.             fprintf(fp, "Content-Transfer-Encoding: 8bit\n");
  106.             fprintf(fp, "\n");
  107.  
  108.             while ((c = getchar()) != EOF) {
  109.                 if (last == '\\') {
  110.                     switch (c) {
  111.                     case '\\':
  112.                         fputc(c, fp);
  113.                         break;
  114.                     default:
  115.                         break;
  116.                     }
  117.                     last = 0;
  118.                 }
  119.                 else if (c == '\\') {
  120.                     last = c;
  121.                 }
  122.                 else {
  123.                     fputc(c, fp);
  124.                     last = c;
  125.                 }
  126.             }
  127.             fprintf(fp, "\n");
  128.  
  129.             fclose(fp);
  130.         }
  131.  
  132.         /* close script-file here to prevent it from being started */
  133.         fclose(scp);
  134.  
  135.         while (chmod(MAIL_BATCHSCRIPT, S_IWRITE | S_IREAD | S_IEXECUTE | S_IDELETE | S_ISCRIPT))
  136.             Delay(100);
  137.  
  138.         /* close lock-file here to prevent other ports from processing mails */
  139.         fclose(lock);
  140.  
  141.     }
  142.     else {
  143.         fprintf(stderr, "\033[1;33mEazyBBS\033[0m © 1988-1994 Andreas M. Kirchwitz\n"
  144.             "Usage: eazy2mail \033[3m<user> <site> <real> <to> <subject> \033[0m <text\n");
  145.     }
  146.  
  147.     exit(0);
  148. }
  149.