From 5a0f7c9350431ab02820088afb4ef699194253db Mon Sep 17 00:00:00 2001 From: Ronald Schaten Date: Fri, 22 Mar 2013 22:05:15 +0100 Subject: [PATCH] rewrote mail function, to avoid warnings on mailserver --- atomstrom.conf.sample | 6 ++++-- atomstrom.py | 43 ++++++++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/atomstrom.conf.sample b/atomstrom.conf.sample index dfed8c7..d3877e7 100644 --- a/atomstrom.conf.sample +++ b/atomstrom.conf.sample @@ -6,7 +6,9 @@ hostname = localhost database = atomstrom [email] -sender = Atomstrom -receiver = dummy@dummy.invalid +sender_name = Atomstrom +sender_address = dummy@dummy.invalid +receiver_name = Mail Receiver +receiver_address = dummy@dummy.invalid prefix_single = [as] prefix_digest = [atomstrom] diff --git a/atomstrom.py b/atomstrom.py index 3d48546..c388954 100755 --- a/atomstrom.py +++ b/atomstrom.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +#coding: utf-8 from sqlalchemy import create_engine, Table, Column, Integer, Text, String, Boolean, DateTime, MetaData, ForeignKey, desc from sqlalchemy.orm import sessionmaker, relation, backref @@ -14,9 +15,14 @@ import hn import html2text import ConfigParser import pprint -import smtplib -from email.mime.text import MIMEText from optparse import OptionParser +from cStringIO import StringIO +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.header import Header +from email import Charset +from email.generator import Generator +import smtplib Base = declarative_base() @@ -142,15 +148,19 @@ class Entry(Base): def send_mail(sender, receiver, subject, body): - print 'sending to %s: %s' % (receiver, subject) - mail = MIMEText(body, _charset='utf-8') - mail['From'] = sender.encode('utf-8') - mail['To'] = receiver - mail['Subject'] = subject - mailserver = smtplib.SMTP('localhost') - mailserver.sendmail(sender, [receiver], mail.as_string()) - mailserver.quit() - + print 'sending to %s: %s' % (receiver[0], subject) + Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8') + mail = MIMEMultipart('alternative') + mail['Subject'] = "%s" % Header(subject, 'utf-8') + mail['From'] = "\"%s\" <%s>" % (Header(sender[0], 'utf-8'), sender[1]) + mail['To'] = "\"%s\" <%s>" % (Header(receiver[0], 'utf-8'), receiver[1]) + textpart = MIMEText(body, 'plain', 'utf-8') + mail.attach(textpart) + str_io = StringIO() + gen = Generator(str_io, False) + gen.flatten(mail) + s = smtplib.SMTP('localhost') + s.sendmail("", receiver[1], str_io.getvalue()) def get_entry_text(entry): if entry.readability: @@ -195,7 +205,6 @@ def mail_daily_digest(session, sender, receiver, prefix): subject = '%s (%s) - %d entries' % (today.strftime('%y%m%d'), today.strftime('%A'), count) if prefix != '': subject = '%s %s' % (prefix, subject) - sender = '%s <%s>' % ('Atomstrom', sender) send_mail(sender, receiver, subject, body) for feed, feedinfo, entry in entries: entry.sent = datetime.now() @@ -212,7 +221,7 @@ def mail_single_entry(feed, feedinfo, entry, sender, receiver, prefix): body = '%s\n\n' % get_entry_text(entry) body = body + '%s\n' % feedinfo.link body = body + '%s\n' % link - sender = '%s <%s>' % (feedinfo.title, sender) + sender[0] = feedinfo.title send_mail(sender, receiver, subject, body) entry.sent = datetime.now() @@ -351,13 +360,13 @@ if __name__ == '__main__': if options.fetch: fetch_all_feeds(session) if options.single: - sender = config.get('email', 'sender') - receiver = config.get('email', 'receiver') + sender = [config.get('email', 'sender_name'), config.get('email', 'sender_address')] + receiver = [config.get('email', 'receiver_name'), config.get('email', 'receiver_address')] prefix = config.get('email', 'prefix_single') mail_single_entries(session, sender, receiver, prefix) if options.daily: - sender = config.get('email', 'sender') - receiver = config.get('email', 'receiver') + sender = [config.get('email', 'sender_name'), config.get('email', 'sender_address')] + receiver = [config.get('email', 'receiver_name'), config.get('email', 'receiver_address')] prefix = config.get('email', 'prefix_digest') mail_daily_digest(session, sender, receiver, prefix) if not (options.fetch or options.single or options.daily):