Mathias Weinert wrote:
> Hi there,
>
> I am still hoping that some will commit the following patch to mailer.py
> so please let my wishes get true...
>
> This patch adds a new parameter to the configuration file which allows
> to use different characters for splitting the to_addr.
>
> This is usefull for using additional name information in the mail
> addresses. Example:
>
> to_addr_split_char = ,
> to_addr = "The great Wallace" <wallace@atanyaddress>, "little Grommit" <grommit@propablyatthesameaddress>
I find this two-option setup silly. Just make the code smart enough to know
that email records are comma-delimited, and any commas in the quoted regions
don't count towards that splitting. I whipped up the following helper
function for performing such a split, but I'm sure there's probably a
slicker/quicker way to do it:
#!/usr/bin/python
import sys
def parse_addrs(addr_line):
"""Split ADDR_LINE on commas, but don't count commas that enclosed
in doublequote-delimited regions. Doublequote characters
preceeded by a backslash (\) don't count as delimiters for those
regions, either."""
quoted = 0
commas = []
for i in range(len(addr_line)):
if addr_line[i] == '"':
if ((i and addr_line[i-1] != '\\') or (not i)):
if quoted:
quoted = 0
else:
quoted = 1
elif addr_line[i] == ',':
if not quoted:
commas.append(i)
commas.append(len(addr_line))
pieces = []
for i in range(len(commas)):
comma = commas[i]
if not i:
pieces.append(addr_line[:comma].strip())
else:
pieces.append(addr_line[commas[i-1]+1:comma].strip())
if i:
pieces.append(addr_line[commas[-1]+1:].strip())
return filter(None, pieces)
if __name__ == "__main__":
addrs = parse_addrs(sys.argv[1])
print '\n'.join(addrs)
--
C. Michael Pilato <cmpilato@collab.net>
CollabNet <> www.collab.net <> Distributed Development On Demand
Received on Tue May 30 15:25:40 2006