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)
예제 #2
0
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)
예제 #3
0
 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')
예제 #4
0
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)
예제 #5
0
파일: admin.py 프로젝트: ktrumble/prmai
 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')