Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the webmail interface, provide the option to show the SMTP transcript when that transcript is available. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
bb8b60378deb428c4c10496755c7ee2b |
User & Date: | drh 2018-07-17 16:24:10.101 |
Context
2018-07-17
| ||
16:59 | Fix a typo in the on-line documentation for the "fossil smtpd" command. ... (check-in: 032e80b5 user: drh tags: trunk) | |
16:24 | In the webmail interface, provide the option to show the SMTP transcript when that transcript is available. ... (check-in: bb8b6037 user: drh tags: trunk) | |
15:48 | Set an timeout on the database connection to the web-cache. Use the sqlite3_table_column_metadata() interface to check to see if the web-cache database file needs to be initialized prior to actually initializing it. ... (check-in: e6e806a9 user: drh tags: trunk) | |
Changes
Changes to src/smtp.c.
︙ | ︙ | |||
665 666 667 668 669 670 671 | @ epolicy TEXT -- How to handle email sent to this address @ ) WITHOUT ROWID; @ @ -- Outgoing email queue @ CREATE TABLE IF NOT EXISTS repository.emailoutq( @ edomain TEXT, -- Destination domain. (ex: "fossil-scm.org") @ efrom TEXT, -- Sender email address | | | 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 | @ epolicy TEXT -- How to handle email sent to this address @ ) WITHOUT ROWID; @ @ -- Outgoing email queue @ CREATE TABLE IF NOT EXISTS repository.emailoutq( @ edomain TEXT, -- Destination domain. (ex: "fossil-scm.org") @ efrom TEXT, -- Sender email address @ eto TEXT, -- Recipient email address @ emsgid INT, -- Message body in the emailblob table @ ectime INT, -- Time enqueued. Seconds since 1970 @ emtime INT, -- Time of last send attempt. Sec since 1970 @ ensend INT, -- Number of send attempts @ ets INT -- Transcript of last failed attempt @ ); @ |
︙ | ︙ | |||
1066 1067 1068 1069 1070 1071 1072 | && (p->srvrFlags & SMTPSRV_DRYRUN)==0 ){ db_begin_write(); if( p->idTranscript==0 ) smtp_server_schema(0); p->nRef = 0; db_prepare(&s, "INSERT INTO emailblob(ets,etime,etxt,enref)" | | < < > > > < | 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 | && (p->srvrFlags & SMTPSRV_DRYRUN)==0 ){ db_begin_write(); if( p->idTranscript==0 ) smtp_server_schema(0); p->nRef = 0; db_prepare(&s, "INSERT INTO emailblob(ets,etime,etxt,enref)" " VALUES(:ets,now(),compress(:etxt),0)" ); p->nEts++; if( !bFinish && p->idTranscript==0 ){ db_bind_null(&s, ":ets"); db_bind_null(&s, ":etxt"); db_step(&s); db_reset(&s); p->idTranscript = db_last_insert_rowid(); }else if( bFinish ){ if( p->idTranscript ){ db_multi_exec( "UPDATE emailblob SET etxt=compress(%Q), enref=%d" " WHERE emailid=%lld", blob_str(&p->transcript), p->nEts, p->idTranscript); }else{ db_bind_null(&s, ":ets"); db_bind_str(&s, ":etxt", &p->transcript); db_step(&s); db_reset(&s); p->idTranscript = db_last_insert_rowid(); db_multi_exec( "UPDATE emailblob SET enref=%d WHERE emailid=%lld", p->nEts, p->idTranscript); } } db_bind_int64(&s, ":ets", p->idTranscript); db_bind_str(&s, ":etxt", &p->msg); db_step(&s); db_finalize(&s); p->idMsg = db_last_insert_rowid(); /* make entries in emailbox and emailoutq */ for(i=0; i<p->nTo; i++){ int okRemote = p->aTo[i].okRemote; |
︙ | ︙ |
Changes to src/url.c.
︙ | ︙ | |||
530 531 532 533 534 535 536 537 538 539 540 541 542 543 | blob_appendf(&p->url, "%s%s", zSep, p->azName[i]); if( z && z[0] ) blob_appendf(&p->url, "=%T", z); zSep = "&"; } if( zName1 && zValue1 ){ blob_appendf(&p->url, "%s%s", zSep, zName1); if( zValue1[0] ) blob_appendf(&p->url, "=%T", zValue1); } if( zName2 && zValue2 ){ blob_appendf(&p->url, "%s%s", zSep, zName2); if( zValue2[0] ) blob_appendf(&p->url, "=%T", zValue2); } return blob_str(&p->url); } | > | 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 | blob_appendf(&p->url, "%s%s", zSep, p->azName[i]); if( z && z[0] ) blob_appendf(&p->url, "=%T", z); zSep = "&"; } if( zName1 && zValue1 ){ blob_appendf(&p->url, "%s%s", zSep, zName1); if( zValue1[0] ) blob_appendf(&p->url, "=%T", zValue1); zSep = "&"; } if( zName2 && zValue2 ){ blob_appendf(&p->url, "%s%s", zSep, zName2); if( zValue2[0] ) blob_appendf(&p->url, "=%T", zValue2); } return blob_str(&p->url); } |
︙ | ︙ |
Changes to src/webmail.c.
︙ | ︙ | |||
390 391 392 393 394 395 396 397 398 399 400 401 402 | HQuery *pUrl, /* Calling context */ int emailid, /* emailbox.ebid to display */ const char *zUser /* User who owns it, or NULL if does not matter */ ){ Blob sql; Stmt q; int eState = -1; char zENum[30]; style_submenu_element("Index", "%s", url_render(pUrl,"id",0,0,0)); webmail_f_submenu(); blob_init(&sql, 0, 0); db_begin_transaction(); blob_append_sql(&sql, | > | > | 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | HQuery *pUrl, /* Calling context */ int emailid, /* emailbox.ebid to display */ const char *zUser /* User who owns it, or NULL if does not matter */ ){ Blob sql; Stmt q; int eState = -1; int eTranscript = 0; char zENum[30]; style_submenu_element("Index", "%s", url_render(pUrl,"id",0,0,0)); webmail_f_submenu(); blob_init(&sql, 0, 0); db_begin_transaction(); blob_append_sql(&sql, "SELECT decompress(etxt), estate, emailblob.ets" " FROM emailblob, emailbox" " WHERE emailid=emsgid AND ebid=%d", emailid ); if( zUser ) blob_append_sql(&sql, " AND euser=%Q", zUser); db_prepare_blob(&q, &sql); blob_reset(&sql); style_header("Message %d",emailid); if( db_step(&q)==SQLITE_ROW ){ Blob msg = db_column_text_as_blob(&q, 0); int eFormat = atoi(PD("f","0")); eState = db_column_int(&q, 1); eTranscript = db_column_int(&q, 2); if( eFormat==2 ){ @ <pre>%h(db_column_text(&q, 0))</pre> }else{ EmailToc *p = emailtoc_from_email(&msg); int i, j; @ <p> for(i=0; i<p->nHdr; i++){ |
︙ | ︙ | |||
456 457 458 459 460 461 462 463 464 465 466 467 468 469 | } } @ <pre>%h(p->aBody[i].zContent)</pre> } } } db_finalize(&q); if( eState==0 ){ /* If is message is currently Unread, change it to Read */ blob_append_sql(&sql, "UPDATE emailbox SET estate=1 " " WHERE estate=0 AND ebid=%d", emailid | > > > > > > > > > > > > > > > > > > > | 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 | } } @ <pre>%h(p->aBody[i].zContent)</pre> } } } db_finalize(&q); /* Optionally show the SMTP transcript */ if( eTranscript>0 ){ if( P("ts")==0 ){ sqlite3_snprintf(sizeof(zENum), zENum, "%d", emailid); style_submenu_element("SMTP Transcript","%s", url_render(pUrl, "ts", "1", "id", zENum)); }else{ db_prepare(&q, "SELECT decompress(etxt) FROM emailblob WHERE emailid=%d", eTranscript ); if( db_step(&q)==SQLITE_ROW ){ const char *zTranscript = db_column_text(&q, 0); @ <hr> @ <pre>%h(zTranscript)</pre> } db_finalize(&q); } } if( eState==0 ){ /* If is message is currently Unread, change it to Read */ blob_append_sql(&sql, "UPDATE emailbox SET estate=1 " " WHERE estate=0 AND ebid=%d", emailid |
︙ | ︙ |