By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,743 Members | 1,072 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,743 IT Pros & Developers. It's quick & easy.

Looking for Python code to obsfucate mailto links on web site

P: n/a
I'm looking at putting some e-mail contact addresses on a web site, and
wanted to make it difficult for spammers to harvest them.

I found some Python code that I can call within my application.

http://www.zapyon.de/spam-me-not/

It works exactly as expected. However, I am concerned that the technique
used for obsfucating the e-mail address may be a bit weak.

Searching the web it looks like the best solution for me might be to
embed JavaScript in the web page that dynamically generates the e-mail
address in the browser client.

I've found on-line tools that will generate suitable JavaScript, but
need to automate the "encoding" process in Python.

Now I could write suitable code myself, but would be surprised if it
wasn't already available. Any pointers?

To head of a few comments I'm anticipating ;-)
- no I don't want to use a contact form
- accessibility is an issue, but I'm also including postal addresses and
phone numbers giving alternatives to e-mail. Also the main enquiry
address won't be obfuscated.
Jun 25 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
On Sun, 25 Jun 2006 21:10:31 +0100,
Andrew McLean <an*********@andros.org.uk> wrote:
I'm looking at putting some e-mail contact addresses on a web site,
and wanted to make it difficult for spammers to harvest them.
[ ... ]
Searching the web it looks like the best solution for me might be to
embed JavaScript in the web page that dynamically generates the e-mail
address in the browser client.
[ ... ]
Now I could write suitable code myself, but would be surprised if it
wasn't already available. Any pointers?


Pointers? What do you think this is, C? ;-) Try this:

def spam_averse_email_address( email_address, text ):
"""return HTML-embedded javascript to create a spam-averse mailto link"""

def char_codes( a_string ):
return ",".join(str(ord(a_char)) for a_char in a_string)

return """<script type="text/javascript">
<!--
document.write(
'<a href="mailto:'
+ String.fromCharCode(%s)
+ '">'
+ String.fromCharCode(%s)
+ '<\/A>');
// -->
</script>""" % (char_codes(email_address), char_codes(text))

The newlines within the triple quoted string are important; use that
function something like this:

print "<html>"
print "<head><title>Title</title></head>
print "<body>
print "<P>%s</P>" % spam_averse_email_address( 'e****@mydomain.com',
'click here to email me' )
print "</body>"
print "</html>"

You mentioned accessibility; make sure that your HTML does something
sensible if the user's browser doesn't do javascript.

HTH,
Dan

--
Dan Sommers
<http://www.tombstonezero.net/dan/>
"I wish people would die in alphabetical order." -- My wife, the genealogist
Jun 25 '06 #2

P: n/a
Dan Sommers wrote:
On Sun, 25 Jun 2006 21:10:31 +0100,
Andrew McLean <an*********@andros.org.uk> wrote:

I'm looking at putting some e-mail contact addresses on a web site,
and wanted to make it difficult for spammers to harvest them.

[ ... ]

Searching the web it looks like the best solution for me might be to
embed JavaScript in the web page that dynamically generates the e-mail
address in the browser client.

[ ... ]

Now I could write suitable code myself, but would be surprised if it
wasn't already available. Any pointers?

Pointers? What do you think this is, C? ;-) Try this:

def spam_averse_email_address( email_address, text ):
"""return HTML-embedded javascript to create a spam-averse mailto link"""

def char_codes( a_string ):
return ",".join(str(ord(a_char)) for a_char in a_string)

return """<script type="text/javascript">
<!--
document.write(
'<a href="mailto:'
+ String.fromCharCode(%s)
+ '">'
+ String.fromCharCode(%s)
+ '<\/A>');
// -->
</script>""" % (char_codes(email_address), char_codes(text))

The newlines within the triple quoted string are important; use that
function something like this:

print "<html>"
print "<head><title>Title</title></head>
print "<body>
print "<P>%s</P>" % spam_averse_email_address( 'e****@mydomain.com',
'click here to email me' )
print "</body>"
print "</html>"

You mentioned accessibility; make sure that your HTML does something
sensible if the user's browser doesn't do javascript.

HTH,
Dan


Bruno Desthuilliers has a nice one-liner:

python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'o****@xiludom.gro'.split('@')])"
I came up with this:

python <<EOF
print "".join([chr(ord(i)^ord(j)^64) for (i,j) in
zip('hpqudxu','BCEGKMQ')] +
list('ude.alcu.ibm@'[::-1]))
EOF

For mine, you you'll have to reverse the algorithm to generate the
"cipher text".

James

--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/
Jun 26 '06 #3

P: n/a
Dan Sommers wrote:
On Sun, 25 Jun 2006 21:10:31 +0100,
Andrew McLean <an*********@andros.org.uk> wrote:
I'm looking at putting some e-mail contact addresses on a web site,
and wanted to make it difficult for spammers to harvest them.


[ ... ]
Searching the web it looks like the best solution for me might be to
embed JavaScript in the web page that dynamically generates the e-mail
address in the browser client.


[ ... ]
Now I could write suitable code myself, but would be surprised if it
wasn't already available. Any pointers?


Pointers? What do you think this is, C? ;-) Try this:

def spam_averse_email_address( email_address, text ):
"""return HTML-embedded javascript to create a spam-averse mailto link"""

def char_codes( a_string ):
return ",".join(str(ord(a_char)) for a_char in a_string)

return """<script type="text/javascript">
<!--
document.write(
'<a href="mailto:'
+ String.fromCharCode(%s)
+ '">'
+ String.fromCharCode(%s)
+ '<\/A>');
// -->
</script>""" % (char_codes(email_address), char_codes(text))

The newlines within the triple quoted string are important; use that
function something like this:

print "<html>"
print "<head><title>Title</title></head>
print "<body>
print "<P>%s</P>" % spam_averse_email_address( 'e****@mydomain.com',
'click here to email me' )
print "</body>"
print "</html>"

You mentioned accessibility; make sure that your HTML does something
sensible if the user's browser doesn't do javascript.

HTH,
Dan


That's great. Just what I was looking for.

Jun 27 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.