Blob


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