| rev | line source | 
| jbe/bsw@0 | 1 local un  = encode.mime.unstructured_header_line | 
| jbe/bsw@0 | 2 local mbl = encode.mime.mailbox_list_header_line | 
| jbe/bsw@0 | 3 | 
| jbe/bsw@0 | 4 local function encode_container(parts, container) | 
| jbe/bsw@0 | 5   if container.multipart then | 
| jbe/bsw@0 | 6     local boundary | 
| jbe/bsw@0 | 7     boundary = "BOUNDARY--" .. multirand.string( | 
| jbe/bsw@0 | 8       24, | 
| jbe/bsw@0 | 9       "123456789BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz" | 
| jbe/bsw@0 | 10     ) | 
| jbe/bsw@0 | 11     parts[#parts+1] = "Content-Type: " | 
| jbe/bsw@0 | 12     parts[#parts+1] = "multipart/" | 
| jbe/bsw@0 | 13     parts[#parts+1] = container.multipart | 
| jbe/bsw@0 | 14     parts[#parts+1] = "; boundary=" | 
| jbe/bsw@0 | 15     parts[#parts+1] = boundary | 
| jbe/bsw@0 | 16     parts[#parts+1] = "\r\n\r\nMIME multipart\r\n"  -- last \r\n optional | 
| jbe/bsw@0 | 17     for idx, sub_container in ipairs(container) do | 
| jbe/bsw@0 | 18       parts[#parts+1] = "\r\n--" | 
| jbe/bsw@0 | 19       parts[#parts+1] = boundary | 
| jbe/bsw@0 | 20       parts[#parts+1] = "\r\n" | 
| jbe/bsw@0 | 21       encode_container(parts, sub_container) | 
| jbe/bsw@0 | 22     end | 
| jbe/bsw@0 | 23     parts[#parts+1] = "\r\n--" | 
| jbe/bsw@0 | 24     parts[#parts+1] = boundary | 
| jbe/bsw@0 | 25     parts[#parts+1] = "--\r\n" | 
| jbe/bsw@0 | 26   else | 
| jbe/bsw@0 | 27     parts[#parts+1] = "Content-Type: " | 
| jbe/bsw@0 | 28     parts[#parts+1] = container.content_type or "text/plain" | 
| jbe/bsw@0 | 29     parts[#parts+1] = "\r\n" | 
| jbe/bsw@0 | 30     if container.content_id then | 
| jbe/bsw@0 | 31       parts[#parts+1] = "Content-ID: <" | 
| jbe/bsw@0 | 32       parts[#parts+1] = container.content_id | 
| jbe/bsw@0 | 33       parts[#parts+1] = ">\r\n" | 
| jbe/bsw@0 | 34     end | 
| jbe/bsw@0 | 35     if container.attachment_filename then | 
| jbe/bsw@0 | 36       parts[#parts+1] = "Content-Disposition: attachment; filename=" | 
| jbe/bsw@0 | 37       parts[#parts+1] = encode.mime.atom_token( | 
| jbe/bsw@0 | 38         container.attachment_filename | 
| jbe/bsw@0 | 39       ) | 
| jbe/bsw@0 | 40       parts[#parts+1] = "\r\n" | 
| jbe/bsw@0 | 41     end | 
| jbe/bsw@0 | 42     if container.binary then | 
| jbe/bsw@0 | 43       parts[#parts+1] = "Content-Transfer-Encoding: base64\r\n\r\n" | 
| jbe/bsw@0 | 44       parts[#parts+1] = encode.mime.base64(container.content) | 
| jbe/bsw@0 | 45     else | 
| jbe/bsw@0 | 46       parts[#parts+1] = | 
| jbe/bsw@0 | 47         "Content-Transfer-Encoding: quoted-printable\r\n\r\n" | 
| jbe/bsw@0 | 48       parts[#parts+1] = | 
| jbe/bsw@0 | 49         encode.mime.quoted_printable_text_content(container.content) | 
| jbe/bsw@0 | 50     end | 
| jbe/bsw@0 | 51   end | 
| jbe/bsw@0 | 52 end | 
| jbe/bsw@0 | 53 | 
| jbe/bsw@0 | 54 function encode.mime.mail(args) | 
| jbe/bsw@0 | 55   local parts = {} | 
| jbe/bsw@0 | 56   parts[#parts+1] = mbl("From",     args.from) | 
| jbe/bsw@0 | 57   parts[#parts+1] = mbl("Sender",   args.sender) | 
| jbe/bsw@0 | 58   parts[#parts+1] = mbl("Reply-To", args.reply_to) | 
| jbe/bsw@0 | 59   parts[#parts+1] = mbl("To",       args.to) | 
| jbe/bsw@0 | 60   parts[#parts+1] = mbl("Cc",       args.cc) | 
| jbe/bsw@0 | 61   parts[#parts+1] = mbl("Bcc",      args.bcc) | 
| jbe/bsw@0 | 62   parts[#parts+1] = un("Subject", args.subject) | 
| jbe/bsw@0 | 63   parts[#parts+1] = "MIME-Version: 1.0\r\n" | 
| jbe/bsw@0 | 64   encode_container(parts, args) | 
| jbe/bsw@0 | 65   return table.concat(parts) | 
| jbe/bsw@0 | 66 end |