def setup_email_list(): email_sent = False recipients = userdb.get_newsletter_recipients() email_name = "Daily %s" % datetime.today().strftime("%a %b %d, %Y") # ===== # 1) create a "list" for today's email # POST https://api.sendgrid.com/api/newsletter/lists/add.json # @list (list name) api_link = 'https://api.sendgrid.com/api/newsletter/lists/add.json' params = {'list': email_name} result = do_api_request(api_link, method='POST', params=params) # 4) add everyone from our recipients list to the sendgrid list # POST https://api.sendgrid.com/api/newsletter/lists/email/add.json # list=ListName data[]={ 'email': '', 'name': '' } & data[]={ 'email': '', 'name': '' } api_link = 'https://api.sendgrid.com/api/newsletter/lists/email/add.json' num_groups = int(math.ceil(len(recipients) / 50)) recipient_groups = split_seq(recipients, num_groups) for i, group in enumerate(recipient_groups): # sendgrid needs list add requests to be < 100 peole users = MultiDict() for i, user in enumerate(group): if user.get('user').get('username') != "" and user.get( 'email_address') != "": users.add( 'data', '{"name":"%s","email":"%s"}' % (user.get('user').get('username'), user.get('email_address'))) params = {'list': email_name, 'data': users.getlist('data')} result = do_api_request(api_link, method='POST', params=params)
def send_daily_email(email): recipients = userdb.get_newsletter_recipients() recipient_usernames = [r['user']['username'] for r in recipients] email_sent = False for user in recipients: # send email if settings.get('environment') != "prod": print "If this were prod, we would have sent email to %s" % user['email_address'] else: requests.post( "https://sendgrid.com/api/mail.send.json", data={ "api_user":settings.get('sendgrid_user'), "api_key":settings.get('sendgrid_secret'), "from": email['from'], "to": user['email_address'], "subject": email['subject'], "html": email['body_html'] }, verify=False ) email_sent = True # log it if email_sent: log_daily_email(email, recipient_usernames)
def post(self): if not self.current_user_can('send_daily_email'): raise tornado.web.HTTPError(401) slugs = self.request.arguments['slugs'] if not slugs: return self.write("No posts selected") email = emailsdb.construct_daily_email(slugs) recipients = userdb.get_newsletter_recipients() if self.get_argument('preview', '') == "true": self.render('admin/daily_email.html', slugs=slugs, posts=None, email=email, has_previewed=True, has_sent=False, recipients=recipients) else: emailsdb.send_daily_email(email) self.redirect('/admin/daily_email/history')
def setup_email_list(): email_sent = False recipients = userdb.get_newsletter_recipients() email_name = "Daily %s" % datetime.today().strftime("%a %b %d, %Y") # ===== # 1) create a "list" for today's email # POST https://api.sendgrid.com/api/newsletter/lists/add.json # @list (list name) api_link = 'https://api.sendgrid.com/api/newsletter/lists/add.json' params = { 'list': email_name } result = do_api_request(api_link, method='POST', params=params) # 4) add everyone from our recipients list to the sendgrid list # POST https://api.sendgrid.com/api/newsletter/lists/email/add.json # list=ListName data[]={ 'email': '', 'name': '' } & data[]={ 'email': '', 'name': '' } api_link = 'https://api.sendgrid.com/api/newsletter/lists/email/add.json' num_groups = int(math.ceil(len(recipients) / 50)) recipient_groups = split_seq(recipients, num_groups) for i, group in enumerate(recipient_groups): # sendgrid needs list add requests to be < 100 peole users = MultiDict() for i, user in enumerate(group): if user.get('user').get('username') != "" and user.get('email_address') != "": users.add('data', '{"name":"%s","email":"%s"}' % (user.get('user').get('username'), user.get('email_address'))) params = { 'list': email_name, 'data': users.getlist('data') } result = do_api_request(api_link, method='POST', params=params)
def get(self): posts = postsdb.get_hot_posts() has_previewed = self.get_argument("preview", False) recipients = userdb.get_newsletter_recipients() #on this page, you'll choose from hot posts and POST the selections to the email form` self.render('admin/daily_email.html')