from secret import encode # user-defined encoder module MaxHdr = 35 # max length of email hdrs in list # only pswd comes from page here, rest usually in module formdata = cgi.FieldStorage() mailuser, mailpswd, mailsite = commonhtml.getstandardpopfields(formdata) try: newmails = loadmail.loadmailhdrs(mailsite, mailuser, mailpswd) mailnum = 1 maillist = [] for mail in newmails: # list of hdr text msginfo = [] hdrs = mailtools.MailParser().parseHeaders(mail) # email.Message for key in ('Subject', 'From', 'Date'): msginfo.append(hdrs.get(key, '?')[:MaxHdr]) msginfo = ' | '.join(msginfo) maillist.append(( msginfo, commonhtml.urlroot + 'onViewListLink.py', { 'mnum': mailnum, 'user': mailuser, # data params 'pswd': encode(mailpswd), # pass in url 'site': mailsite })) # not inputs mailnum += 1 commonhtml.listpage(maillist, 'mail selection list') except: commonhtml.errorpage('Error loading mail index')
form = cgi.FieldStorage() # parse form or URL data user, pswd, site = commonhtml.getstandardpopfields(form) pswd = secret.decode(pswd) try: if form['action'].value == 'Reply': headers = {'From': mailconfig.myaddress, # 3.0: commonhtml decodes 'To': getfield(form, 'From'), 'Cc': mailconfig.myaddress, 'Subject': 'Re: ' + getfield(form, 'Subject')} commonhtml.editpage('Reply', headers, quotetext(form)) elif form['action'].value == 'Forward': headers = {'From': mailconfig.myaddress, # 3.0: commonhtml decodes 'To': '', 'Cc': mailconfig.myaddress, 'Subject': 'Fwd: ' + getfield(form, 'Subject')} commonhtml.editpage('Forward', headers, quotetext(form)) elif form['action'].value == 'Delete': # mnum field is required here msgnum = int(form['mnum'].value) # but not eval(): may be code fetcher = mailtools.SilentMailFetcher(site, user, pswd) fetcher.deleteMessages([msgnum]) commonhtml.confirmationpage('Delete') else: assert False, 'Invalid view action requested' except: commonhtml.errorpage('Cannot process view action')
server to be viewed in user's web browser """ import os if not os.path.exists(savedir): # in CGI script's cwd on server os.mkdir(savedir) # will open per your browser for filename in os.listdir(savedir): # clean up last message: temp! dirpath = os.path.join(savedir, filename) os.remove(dirpath) typesAndNames = parser.saveParts(savedir, message) filenames = [fname for (ctype, fname) in typesAndNames] for filename in filenames: os.chmod(filename, 0o666) # some srvrs may need read/write return filenames form = cgi.FieldStorage() user, pswd, site = commonhtml.getstandardpopfields(form) pswd = secret.decode(pswd) try: msgnum = form['mnum'].value # from URL link parser = mailtools.MailParser() fetcher = mailtools.SilentMailFetcher(site, user, pswd) fulltext = fetcher.downloadMessage(int(msgnum)) # don't eval! message = parser.parseMessage(fulltext) # email pkg Message parts = saveAttachments(message, parser) # for URL links mtype, content = parser.findMainText(message) # first txt part commonhtml.viewpage(msgnum, message, content, form, parts) # encoded pswd except: commonhtml.errorpage('Error loading message')
Cc = getfield(form, 'Cc') Subj = getfield(form, 'Subject') text = getfield(form, 'text') if Cc == '?': Cc = '' # 3.0: headers encoded per utf8 within mailtools if non-ascii parser = mailtools.MailParser() Tos = parser.splitAddresses(To) # multiple recip lists: ',' sept Ccs = (Cc and parser.splitAddresses(Cc)) or '' extraHdrs = [('Cc', Ccs), ('X-Mailer', 'PyMailCGI 3.0')] # 3.0: resolve main text and text attachment encodings; default=ascii in mailtools bodyencoding = 'ascii' try: text.encode(bodyencoding) # try ascii first (or latin-1?) except (UnicodeError, LookupError): # else use tuf8 as fallback (or config?) bodyencoding = 'utf-8' # tbd: this is more limited than PyMailGUI # 3.0: use utf8 for all attachments; we can't ask here attachencodings = ['utf-8'] * len(attaches) # ignored for non-text parts # encode and send sender = mailtools.SilentMailSender(smtpservername) try: sender.sendMessage(From, Tos, Subj, extraHdrs, text, attaches, bodytextEncoding=bodyencoding, attachesEncodings=attachencodings) except: commonhtml.errorpage('Send mail error') else: commonhtml.confirmationpage('Send mail')
# only pswd comes from page here, rest usually in module formdata = cgi.FieldStorage() mailuser, mailpswd, mailsite = commonhtml.getstandardpopfields(formdata) try: newmails = loadmail.loadmailhdrs(mailsite, mailuser, mailpswd) mailnum = 1 maillist = [] for mail in newmails: # list of hdr text msginfo = [] hdrs = mailtools.MailParser().parseHeaders(mail) # email.Message for key in ("Subject", "From", "Date"): msginfo.append(hdrs.get(key, "?")[:MaxHdr]) msginfo = " | ".join(msginfo) maillist.append( ( msginfo, commonhtml.urlroot + "onViewListLink.py", { "mnum": mailnum, "user": mailuser, # data params "pswd": encode(mailpswd), # pass in url "site": mailsite, }, ) ) # not inputs mailnum += 1 commonhtml.listpage(maillist, "mail selection list") except: commonhtml.errorpage("Error loading mail index")
save fetched email's parts to files on server to be viewed in user's web browser """ import os if not os.path.exists(savedir): # in CGI script's cwd on server os.mkdir(savedir) # will open per your browser for filename in os.listdir(savedir): # clean up last message: temp! dirpath = os.path.join(savedir, filename) os.remove(dirpath) typesAndNames = parser.saveParts(savedir, message) filenames = [fname for (ctype, fname) in typesAndNames] for filename in filenames: os.chmod(filename, 0o666) # some srvrs may need read/write return filenames form = cgi.FieldStorage() user, pswd, site = commonhtml.getstandardpopfields(form) pswd = secret.decode(pswd) try: msgnum = form['mnum'].value # from URL link parser = mailtools.MailParser() fetcher = mailtools.SilentMailFetcher(site, user, pswd) fulltext = fetcher.downloadMessage(int(msgnum)) # don't eval! message = parser.parseMessage(fulltext) # email pkg Message parts = saveAttachments(message, parser) # for URL links mtype, content = parser.findMainText(message) # first txt part commonhtml.viewpage(msgnum, message, content, form, parts) # encoded pswd except: commonhtml.errorpage('Error loading message')
Subj = getfield(form, 'Subject') text = getfield(form, 'text') if Cc == '?': Cc = '' # 3.0: headers encoded per utf8 within mailtools if non-ascii parser = mailtools.MailParser() Tos = parser.splitAddresses(To) # multiple recip lists: ',' sept Ccs = (Cc and parser.splitAddresses(Cc)) or '' extraHdrs = [('Cc', Ccs), ('X-Mailer', 'PyMailCGI 3.0')] # 3.0: resolve main text and text attachment encodings; default=ascii in mailtools bodyencoding = 'ascii' try: text.encode(bodyencoding) # try ascii first (or latin-1?) except (UnicodeError, LookupError): # else use tuf8 as fallback (or config?) bodyencoding = 'utf-8' # tbd: this is more limited than PyMailGUI # 3.0: use utf8 for all attachments; we can't ask here attachencodings = ['utf-8'] * len(attaches) # ignored for non-text parts # encode and send sender = mailtools.SilentMailSender(smtpservername) try: sender.sendMessage(From, Tos, Subj, extraHdrs, text, attaches, bodytextEncoding=bodyencoding, attachesEncodings=attachencodings) except: commonhtml.errorpage('Send mail error') else: commonhtml.confirmationpage('Send mail')
# only pswd comes from page here, rest usually in module formdata = cgi.FieldStorage() mailuser, mailpswd, mailsite = commonhtml.getstandardpopfields(formdata) parser = mailtools.MailParser() try: newmails = loadmail.loadmailhdrs(mailsite, mailuser, mailpswd) mailnum = 1 maillist = [] # or use enumerate() for mail in newmails: # list of hdr text msginfo = [] hdrs = parser.parseHeaders(mail) # email.message.Message addrhdrs = ('From', 'To', 'Cc', 'Bcc') # decode names only for key in ('Subject', 'From', 'Date'): rawhdr = hdrs.get(key, '?') if key not in addrhdrs: dechdr = parser.decodeHeader(rawhdr) # 3.0: decode for display else: # encoded on sends dechdr = parser.decodeAddrHeader(rawhdr) # email names only msginfo.append(dechdr[:MaxHdr]) msginfo = ' | '.join(msginfo) maillist.append((msginfo, commonhtml.urlroot + 'onViewListLink.py', {'mnum': mailnum, 'user': mailuser, # data params 'pswd': encode(mailpswd), # pass in URL 'site': mailsite})) # not inputs mailnum += 1 commonhtml.listpage(maillist, 'mail selection list') except: commonhtml.errorpage('Error loading mail index')
if not os.path.exists(savedir): # in CGI scrpt's cwd on server os.mkdir(savedir) # will open per your browser for filename in os.listdir(savedir): # clean up last message: temp! dirpath = os.path.join(savedir, filename) os.remove(dirpath) typesAndNames = parser.saveParts(savedir, message) filenames = [fname for (ctype, fname) in typesAndNames] for filename in filenames: os.chmod(filename, 0666) # some srvrs may need read/write return filenames form = cgi.FieldStorage() user, pswd, site = commonhtml.getstandardpopfields(form) pswd = secret.decode(pswd) try: msgnum = form["mnum"].value # from url link parser = mailtools.MailParser() fetcher = mailtools.SilentMailFetcher(site, user, pswd) fulltext = fetcher.downloadMessage(int(msgnum)) # don't eval! message = parser.parseMessage(fulltext) # email.Message parts = saveAttachments(message, parser) # for url links mtype, content = parser.findMainText(message) # first txt part # EXPERIMENTAL hdrstext = fulltext.split("\n\n")[0] # use blank line commonhtml.viewpage(msgnum, message, content, form, hdrstext, parts) # encodes passwd except: commonhtml.errorpage("Error loading message")