email support

This commit is contained in:
Miguel Grinberg 2012-12-16 00:36:04 -08:00
parent 8a27076ae4
commit f441f8d8d8
7 changed files with 68 additions and 4 deletions

View File

@ -3,6 +3,7 @@ from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
from flask.ext.openid import OpenID
from flask.ext.mail import Mail
from config import basedir, ADMINS, MAIL_SERVER, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD
app = Flask(__name__)
@ -12,6 +13,7 @@ lm = LoginManager()
lm.setup_app(app)
lm.login_view = 'login'
oid = OpenID(app, os.path.join(basedir, 'tmp'))
mail = Mail(app)
if not app.debug:
import logging

8
app/decorators.py Normal file
View File

@ -0,0 +1,8 @@
from threading import Thread
def async(f):
def wrapper(*args, **kwargs):
thr = Thread(target = f, args = args, kwargs = kwargs)
thr.start()
return wrapper

28
app/emails.py Normal file
View File

@ -0,0 +1,28 @@
from flask import render_template
from flask.ext.mail import Message
from app import mail
from decorators import async
from config import ADMINS
@async
def send_async_email(msg):
mail.send(msg)
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender = sender, recipients = recipients)
msg.body = text_body
msg.html = html_body
send_async_email(msg)
#thr = threading.Thread(target = send_async_email, args = [msg])
#thr.start()
def follower_notification(followed, follower):
send_email("[microblog] %s is now following you!" % follower.nickname,
ADMINS[0],
[followed.email],
render_template("follower_email.txt",
user = followed, follower = follower),
render_template("follower_email.html",
user = followed, follower = follower))

View File

@ -0,0 +1,13 @@
<p>Dear {{user.nickname}},</p>
<p><a href="{{url_for("user", nickname = follower.nickname, _external = True)}}">{{follower.nickname}}</a> is now a follower.</p>
<table>
<tr valign="top">
<td><img src="{{follower.avatar(50)}}"></td>
<td>
<a href="{{url_for('user', nickname = follower.nickname, _external = True)}}">{{follower.nickname}}</a><br />
{{follower.about_me}}
</td>
</tr>
</table>
<p>Regards,</p>
<p>The <code>microblog</code> admin</p>

View File

@ -0,0 +1,9 @@
Dear {{user.nickname}},
{{follower.nickname}} is now a follower. Click on the following link to visit {{follower.nickname}}'s profile page:
{{url_for("user", nickname = follower.nickname, _external = True)}}
Regards,
The microblog admin

View File

@ -4,6 +4,7 @@ from app import app, db, lm, oid
from forms import LoginForm, EditForm, PostForm, SearchForm
from models import User, ROLE_USER, ROLE_ADMIN, Post
from datetime import datetime
from emails import follower_notification
from config import POSTS_PER_PAGE, MAX_SEARCH_RESULTS
@lm.user_loader
@ -135,6 +136,7 @@ def follow(nickname):
db.session.add(u)
db.session.commit()
flash('You are now following ' + nickname + '!')
follower_notification(user, g.user)
return redirect(url_for('user', nickname = nickname))
@app.route('/unfollow/<nickname>')

View File

@ -15,11 +15,13 @@ SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
WHOOSH_BASE = os.path.join(basedir, 'search.db')
# mail server settings
MAIL_SERVER = 'localhost'
# email server
MAIL_SERVER = 'your.mailserver.com'
MAIL_PORT = 25
MAIL_USERNAME = None
MAIL_PASSWORD = None
MAIL_USE_TLS = False
MAIL_USE_SSL = False
MAIL_USERNAME = 'you'
MAIL_PASSWORD = 'your-password'
# administrator list
ADMINS = ['you@example.com']