sorter : clean debug
@ bin/sorter \
-d 2 \
- -c ./conf/feeder.conf.dvl \
+ -c ./conf/mailleur.conf.dvl \
-r $(TESTDIR)
#--------------------------------------------------------------------
#To test sender
-sender : clean debug newtest
- @ bin/$@ \
+sender : clean debug newtest
+ @ bin/$@ \
-d 2 \
- -c ./conf/feeder.conf.dvl \
+ -c ./conf/mailleur.conf.dvl \
-r $(TESTDIR) \
example.com-1747663900-0002.todo
-dbgsend : clean debug
+dbgsend : clean debug
@ gdb \
--args \
bin/sender \
-f \
-d2 \
- -c ./conf/feeder.conf.dvl \
+ -c ./conf/mailleur.conf.dvl \
-r $(TESTDIR)
+
#--------------------------------------------------------------------
#testing feed
FEEDPAR = \
@ mkdir -p $(TESTDIR)/var/run
@ mkdir -p $(TESTDIR)/var/spool/$(APPNAME)/{in,out}-logs
@ mkdir -p $(TESTDIR)/var/spool/$(APPNAME)/queue
+ @ mkdir -p $(TESTDIR)/var/spool/$(APPNAME)/mails
@ mkdir -p $(TESTDIR)/usr
@ cp -a \
bin \
status date delta session from rcpt
Char long int char * char * char *
status can be:
- D delayed
- R Ready
- S Sent
+ C completed ;email dispatched
+ D default ;email can not be dispatched
+ L local ;Email stay on local serveur
+ R Remote ;email is to be sent on remote site
#-----------------------------------------------------------
while (*ptr!=(TRATYP *)0) {
switch ((*ptr)->code) {
case 'L' : //local delivery
- (*ptr)->code='D'; //delivery done
+ (*ptr)->code='C'; //delivery done
+ if (eml_store_email(*ptr)==false) {
+ (*ptr)->code='D'; //delivery done
+ (void) rou_alert(0,"%s Unable to deliver email <%s> to <%s>",
+ OPEP,(*ptr)->sessid,(*ptr)->rcptto);
+ }
break;
default :
(void) eml_dumptra((FILE *)0,*ptr);
DB_HOST = localhost
DB_PORT = 5432
#------------------------------------------------
+#Dovecot storage directory
+DOV_MAILDIR = "/var/spool/mailleur/mails"
+#------------------------------------------------
/* exchange. */
/* */
/********************************************************/
+#include <dirent.h>
#include <string.h>
#include "subrou.h"
#include "unieml.h"
#include "geseml.h"
+//dovecot local storage directory
+#define DIRDOV "DOV_MAILDIR"
+
typedef struct {
char *domain; //common domain
TRATYP **todo; //Transfer reference
#undef EXTOBE
#undef OPEP
}
+/*
+\f
+*/
+/********************************************************/
+/* */
+/* Procedure to store an email contents with the */
+/* recipient email area. */
+/* Return tru if successful, false otherwise */
+/* */
+/********************************************************/
+PUBLIC _Bool eml_store_email(TRATYP *tra)
+
+{
+#define OPEP "geseml.c:eml_store_email,"
+
+_Bool done;
+char *locdom;
+char dirname[300];
+int phase;
+_Bool proceed;
+
+done=false;
+locdom=(char *)0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+ switch (phase) {
+ case 0 : //Extracting recipient email
+ if ((tra!=(TRATYP *)0)&&(tra->rcptto!=(char *)0)&&(strlen(tra->rcptto)>0))
+ locdom=strrchr(tra->rcptto,'@');
+ if (locdom==(char *)0) {
+ (void) rou_alert(0,"%s Unable to extract recipient domain! (Bug?)",OPEP);
+ (void) eml_dumptra((FILE *)0,tra);
+ phase=999; //Big trouble
+ }
+ else
+ locdom++;
+ break;
+ case 1 : //creating recipient directory if needed
+ DIR *dir;
+ char *path;
+
+ path=rou_apppath(getenv(DIRDOV));
+ (void) snprintf(dirname,sizeof(dirname),"%s/%s/%s/",path,locdom,tra->rcptto);
+ *(strrchr(dirname,'@'))='\000'; //keeping username only
+ if ((dir=opendir(dirname))==(DIR *)0) {
+ int status;
+ char cmd[400];
+
+ (void) snprintf(cmd,sizeof(cmd),"mkdir -p %s",dirname);
+ if ((status=system(cmd))!=0) {
+ (void) rou_alert(0,"%s Unable to create <%s> directory (system?/bug?)",
+ OPEP,dirname);
+ phase=999; //big trouble, No need to go further
+ }
+ }
+ else
+ closedir(dir);
+ (void) free(path);
+ break;
+ case 2 : //duplicating session file to the recipient directory
+ if (eml_dupqfile(tra->sessid,dirname)==false) {
+ (void) rou_alert(0,"%s Unable to store email <%s> to user directory <%s>",
+ OPEP,tra->sessid,dirname);
+ phase=999; //big trouble.
+ }
+ break;
+ case 3 : //everything fine
+ done=true;
+ break;
+ default : //SAFE Guard
+ proceed=false;
+ break;
+ }
+ phase++;
+ }
+return done;
+
+#undef OPEP
+}
//procedure to Generate todolist file within queue
extern _Bool eml_todoqfile(TRATYP **list);
+//procedure to store an email to the local email storage area
+extern _Bool eml_store_email(TRATYP *tra);
+
#endif
*/
/********************************************************/
/* */
+/* Procedure to duplication a sessid file (email) */
+/* to user directory. */
+/* Return true if successful, false otherwise */
+/* */
+/********************************************************/
+PUBLIC _Bool eml_dupqfile(char *qfilename,const char *dest)
+
+{
+_Bool status;
+
+status=false;
+return status;
+}
+/*
+^L
+*/
+/********************************************************/
+/* */
/* Procedure to check if email address is */
/* acceptable. */
/* */
//procedure to open a specific qfile
extern FILE *eml_openqfile(char *qfilename,const char *ext);
+//procedure to duplicate a specific qfile to another file
+extern _Bool eml_dupqfile(char *qfilename,const char *dest);
+
//procedure to check email address format
//of an email address
extern RCPTYP *eml_isemailok(char *email,char **report);
}
}
else
- (void) closedir(dir);
+ (void) closedir(dir);
(void) free(fullname);
break;
case 2 : //setting lock filename