/* Copyright (C) 2020 C. McEnroe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include "archive.h" static int htmlEscape(FILE *file, const char *str) { while (*str) { int n = 0; switch (*str) { break; case '"': n = fprintf(file, """); str++; break; case '&': n = fprintf(file, "&"); str++; break; case '<': n = fprintf(file, "<"); str++; break; case '>': n = fprintf(file, ">"); str++; } if (n < 0) return n; size_t len = strcspn(str, "\"&<>"); if (len) { size_t n = fwrite(str, len, 1, file); if (!n) return -1; } str += len; } return 0; } static const char *Summary = TEMPLATE(

[subject]

[from.name]
); int htmlEnvelope(FILE *file, const struct Envelope *envelope) { const char *fromName = envelope->from.name; if (!fromName) fromName = envelope->from.mailbox; struct Variable vars[] = { { "subject", envelope->subject }, { "from.name", fromName }, { "from.mailbox", envelope->from.mailbox }, { "from.host", envelope->from.host }, { "messageID", envelope->messageID }, {0}, }; return templateRender(file, Summary, vars, htmlEscape); }