phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"%s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //Transmit "DATA" to remote
if (dooutgoing(fd->socptr,action)!=(strlen(action)+2))
phase=999; //Unable to send STARTTLS sequence
break;
- case 1 : //Get STARTTLS command status
+ case 1 : //Get DATA command status
if (tcp_getline(fd->socptr,WRESP,&line)<0)
phase=999; //Didn't get signon
break;
int code;
code=0;
+ (void) rou_alert(0,"%s JMPDBG line=<%s>",OPEP,line);
(void) sscanf(line,"%d",&code);
if (code!=DATAOK)
phase=999;
#very simple test to feed SMTP server
#====================================================
-T:Very Simple email sending
+T:Sending a very Simple Email
R:220 mailleur.example.com ESMTP (cleartext) emlrcvr...
C:ORGN 127.127.0.2
R:220 mailleur.example.com ESMTP (cleartext) emlrcvr...
#-sending data
C:DATA
Subject: Very Simple email contents
+From: Maitre Post <postmaster@example.com>
+To: Maitre WEB <webmaster@example.com>
FIRST Line
SECOND Line
#very simple test to feed SMTP server
#====================================================
-T:Very Simple email sending
+T:Sending a very Simple Email
R:220 mailleur.example.com ESMTP (cleartext) emlrcvr...
+C:ORGN 127.127.0.2
+R:220 mailleur.example.com ESMTP (cleartext) emlrcvr...
+#C:WAIT 100
#====================================================
S:HELO example.com
+#R:250-mailleur.example.com, link (cleartext) ready, your IP/FQDN=[127.127.0.2/feed2.example.com]
R:250-mailleur.example.com, link (cleartext) ready,...
S:MAIL FROM: <postmaster@example.com>
R:250 2.1.3 postmaster@example.com.. sender ok
#-sending data
C:DATA
Subject: Very Simple email contents
+From: Maitre Post <postmaster@example.com>
+To: Maitre WEB <webmaster@example.com>
FIRST Line
SECOND Line
R:250 3.5.3 Message accepted for delivery
S:QUIT
R:221 2.0.0 Bye, closing connection...
+#-------------------------------------------------------------------------
+#prepare next test
+#waiting 1 sec
+C:WAIT 1
+#-restarting link
+C:RESTART
+R:220 mailleur.example.com ESMTP (cleartext) emlrcvr...
+S:MAIL FROM: <webmaster@example.com>
+R:250 2.1.3 webmaster@example.com.. sender ok
+S:RCPT TO: <dom1user1@subdom1.example.com>
+R:250 2.6.4 Address accepted
+S:RCPT TO: <dom1user2@subdom1.example.com>
+R:250 2.6.4 Address accepted
+S:RCPT TO: <dom2user1@subdom2.example.com>
+R:250 2.6.4 Address accepted
+S:RCPT TO: <dom2user2@subdom2.example.com>
+R:250 2.6.4 Address accepted
+#-------------------------------------------------------------------------
+#-sending data
+C:DATA
+Subject: Second email contents
+
+SECOND FIRST Line
+SECOND SECOND Line
+SECOND LAST Line
+
+.
+#-------------------------------------------------------------------------
+R:250 3.5.3 Message accepted for delivery
+S:QUIT
+#-------------------------------------------------------------------------
+#prepare next test
+#waiting 1 sec
+C:WAIT 1
+#-restarting link
+C:RESTART
+R:220 mailleur.example.com ESMTP (cleartext) emlrcvr...
+S:MAIL FROM: <noreply@example.com>
+R:250 2.1.3 noreply@example.com.. sender ok
+S:RCPT TO: <dom1user1@subdom1.example.com>
+R:250 2.6.4 Address accepted
+S:RCPT TO: <dom1user2@subdom1.example.com>
+R:250 2.6.4 Address accepted
+S:RCPT TO: <dom2user1@subdom2.example.com>
+R:250 2.6.4 Address accepted
+S:RCPT TO: <dom2user2@subdom2.example.com>
+R:250 2.6.4 Address accepted
+#-------------------------------------------------------------------------
+#-sending data
+C:DATA
+Subject: Third email contents
+
+THIRD FIRST Line
+THIRD SECOND Line
+THIRD LAST Line
+
+.
+#-------------------------------------------------------------------------
+R:250 3.5.3 Message accepted for delivery
+S:QUIT
*/
/********************************************************/
/* */
+/* Procedure to add received information to */
+/* the email contents. */
+/* */
+/********************************************************/
+static _Bool addreceived(CONTYP *contact,FILE *data)
+
+{
+_Bool status;
+
+status=true;
+(void) fprintf(data,"Received: from %s ([%s])\n",contact->peername,contact->peerip);
+(void) fprintf(data,"\t by %s ([%s]/%s-%s)\n",
+ contact->locname,contact->locserv,
+ appname,rou_getversion());
+(void) fprintf(data,"\t id <%s@%s>;\n",contact->cursesid,contact->locname);
+return status;
+}
+/*
+^L
+*/
+/********************************************************/
+/* */
/* Procedure to check if helo or ehlo paratmeter */
/* is a correct one */
/* */
phase=0;
proceed=setdirectives(contact,"tmp");
while (proceed==true) {
- //(void) rou_alert(0,"JMPDBG %s phase='%d' empty='%d'",OPEP,phase,empty);
+ (void) rou_alert(0,"JMPDBG %s phase='%d' empty='%d'",OPEP,phase,empty);
switch (phase) {
case 0 : //opening the queue email
if ((queue=eml_createqfile(contact->cursesid,""))==(FILE *)0)
phase=999; //trouble trouble
break;
- case 1 : //Do we have a parameter
+ case 1 : //sending go ahed to remote
+ if (addreceived(contact,queue)==false)
+ phase=999; //trouble trouble
+ break;
+ case 2 : //sending go ahaed to remote
(void) transmit(contact,"%d 3.5.0 %s",
DATAOK,"End data with <CR><LF>.<CR><LF>");
break;
- case 2 : //get incoming line
+ case 3 : //get incoming line
got=tcp_getline(contact->socptr,WAITLINE,&line);
if (got<0) //data timeout
phase=999; //Trouble trouble
break;
- case 3 : //just display line
+ case 4 : //just display line
if ((empty==false)||(strcmp(line,".")!=0)) {
(void) fprintf(queue,"%s\n",line);
phase=1; //Wait for next line
empty=true;
line=rou_freestr(line);
break;
- case 4 : //got all data
+ case 5 : //got all data
if (eml_closeqfile(queue)<0)
phase=999; //Trouble trouble
break;
- case 5 : //renameing directive
+ case 6 : //renameing directive
if (eml_renameqfile(contact->cursesid,"tmp",EXTRANS)==false)
phase=999; //Trouble trouble
break;
- case 6 : //everything fine
+ case 7 : //everything fine
(void) transmit(contact,"%d 3.5.3 %s",
CMDOK,"Message accepted for delivery");
done=true;