File: pyedit-products/unzipped/PP4E/Internet/Email/mailtools/_test_replies.py
import email.utils class mailconfig: pass From = 'PP4E@rmi.net' mailconfig.myaddress = 'PP4E@rmi.net'; mailconfig.repliesCopyToAll = True class C: def splitAddresses(self, field): """ 3.0: use comma separator for mutiple addrs in the GUI, and getaddresses to split correctly and allow for comma in the name parts of addresses (see notes at onReply); caveat: move to mailtools.mailParser so can be reused? """ pairs = email.utils.getaddresses([field]) # [(name,addr)] return [email.utils.formataddr(pair) for pair in pairs] # [name <addr>] def replyCopyTo(self, message): """ 3.0: replies copy all original recipients, by prefilling Cc header with all addreses in original To and Cc after removing duplicates and new sender; could decode i18 addrs here, but the view window will decode to display (and send will reencode), and the unique set filtering here works either way, though the sender's address is assumed to be in encoded form in mailconfig (else it is not removed here); empty To or Cc headers are okay: split returns empty lists; """ if not mailconfig.repliesCopyToAll: # reply to sender only Cc = '?' else: # copy all original recipients (3.0) allRecipients = (self.splitAddresses(message.get('To', '')) + self.splitAddresses(message.get('Cc', ''))) uniqueOthers = set(allRecipients) - set([From]) Cc = ', '.join(uniqueOthers) return Cc """ sender = From recipHdrs = (message.get(hdr, '') for hdr in ('To', 'Cc')) joinHdrs = ', '.join(filter(bool, recipHdrs)) # nonempties splitAddrs = email.utils.getaddresses([joinHdrs]) # (name,addr) uniqueAddrs = {email.utils.formataddr(x) for x in splitAddrs} # name <addr> othersAddrs = uniqueAddrs - set([sender]) # less sender return ', '.join(othersAddrs) """ print(C().splitAddresses('a@a.a, b@b.b')) print(C().splitAddresses('')) def test(dict): print('=> [%s]' % C().replyCopyTo(dict)) test(dict(Cc='Bob <bob@bob.com>, lutz@rmi.net, PP4E@rmi.net', To='"spam,e" <eric@spam.com>, PP4E@rmi.net')) test(dict(To='"spam,e" <eric@spam.com>, PP4E@rmi.net')) test(dict(Cc='Bob <bob@bob.com>, lutz@rmi.net, PP4E@rmi.net')) test(dict(To='PP4E@rmi.net, <lutz@rmi.net>, "spam" <spam@spam.com>')) test(dict(To='PP4E@rmi.net')) test(dict()) """ rcptpairs = email.utils.getaddresses([rcptorig]) # [(name,addr)] rcptuniq = {email.utils.formataddr(pair) for pair in rcptpairs} # {name <addr>} rcptuniq = {map(email.utils.formataddr, rcptpairs)} # {name <addr>} rcptuniq = {email.utils.formataddr(pair) for pair in email.utils.getaddresses([rcptjoin]) rcptuniq = {map(email.utils.formataddr, rcptpairs)} # {name <addr>} rcptuniq = set(map(email.utils.formataddr, rcptpairs)) - set(From) """