def quotetext(form): """ note that headers come from the prior page's form here, not from parsing the mail message again; that means that commonhtml.viewpage must pass along date as a hidden field """ parser = mailtools.MailParser() addrhdrs = ('From', 'To', 'Cc', 'Bcc') # decode name only quoted = '\n-----Original Message-----\n' for hdr in ('From', 'To', 'Date'): rawhdr = getfield(form, hdr) if hdr not in addrhdrs: dechdr = parser.decodeHeader(rawhdr) # 3.0: decode for display else: # encoded on sends dechdr = parser.decodeAddrHeader(rawhdr) # email names only quoted += '%s: %s\n' % (hdr, dechdr) quoted += '\n' + getfield(form, 'text') quoted = '\n' + quoted.replace('\n', '\n> ') return quoted
def quotetext(form): """ обратите внимание, что заголовки поступают из формы предыдущей страницы, а не получаются в результате повторного анализа почтового сообщения; это означает, что функция commonhtml.viewpage должна передавать дату в скрытом поле """ parser = mailtools.MailParser() addrhdrs = ('From', 'To', 'Cc', 'Bcc') # декодируется только имя quoted = '\n-----Original Message-----\n' for hdr in ('From', 'To', 'Date'): rawhdr = getfield(form, hdr) if hdr not in addrhdrs: dechdr = parser.decodeHeader( rawhdr) # 3.0: декодировать для отображения else: # закодировать при отправке dechdr = parser.decodeAddrHeader(rawhdr) # только имена в адресах quoted += '%s: %s\n' % (hdr, dechdr) quoted += '\n' + getfield(form, 'text') quoted = '\n' + quoted.replace('\n', '\n> ') return quoted
import loadmail, commonhtml from externs import mailtools 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:
try: builtins.print(*args, end=end) sys.stdout.flush() except: for arg in args: bstdout.write(str(arg).encode('utf-8')) if end: bstdout.write(end.encode('utf-8')) bstdout.flush() # FIXME комментировать временно # sys.stderr = sys.stdout # выводить сообщения об ошибках в браузер from externs import mailconfig # из пакета, находящегося на сервере from externs import mailtools # для анализа и дкодирования заголовков parser = mailtools.MailParser() # один парсер на процесс в этом модуле # корневой каталог cgi-сценариев # urlroot = 'http://starship.python.net/~lutz/PyMailCgi/' # urlroot = 'http://localhost:8000/cgi-bin/' urlroot = '' # использовать минимальные относительные пути def pageheader(app='PyMailCGI', color='#FFFFFF', kind='main', info=''): print('Content-type: text/html\n') print('<html lang="ru"><head><title>%s: %s page (PP4E)</title></head>' % (app, kind)) print('<body bgcolor="%s"><h1>%s %s</h1><hr>' % (color, app, (info or kind)))
def print(*args, end='\n'): try: builtins.print(*args, end=end) sys.stdout.flush() except: for arg in args: bstdout.write(str(arg).encode('utf-8')) if end: bstdout.write(end.encode('utf-8')) bstdout.flush() sys.stderr = sys.stdout # show error messages in browser from externs import mailconfig # from a package somewhere on server from externs import mailtools # need parser for header decoding parser = mailtools.MailParser() # one per process in this module # my cgi address root #urlroot = 'http://starship.python.net/~lutz/PyMailCgi/' #urlroot = 'http://localhost:8000/cgi-bin/' urlroot = '' # use minimal, relative paths def pageheader(app='PyMailCGI', color='#FFFFFF', kind='main', info=''): print('Content-type: text/html\n') print('<html><head><title>%s: %s page (PP4E)</title></head>' % (app, kind)) print('<body bgcolor="%s"><h1>%s %s</h1><hr>' % (color, app, (info or kind)))
3.0: выполняет декодирование заголовков перед отображением списка, однако принтер и браузер должны уметь обрабатывать их; # ---------------------------------------------------------------------------- # """ import cgi import loadmail, commonhtml from externs import mailtools from secret import encode # модуль шифрования, определяемый пользователем MaxHdr = 35 # максимальная длина заголовков в списке # с предыдущей страницы поступает пароль, остальное обычно в модуле formdata = cgi.FieldStorage() mailuser, mailpswd, mailsite = commonhtml.getstandardpopfields(formdata) parser = mailtools.MailParser() try: newmails = loadmail.loadmailhdrs(mailsite, mailuser, mailpswd) mailnum = 1 maillist = [] # или использовать enumerate for mail in newmails: # списко заголовков msginfo = [] hdrs = parser.parseHeaders(mail) # email.message.Message addrhdrs = ('From', 'To', 'Cc', 'Bcc') # декодировать только имена for key in ('Subject', 'From', 'Date'): rawhdr = hdrs.get(key, '?') if key not in addrhdrs: dechdr = parser.decodeHeader( rawhdr) # 3.0: декодировать для отображения else: # закодировать при отправке