]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Able to capture email header subject
authorJean-Marc Pigeon <jmp@safe.c>
Thu, 11 Sep 2025 17:35:24 +0000 (13:35 -0400)
committerJean-Marc Pigeon <jmp@safe.c>
Thu, 11 Sep 2025 17:35:24 +0000 (13:35 -0400)
lib/geseml.c
lib/gessql.c
lib/lvleml.c
lib/unieml.c
lib/unieml.h
lib/unisql.c
lib/unisql.h

index b7aef4e590358b39db60f2c4be00f949ca2e53e7..fb19cc9cc316965cfe762adbfaa78bd37dd55eef 100644 (file)
@@ -194,14 +194,15 @@ if (tra!=(TRATYP *)0) {
   status=true;
   (void) strftime(temps,sizeof(temps),"#%Y-%m-%d %H:%M:%S",
                                       localtime(&(tra->date)));
-  (void) snprintf(line,sizeof(line),"%c\t%lu\t%05u%*s %*s %*s \"%*s\"",
+  (void) snprintf(line,sizeof(line),"%c\t%lu\t%05u%*s %*s %*s \"%*s\" %s",
                                     tra->code,
                                     tra->date,
                                     tra->delay,
                                     32,tra->sessid,
                                     30,tra->rcptto,
                                     30,tra->sfrom,
-                                    30,tra->hfrom
+                                    30,tra->hfrom,
+                                    tra->hsubject
                                     );
   (void) print_tra(qfile,line,temps);
   if (tra->resp!=(char **)0) {
@@ -330,7 +331,7 @@ PUBLIC TRATYP **eml_scanqfile(TRATYP **list,FILE *qfile)
 
 {
 #define OPEP    "geseml.c:eml_scanqfile,"
-#define FMT     "%c %ld %d %s %s %s \"%[^\"]\""
+#define FMT     "%c %ld %d %s %s %s \"%[^\"]\" %99[^\n]"
 
 TRATYP *cur;    //previous trans record
 char *ptr;
@@ -341,6 +342,7 @@ while ((ptr=fgets(line,sizeof(line),qfile))!=(char *)0) {
   char id[300];
   char sfrom[100];
   char hfrom[100];
+  char hsubject[100];
   char to[100];
   char code;
   u_long date;
@@ -371,7 +373,8 @@ while ((ptr=fgets(line,sizeof(line),qfile))!=(char *)0) {
           case 'R'      :       
           case 'W'      :       
             (void) memset(hfrom,'\000',sizeof(hfrom));
-            if (sscanf(line,FMT,&code,&date,&delay,id,to,sfrom,hfrom)!=7) {
+            (void) memset(hsubject,'\000',sizeof(hsubject));
+            if (sscanf(line,FMT,&code,&date,&delay,id,to,sfrom,hfrom,hsubject)!=8) {
               (void) rou_alert(0,"%s Unable to scan <line=%s> (config?)",OPEP,line);
               phase=999;    //No data within line
               }
@@ -397,7 +400,7 @@ while ((ptr=fgets(line,sizeof(line),qfile))!=(char *)0) {
           cur->rcptto=strdup(to);
           cur->sfrom=strdup(sfrom);
           cur->hfrom=strdup(hfrom);
-          (void) rou_alert(0,"%s hfrom=<%s>",OPEP,cur->hfrom);
+          cur->hsubject=strdup(hsubject);
           list=(TRATYP **)rou_addlist((void **)list,(void *)cur); 
           }
         break;
@@ -941,8 +944,8 @@ if ((line!=(char *)0)&&(strlen(line)>0)) {
           session->hfrom=strdup(line+max);
           break;
         case 1        :       //Inserting the header from in session
-          session->title=rou_freestr(session->title);
-          session->title=strdup(line+max);
+          session->hsubject=rou_freestr(session->hsubject);
+          session->hsubject=strdup(line+max);
           break;
         default       :
           (void) rou_alert(0,"%s Code missing for Head entrey <%s> (Bug?!)",
index 40f0735e0eb0943a18e9d8d6c2928e06613fb46b..86f8ea372c35cc70cd1bbf8cc91412603c21fa91 100644 (file)
@@ -517,7 +517,7 @@ for (int i=0;(isok==true)&&(sesfield[i].name!=(char *)0);i++) {
     case 0              :       //session ID
       break;                    //nothing to do
     case 1              :       //title
-      data=sql_gooddata(sqlptr,(*ses)->title);
+      data=sql_gooddata(sqlptr,(*ses)->hsubject);
       break;                    //nothing to do
     case 2              :       //sfrom
       data=sql_gooddata(sqlptr,(*ses)->sfrom);
index bcc5776045b01bacc16a1a2189cf1518a648b324..70041506783a7fdfffe8f8f7fcfa95ff158eab11 100644 (file)
@@ -2844,10 +2844,14 @@ if ((contact!=(CONTYP *)0)&&(contact->recipients!=(RCPTYP **)0)) {
     tra->sessid=strdup(contact->session->sessid);
     tra->sfrom=strdup(contact->mailfrom);
     tra->rcptto=strdup(data);
-    (void) strcpy(data,"hfrom missing");
+    (void) strcpy(data,"email header, 'From:' missing");
     if (contact->session->hfrom!=(char *)0) 
-      (void) strcpy(data,contact->session->hfrom);
+      (void) strncpy(data,contact->session->hfrom,sizeof(data));
     tra->hfrom=strdup(data);
+    (void) strcpy(data,"email header, 'Subject:' missing");
+    if (contact->session->hsubject!=(char *)0) 
+      (void) strncpy(data,contact->session->hsubject,sizeof(data));
+    tra->hsubject=strdup(data);
     tralist=(TRATYP **)rou_addlist((void **)tralist,(void *)tra);
     ptr++;
     }
index bc5ec08862d3cb7fbf7a9f1a53c9a1578323da5e..fe7d0906d2f7cfa74fce7472b366c2ee30e501a2 100644 (file)
@@ -98,6 +98,7 @@ if (tra!=(TRATYP *)0) {
   (void) eml_freetra_resp(tra);
   tra->rcptto=rou_freestr(tra->rcptto);
   tra->sfrom=rou_freestr(tra->sfrom);
+  tra->hsubject=rou_freestr(tra->hsubject);
   tra->hfrom=rou_freestr(tra->hfrom);
   tra->rcptto=rou_freestr(tra->rcptto);
   tra->sessid=rou_freestr(tra->sessid);
index ea2b37bf7dcc6adc9fe51ecc9fe390fdd4e7cf9a..a90747cf184dc070bd4db0f2ca68fd3acbeccb7c 100644 (file)
@@ -101,6 +101,7 @@ typedef struct  {
         char *sessid;   //session id
         char *sfrom;    //Email SMTP Originator
         char *hfrom;    //Email HEADER originator
+        char *hsubject; //Email HEADER subject
         char *rcptto;   //Email Recipient
         int sendcode;   //Email sending status;
         char **resp;    //Transfer response status
index 26f25f9862064785e1bf641e203b90a4b0635b82..1ffdebe1dc542acc474ff22f78a4a13f51332f88 100644 (file)
@@ -128,10 +128,10 @@ PUBLIC SESTYP *sql_freeses(SESTYP *ses)
 {
 if (ses!=(SESTYP *)0) {
   ses->duration=rou_freestr(ses->duration);
+  ses->hsubject=rou_freestr(ses->hsubject);
   ses->hfrom=rou_freestr(ses->hfrom);
   ses->sfrom=rou_freestr(ses->sfrom);
   ses->sessid=rou_freestr(ses->sessid);
-  ses->title=rou_freestr(ses->title);
   (void) free(ses);
   ses=(SESTYP *)0;
   }
index 20bf8f4f945a94111606eebba2bb257f3bfe2ffc..62f0b6e0ddc413970252ae01ab10432d9f18594e 100644 (file)
@@ -41,9 +41,9 @@ typedef struct  {
 //with a remote server
 typedef struct  {
         char *sessid;   //session id
-        char *title;    //the email title
-        char *sfrom;    //the "mail from" comming from SMTP exchange
-        char *hfrom;    //the "mail from" as within the email header
+        char *sfrom;    //the "mail from" coming from SMTP exchange
+        char *hsubject; //the "Subject:" as within the email header
+        char *hfrom;    //the "From:" as within the email header
         char *duration; //Session duration un millisec
         u_long taille;  //Email size
         }SESTYP;