def send_emails(email_id): members_not_sent_to = dao_get_members_not_sent_to(email_id) if current_app.config['ENVIRONMENT'] != 'live': limit = 3 current_app.logger.info('Task send_emails received %s, sending %d emails', email_id, limit or len(members_not_sent_to)) email = dao_get_email_by_id(email_id) for index, (member_id, email_to) in enumerate(members_not_sent_to): if limit and index > limit - 1: break subject = email.get_subject() message = None if email.email_type == EVENT: message = get_email_html(email.email_type, event_id=email.event_id, details=email.details, extra_txt=email.extra_txt, member_id=member_id) email_status_code = send_email(email_to, subject, message) dao_add_member_sent_to_email(email_id, member_id, status_code=email_status_code)
def send_emails(email_id): members_not_sent_to = dao_get_members_not_sent_to(email_id) if current_app.config.get('EMAIL_RESTRICT'): limit = 1 elif current_app.config.get('ENVIRONMENT') == 'live': email_provider = get_email_provider() limit = email_provider.limit else: limit = current_app.config.get('EMAIL_LIMIT') current_app.logger.info( 'Task send_emails received %s, sending %d emails', str(email_id), len(members_not_sent_to) if len(members_not_sent_to) < limit else limit) email = dao_get_email_by_id(email_id) try: for index, (member_id, email_to) in enumerate(members_not_sent_to): if limit and index > limit - 1 or email.email_state != APPROVED: current_app.logger.info("Email stopped - {}".format( "not approved" if email.email_state != APPROVED else f"limit reached: {limit}")) break subject = email.get_subject() message = None if email.email_type == EVENT: message = get_email_html(email.email_type, event_id=email.event_id, details=email.details, extra_txt=email.extra_txt, member_id=member_id) elif email.email_type == MAGAZINE: message = get_email_html(MAGAZINE, magazine_id=email.magazine_id, member_id=member_id) email_status_code, email_provider_id = send_email( email_to, subject, message) dao_add_member_sent_to_email(email_id, member_id, status_code=email_status_code, email_provider_id=email_provider_id) send_ga_event( f"Sent {email.email_type} email, {subject} - {str(email.id)}", "email", "send success" if email_status_code in [200, 201, 202] else "send failed", f"{subject} - {email.id}") except InvalidRequest as e: if e.status_code == 429: current_app.logger.error("Email limit reached: %r", e.message) if "Minute" in e.message: send_periodic_emails.apply_async(countdown=60) raise
def it_does_not_add_an_existing_member_sent_to_email( self, db, db_session, sample_email, sample_member): members = [sample_member] dao_update_email(sample_email.id, members_sent_to=members) with pytest.raises(expected_exception=IntegrityError): dao_add_member_sent_to_email(sample_email.id, sample_member.id) email_from_db = Email.query.filter(Email.id == sample_email.id).first() assert email_from_db.members_sent_to == [sample_member]
def it_adds_a_member_sent_to_email_for_first_member( self, db, db_session, sample_email, sample_member): dao_add_member_sent_to_email(sample_email.id, sample_member.id, created_at='2019-08-1 12:00:00') email_from_db = Email.query.filter(Email.id == sample_email.id).first() assert email_from_db.members_sent_to == [sample_member] email_to_member = EmailToMember.query.filter_by( email_id=sample_email.id, member_id=sample_member.id).first() assert str(email_to_member.created_at) == '2019-08-01 12:00:00'
def it_adds_a_member_sent_to_email(self, db, db_session, sample_email, sample_member): members = [sample_member] dao_update_email(sample_email.id, members_sent_to=members) member = create_member(name='New member', email='*****@*****.**') dao_add_member_sent_to_email(sample_email.id, member.id) email_from_db = Email.query.filter(Email.id == sample_email.id).first() assert email_from_db.members_sent_to == [sample_member, member]
def send_emails(email_id): members_not_sent_to = dao_get_members_not_sent_to(email_id) current_app.logger.info('Task send_emails received %s, sending %d emails', email_id, len(members_not_sent_to)) email = dao_get_email_by_id(email_id) for member_id, email_to in members_not_sent_to: subject = email.get_subject() message = None if email.email_type == EVENT: message = get_email_html( email.email_type, event_id=email.event_id, details=email.details, extra_txt=email.extra_txt) email_status_code = send_email(email_to, subject, message) dao_add_member_sent_to_email(email_id, member_id, status_code=email_status_code)
def it_doesnt_create_email_to_member_if_already_imported( self, client, db_session, sample_email, sample_member): dao_add_member_sent_to_email(sample_email.id, sample_member.id) data = [ { "id": "1", "emailid": "1", "mailinglistid": "1", "timestamp": "2019-06-10 17:30:00" }, ] response = client.post(url_for('emails.import_emails_members_sent_to'), data=json.dumps(data), headers=[('Content-Type', 'application/json'), create_authorization_header()]) assert response.status_code == 400 assert response.json['errors'] == [ '0: Already exists email_to_member {}, {}'.format( str(sample_email.id), str(sample_member.id)) ]