This feed contains pages in the "studivz" category.
Bei StudiVZ hat man das klitzekleine Problem, dass man nur eine Benachrichtigungsmail bekommt, dass man eine Nachricht erhalten hat, aber nicht erfährt, was drin steht. Mit ein wenig Python und einem eigenen Mailserver (eventl auch ohne) kann man aber Abhilfe schaffen:
#!/usr/bin/python
from xml.dom.minidom import parse, parseString
from mechanize import Browser
import os, sys, smtplib
# args: SENDER TO ORIGTO
mail=sys.argv[3]
pw="studivzpassword"
to=sys.argv[2]
sendermail="postmaster@example.com"
process=False
origmsg=[]
preserve_headers=['From','To','Date','Subject','Content-Type','Content-Transfer-Encoding','MIME-Version']
inHeaders=True
for line in sys.stdin:
line=line[:-1]
if inHeaders:
if line == '':
inHeaders=False
origmsg.append("")
s = line.split(": ",1)
if len(s) == 2:
(name, value) = s
else:
continue
if name in preserve_headers:
origmsg.append(line)
if name == "Subject" and "Neue Nachricht von " in value:
process=True
if name == "From" and "studiVZ Zentrale" in value:
process=True
else:
origmsg.append(line)
if not process:
server = smtplib.SMTP('localhost')
server.sendmail(sendermail, to, "\r\n".join(origmsg))
server.quit()
sys.exit(0)
def getMessages(data, msgs={}):
doc=parseString(data)
for div in doc.getElementsByTagName('div'):
if 'status_new' in div.getAttribute('class'):
id=div.getAttribute('id')[4:]
if not msgs.has_key(id):
msgs[id]={}
for subdiv in div.getElementsByTagName('div'):
if 'body_text' in subdiv.getAttribute('class'):
msgs[id]['content'] = ''
for e in subdiv.childNodes:
if e.nodeType == e.TEXT_NODE:
msgs[id]['content'] += '> '+e.nodeValue.strip()
if e.nodeName == 'br':
msgs[id]['content'] += "\r\n"
if 'fromName' in subdiv.getAttribute('class'):
msgs[id]['sender'] = subdiv.getElementsByTagName("a")[0].firstChild.nodeValue.strip()
msgs[id]['time'] = subdiv.getElementsByTagName("small")[0].firstChild.nodeValue.strip()
if 'subject' in subdiv.getAttribute('class'):
msgs[id]['subject'] = subdiv.getElementsByTagName('a')[0].firstChild.nodeValue.strip()
return msgs
br = Browser()
res=br.open("http://www.studivz.net")
br.select_form(nr=0)
br['email']=mail
br['password']=pw
res2=br.submit()
res3=br.follow_link(text_regex=r'Nachrichtendienst')
res4=br.follow_link(text_regex=r'Inbox')
msgs=getMessages(res4.read())
toBeRead=[]
for (id,msg) in msgs.iteritems():
if not msg.has_key('content'):
toBeRead.append(id)
for id in toBeRead:
resN=br.follow_link(url_regex=r'/Messages/Inbox/messageId/'+id+'/p/')
msgs=getMessages(resN.read(),msgs)
res6=br.follow_link(text_regex='raus hier')
if len(msgs) > 0:
server = smtplib.SMTP('localhost')
for (id,msg) in msgs.iteritems():
fromaddr = str(msg['sender'])+" <"+sendermail+">"
mmsg = "From: %s\r\nTo: %s\r\n" % (fromaddr, to)
mmsg += "Subject: [StudiVZ] %s\r\n" % msg['subject']
mmsg += 'Content-Type: text/plain; charset="UTF-8"\r\n'
mmsg += 'Content-Transfer-Encoding: 8bit\r\n'
mmsg += 'X-StudiVZ-MsgId: %s\r\n' % id
mmsg += '\r\n'
mmsg += msg['sender'] + ' schrieb am ' + msg['time'] + ':\r\n'
mmsg += msg['content']
mmsg += '\r\n\r\n\t StudiVZ Nachrichten Mailing Robot'
server.sendmail(fromaddr, to, mmsg)
server.quit()
Dieses Script nimmt über STDIN eine Mail entgegen und erwartet als Argumente zuerst die Absendermailadresse, danach die Mailadresse, wo die Mail schlussendlich landen sollen und als drittes Argument die Mailadresse mit der man bei StudiVZ angemeldet ist. Man bindet dieses Script in Postfix analog zu den Autoreplies ein.