Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Populate the esubject column of the emailbox table based on the subject in the email header. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | smtp |
Files: | files | file ages | folders |
SHA3-256: |
dbb1ce5ff7d41b61175327f3b3e5905e |
User & Date: | drh 2018-06-29 22:54:28.498 |
Context
2018-06-30
| ||
16:06 | Merge fixes and improvements from trunk. ... (check-in: 4f30802a user: drh tags: smtp) | |
2018-06-29
| ||
22:54 | Populate the esubject column of the emailbox table based on the subject in the email header. ... (check-in: dbb1ce5f user: drh tags: smtp) | |
21:37 | Lots of additional error checking on the "fossil smtpd" input. ... (check-in: cf1c8429 user: drh tags: smtp) | |
Changes
Changes to src/smtp.c.
︙ | ︙ | |||
592 593 594 595 596 597 598 599 600 601 602 603 604 605 | smtp_session_free(p); blob_reset(&body); } /***************************************************************************** ** Server implementation *****************************************************************************/ /* ** Schema used by the email processing system. */ static const char zEmailSchema[] = @ -- bulk storage is in a separate table. This table can store either @ -- the body of email messages or transcripts of smtp sessions. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 | smtp_session_free(p); blob_reset(&body); } /***************************************************************************** ** Server implementation *****************************************************************************/ /* ** Scan the header of the email message in pMsg looking for the ** (first) occurrance of zField. Fill pValue with the content of ** that field. ** ** This routine initializes pValue. Any prior content of pValue is ** discarded (leaked). ** ** Return non-zero on success. Return 0 if no instance of the header ** is found. */ int email_header_value(Blob *pMsg, const char *zField, Blob *pValue){ int nField = (int)strlen(zField); Blob line; blob_rewind(pMsg); blob_init(pValue,0,0); while( blob_line(pMsg, &line) ){ int n, i; char *z; blob_trim(&line); n = blob_size(&line); if( n==0 ) return 0; if( n<nField+1 ) continue; z = blob_buffer(&line); if( sqlite3_strnicmp(z, zField, nField)==0 && z[nField]==':' ){ for(i=nField+1; i<n && fossil_isspace(z[i]); i++){} blob_init(pValue, z+i, n-i); while( blob_line(pMsg, &line) ){ blob_trim(&line); n = blob_size(&line); if( n==0 ) break; z = blob_buffer(&line); if( !fossil_isspace(z[0]) ) break; for(i=1; i<n && fossil_isspace(z[i]); i++){} blob_append(pValue, " ", 1); blob_append(pValue, z+i, n-i); } return 1; } } return 0; } /* ** Schema used by the email processing system. */ static const char zEmailSchema[] = @ -- bulk storage is in a separate table. This table can store either @ -- the body of email messages or transcripts of smtp sessions. |
︙ | ︙ | |||
852 853 854 855 856 857 858 859 | blob_init(&policy, zPolicy, -1); while( blob_line(&policy, &line) ){ blob_trim(&line); blob_token(&line, &token); blob_tail(&line, &tail); if( blob_size(&tail)==0 ) continue; if( blob_eq_str(&token, "mbox", 4) ){ db_multi_exec( | > > | | | > > | | 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 | blob_init(&policy, zPolicy, -1); while( blob_line(&policy, &line) ){ blob_trim(&line); blob_token(&line, &token); blob_tail(&line, &tail); if( blob_size(&tail)==0 ) continue; if( blob_eq_str(&token, "mbox", 4) ){ Blob subj; email_header_value(&p->msg, "subject", &subj); db_multi_exec( "INSERT INTO emailbox(euser,edate,efrom,emsgid,ets,estate,esubject)" " VALUES(%Q,now(),%Q,%lld,%lld,0,%Q)", blob_str(&tail), p->zFrom, p->idMsg, p->idTranscript, blob_str(&subj) ); blob_reset(&subj); } if( blob_eq_str(&token, "forward", 7) ){ smtp_append_to(p, fossil_strdup(blob_str(&tail)), 1); } blob_reset(&tail); } } /* ** The SmtpServer object contains a complete incoming email. ** Add this email to the database. */ static void smtp_server_route_incoming(SmtpServer *p, int bFinish){ Stmt s; int i; if( p->zFrom && p->nTo && blob_size(&p->msg) && (p->srvrFlags & SMTPSRV_DRYRUN)==0 ){ db_begin_transaction(); if( p->idTranscript==0 ) smtp_server_schema(0); |
︙ | ︙ |