forked from yfalcon8/relationship_manager_project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sendnotif.py
143 lines (97 loc) · 4.55 KB
/
sendnotif.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
"""Send user an email about their contact and recommend how to reach out."""
import arrow
import choice
import schedule
import smtplib # Built-in Simple Mail Transfer Protocol (SMTP) module
from model import Event, User, Relationship, connect_to_db, db
from flask import Flask
app = Flask(__name__)
connect_to_db(app)
# Sets make the most sense here, as it's faster than a list and there's no need for a key.
past_events = set()
def query_to_email():
"""Query the Events table to check who needs to be emailed and email them."""
# Grab the current time in datetime format.
current_time_arrowed = arrow.now('US/Pacific')
current_time_datetimed = current_time_arrowed.datetime
# Grab all of the Events that passed the current time.
all_events = db.session.query(Event).filter(Event.scheduled_at < current_time_datetimed).all()
# Check to see if the email has already been sent regarding that event.
# If not, send the email.
for event in all_events:
if event.id not in past_events:
# Grab the user info.
user_info = db.session.query(User.first_name, User.last_name, User.email).filter_by(id=event.user_id).one()
recipient_name = user_info.first_name[0], user_info.last_name[0]
# Grab the relationship info.
relatp_info = db.session.query(Relationship.first_name, Relationship.last_name).filter_by(id=event.relatp_id)
relatp_name = relatp_info.first_name, relatp_info.last_name
# Send the email.
send_event_notification(recipient_name,
relatp_name,
user_info.email,
event.rcmdn)
# Make sure the user doesn't get notified about that event again.
past_events.add(event.id)
else:
return
def send_event_notification(recipient_name, relatp_name, recipient_email, recommendation):
"""Send an email to the user reminding them to reach out to their friends."""
content = content1, content2, content3
content1 = """From: Relationship Manager App <RelationshipManagerHB@gmail.com>
To: {}
Subject: {} misses you!
Hiya, {}!
It's been a while since {} has heard from you.
{}.
Relationships require time and care to nurture.
Stay happy,
Relationship Manager App
""".format(recipient_email,
relatp_name,
recipient_name.first_name,
relatp_name,
recommendation)
content2 = """From: Relationship Manager App <RelationshipManagerHB@gmail.com>
To: {}
Subject: Re-connect with {}
{}!
{} understands that you're busy but would love to see how you're
doing. {}.
Warmly,
Relationship Manager App
""".format(recipient_email, relatp_name, recipient_name.first_name, relatp_name, recommendation)
contact3 = """From: Relationship Manager App <RelationshipManagerHB@gmail.com>
To: {}
Subject: Re-connect with {}
Hi {}!
Remember {}? If it's been a while since you've reached out to
{}, remind them of a memory you shared with them or how
you know each other. Don't expect them to remember exactly who you are
(overselling yourself), but don't start with "You probably don't remember
me but.." and undersell yourself either, as you'll trick them into
somehow thinking that the two of you don't know each other that well.
{}. What's the worst that could happen?
Happy networking,
Relationship Manager
""".format(recipient_email, relatp_name, recipient_name, relatp_name, relatp_name, recommendation)
# Create an SMTP object that specifices the server & port (465 or 587 for Gmail).
mail = smtplib.SMTP('smtp.gmail.com', 587)
# Identify yourself to server by helo (regular) or ehlo (esmtp server).
mail.ehlo()
# Start TLS mode (transport layer security).
# Any smtp command that comes after this code will be encrypted.
mail.starttls()
# Log in to the account that email will come from.
mail.login(YOUR_EMAIL_ADDRESS, YOUR_EMAIL_PASSWORD)
# Specify sender, receiver and content of email.
mail.sendmail(YOUR_EMAIL_ADDRESS, recipient_email, choice(content))
# Disconnect from teh SMTP server
mail.quit()
if __name__ == "__main__":
"""This is useful for running this module interactively. This will leave me
in a state of being able to work with the database directly."""
schedule.every().hour.do(query_to_email)
while True:
schedule.run_pending()
# print "Connected to DB."