Mercurial > hg > mlmmj
view src/mlmmj-process.c @ 0:21ce01de8109
Initial revision
author | mmj |
---|---|
date | Thu, 22 Apr 2004 04:02:09 +1000 |
parents | |
children | 762570b02394 |
line wrap: on
line source
/* Copyright (C) 2002, 2003 Mads Martin Joergensen <mmj at mmj.dk> * * $Id$ * * This file is redistributable under version 2 of the GNU General * Public License as described at http://www.gnu.org/licenses/gpl.txt */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include "mlmmj-process.h" #include "mlmmj.h" #include "wrappers.h" #include "strip_file_to_fd.h" #include "header_token.h" #include "find_email_adr.h" #include "incindexfile.h" #include "getlistaddr.h" #include "listcontrol.h" #include "strgen.h" void free_str_array(char **to_free) { int i = 0; while(to_free[i]) free(to_free[i++]); free(to_free); } static void print_help(const char *prg) { printf("Usage: %s -L /path/to/chat-list\n" " -m mailfile\n", prg); exit(EXIT_SUCCESS); } int main(int argc, char **argv) { char *donemailname = 0; const char *badheaders[] = {"From ", "Return-Path:", 0}; int donemailfd, opt; char *listdir = 0; char listadr[READ_BUFSIZE]; char tovalue[READ_BUFSIZE]; char *mailfile = 0; char *headerfilename = 0; char *footerfilename = 0; FILE *headerfile, *footerfile, *rawmailfile; struct email_container toemails; while ((opt = getopt(argc, argv, "hVm:L:")) != -1) { switch(opt) { case 'L': listdir = optarg; break; case 'm': mailfile = optarg; break; case 'h': print_help(argv[0]); break; case 'V': print_version(argv[0]); exit(0); } } if(listdir == 0 || mailfile == 0) { fprintf(stderr, "You have to specify -L and -m\n"); fprintf(stderr, "%s -h for help\n", argv[0]); exit(EXIT_FAILURE); } /* get the list address */ getlistaddr(listadr, listdir); donemailname = gendirname(listdir, "/queue/", random_str()); donemailfd = open(donemailname, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); while(donemailfd == -1 && errno == EEXIST) { donemailname = gendirname(listdir, "/queue/", random_str()); donemailfd = open(donemailname, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); } if(donemailfd == -1) { free(donemailname); perror("Cannot open queuemailfile"); exit(EXIT_FAILURE); } printf("%s\n", donemailname); if((rawmailfile = fopen(mailfile, "r")) == NULL) { perror("Cannot open mailfile"); exit(EXIT_FAILURE); } headerfilename = genfilename(listdir, "/customheaders"); headerfile = fopen(headerfilename, "r"); free(headerfilename); footerfilename = genfilename(listdir, "/footer"); footerfile = fopen(footerfilename, "r"); free(footerfilename); strip_file_to_fd(rawmailfile, donemailfd, badheaders, headerfile, footerfile, tovalue); close(donemailfd); fclose(rawmailfile); unlink(mailfile); if(tovalue) { find_email_adr(tovalue, &toemails); if(index(toemails.emaillist[0], RECIPDELIM)) listcontrol(donemailname, listdir, toemails.emaillist[0]); } close(donemailfd); if(headerfile) fclose(headerfile); execlp(BINDIR"mlmmj-send", "mlmmj-send", "-L", listdir, "-m", donemailname, 0); fprintf(stderr, "%s:%d execlp() of "BINDIR"mlmmj-send failed: ", __FILE__, __LINE__); perror(NULL); return EXIT_FAILURE; }