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')
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')