コード例 #1
0
def send_email(email_log_id):
    email = EmailLog[email_log_id]
    rv = mailext.send_email(email.to, email.subject, email.body)
    email_id = rv['id']
    EmailLog.set_by_id(
        email_log_id, {
            'email_id': email_id,
            'status': EmailLog.SEND_MAILGUN,
            'updated_at': datetime.datetime.now()
        })
コード例 #2
0
def schedule_emails():
    now = datetime.datetime.now()
    limit_time = now + datetime.timedelta(minutes=10)
    email_objs = EmailLog.select().where(EmailLog.status == EmailLog.SCHEDULED,
                                         EmailLog.send_at <= limit_time)
    for i in email_objs:
        EmailLog.set_by_id(i.id, {
            'status': EmailLog.IN_QUEUE,
            'updated_at': datetime.datetime.now()
        })
        send_email.apply_async(args=(i.id, ), eta=i.send_at)
コード例 #3
0
 def post(self):
     data = request.get_json()
     event_data = data['event-data']
     if event_data['event'] != 'opened' or not mailext.verify(
             **data['signature']):
         return Response(status=406)
     email_id = event_data['id']
     email = EmailLog.select().where(EmailLog.email_id == email_id).first()
     if email is None or email.status != EmailLog.SEND_SUCCESSFULLY:
         return Response(status=406)
     EmailLog.set_by_id(email.id, {
         'status': EmailLog.OPENED,
         'updated_at': datetime.datetime.now()
     })
     return Response(status=200)
コード例 #4
0
def test_email_track_open_successfully(client, mocker, faker,
                                       email_logs_called_mailgun):
    from app.api.views import mailext
    verify_mock = mocker.patch.object(mailext, 'verify', return_val=True)
    email = EmailLog.select().first()
    EmailLog.set_by_id(email.id, {
        'status': EmailLog.SEND_SUCCESSFULLY,
    })
    resp = client.post('/email/open-track',
                       json={
                           'event-data': {
                               'event': 'opened',
                               'id': email.email_id,
                           },
                           'signature': {}
                       })
    assert resp.status_code == 200
    assert EmailLog[email.id].status == EmailLog.OPENED
    assert verify_mock.called
コード例 #5
0
 def post(self):
     data = request.get_json()
     event_data = data['event-data']
     if event_data['event'] not in (
             'delivered',
             'failed',
     ) or not mailext.verify(**data['signature']):
         return Response(status=406)
     email_id = event_data['id']
     email = EmailLog.select().where(EmailLog.email_id == email_id).first()
     if email is None or email.status != EmailLog.SEND_MAILGUN:
         return Response(status=406)
     if event_data['event'] == 'failed':
         EmailLog.set_by_id(email.id, {'status': EmailLog.SEND_FAILED})
     else:
         EmailLog.set_by_id(
             email.id, {
                 'status': EmailLog.SEND_SUCCESSFULLY,
                 'updated_at': datetime.datetime.now()
             })
     return Response(status=200)