Beispiel #1
0
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)
Beispiel #2
0
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]
Beispiel #6
0
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)
Beispiel #7
0
    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))
        ]