diff --git a/apiserver/apiserver/api/emails/welcome.html b/apiserver/apiserver/api/emails/welcome.html
new file mode 100644
index 0000000..a3a5df0
--- /dev/null
+++ b/apiserver/apiserver/api/emails/welcome.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+ Hi [name],
+
+ You just signed up to Spaceport with the username: [username]
+
+ To manage your Protospace membership go to:
+
+
+ You have automatically been added to our forum Spacebar at:
+
+
+ Please introduce yourself here:
+
+
+ If you have any questions, you will get the fastest response there.
+
+ Your next goal is to become vetted after:
+ - paying your member dues
+ - being a member for four weeks
+ - attending a New Member Orientation
+ - finding two members to sponsor (vouch for) you
+
+ You can meet members Tuesday evenings during our open house.
+
+ Mark [date] on your calendar as the day you can get vetted.
+
+ Sign up for a New Member Orientation here:
+
+
+ Good luck,
+ Spaceport
+
+
+
diff --git a/apiserver/apiserver/api/emails/welcome.txt b/apiserver/apiserver/api/emails/welcome.txt
new file mode 100644
index 0000000..265a6ae
--- /dev/null
+++ b/apiserver/apiserver/api/emails/welcome.txt
@@ -0,0 +1,30 @@
+Hi [name],
+
+You just signed up to Spaceport with the username: [username]
+
+To manage your Protospace membership go to:
+https://my.protospace.ca
+
+You have automatically been added to our forum Spacebar at:
+https://forum.protospace.ca
+
+Please introduce yourself here:
+https://forum.protospace.ca/c/chattymcchatface/new-user-introductions/31
+
+If you have any questions, you will get the fastest response there.
+
+Your next goal is to become vetted after:
+- paying your member dues
+- being a member for four weeks
+- attending a New Member Orientation
+- finding two members to sponsor (vouch for) you
+
+You can meet members Tuesday evenings during our open house.
+
+Mark [date] on your calendar as the day you can get vetted.
+
+Sign up for a New Member Orientation here:
+https://my.protospace.ca/classes
+
+Good luck,
+Spaceport
diff --git a/apiserver/apiserver/api/utils.py b/apiserver/apiserver/api/utils.py
index 5285519..90700b2 100644
--- a/apiserver/apiserver/api/utils.py
+++ b/apiserver/apiserver/api/utils.py
@@ -21,7 +21,7 @@ from django.db.models import Sum
from django.core.cache import cache
from django.utils.timezone import now, pytz
-from . import models, serializers, utils_ldap, utils_stats, utils_auth, utils
+from . import models, serializers, utils_ldap, utils_stats, utils_auth, utils, utils_email
from .. import settings
STATIC_FOLDER = 'data/static/'
@@ -374,6 +374,14 @@ def register_user(data, user):
utils.alert_tanner(msg)
logger.info(msg)
+ if data['request_id']: utils_stats.set_progress(data['request_id'], 'Sending welcome email...')
+ try:
+ utils_email.send_welcome_email(user.member)
+ except BaseException as e: # TODO: remove, just for testing
+ msg = 'Problem sending welcome email: ' + str(e)
+ logger.exception(msg)
+ alert_tanner(msg)
+
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Done!')
time.sleep(1)
diff --git a/apiserver/apiserver/api/utils_email.py b/apiserver/apiserver/api/utils_email.py
new file mode 100644
index 0000000..7a16d96
--- /dev/null
+++ b/apiserver/apiserver/api/utils_email.py
@@ -0,0 +1,46 @@
+import logging
+logger = logging.getLogger(__name__)
+
+import os
+import smtplib
+from datetime import datetime, timedelta
+
+from django.core.mail import send_mail
+
+from . import utils
+from .. import settings
+
+EMAIL_DIR = os.path.join(settings.BASE_DIR, 'apiserver/api/emails/')
+
+def send_welcome_email(member):
+ vetting_date = member.application_date + timedelta(days=28)
+
+ def replace_fields(text):
+ return text.replace(
+ '[name]', member.first_name,
+ ).replace(
+ '[username]', member.user.username,
+ ).replace(
+ '[date]', vetting_date.strftime('%A, %B %d'),
+ )
+
+ with open(EMAIL_DIR + 'welcome.txt', 'r') as f:
+ email_text = replace_fields(f.read())
+
+ with open(EMAIL_DIR + 'welcome.html', 'r') as f:
+ email_html = replace_fields(f.read())
+
+ try:
+ send_mail(
+ subject='Welcome to Protospace!',
+ message=email_text,
+ from_email=None, # defaults to DEFAULT_FROM_EMAIL
+ recipient_list=[member.user.email, 'portal@tannercollin.com'],
+ html_message=email_html,
+ )
+
+ logger.info('Sent welcome email:\n' + email_text)
+ except smtplib.SMTPException as e:
+ msg = 'Problem sending welcome email to ' + member.user.email + ': ' + str(e)
+ utils.alert_tanner(msg)
+ logger.exception(msg)