deliver.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "dat.h"
  2. #include "common.h"
  3. void
  4. usage(void)
  5. {
  6. fprint(2, "usage: %s recipient fromfile mbox\n", argv0);
  7. exits("usage");
  8. }
  9. void
  10. main(int argc, char **argv)
  11. {
  12. int fd;
  13. char now[30];
  14. Addr *a;
  15. char *deliveredto;
  16. Mlock *l;
  17. int bytes;
  18. ARGBEGIN{
  19. }ARGEND;
  20. if(argc != 3)
  21. usage();
  22. deliveredto = strrchr(argv[0], '!');
  23. if(deliveredto == nil)
  24. deliveredto = argv[0];
  25. else
  26. deliveredto++;
  27. a = readaddrs(argv[1], nil);
  28. if(a == nil)
  29. sysfatal("missing from address");
  30. l = syslock(argv[2]);
  31. /* append to mbox */
  32. fd = open(argv[2], OWRITE);
  33. if(fd < 0)
  34. sysfatal("opening mailbox: %r");
  35. seek(fd, 0, 2);
  36. strncpy(now, ctime(time(0)), sizeof(now));
  37. now[28] = 0;
  38. if(fprint(fd, "From %s %s\n", a->val, now) < 0)
  39. sysfatal("writing mailbox: %r");
  40. /* copy message handles escapes and any needed new lines */
  41. bytes = appendfiletombox(0, fd);
  42. if(bytes < 0)
  43. sysfatal("writing mailbox: %r");
  44. close(fd);
  45. sysunlock(l);
  46. /* log it */
  47. syslog(0, "mail", "delivered %s From %s %s (%s) %d", deliveredto,
  48. a->val, now, argv[0], bytes);
  49. exits(0);
  50. }