Beispiel #1
0
 def send_backup(self):
     mail_backend = get_connection()
     bus_list = list(Bus.objects.values_list('id', 'bus'))
     email_list = []
     for [bus_id, bus] in bus_list:
         file_list = []
         id_list = list(
             Tour.objects.filter(archiv=False, bus_id=bus_id).values_list(
                 'datum', flat=True).distinct())
         for id in id_list:
             file_list += self.export_as_csv(id)
         if file_list:
             email_list = self.get_office_emails(bus)
         if not email_list or not file_list:
             continue
         mail_text = 'Liebe Koordinatoren,\nAnbei die bisherigen Fahrpläne. Diese sind nur zu verwenden im Falle dass der Web-Server des Bürgerbus Portals ausfällt.'
         message = EmailMessage(
             from_email=settings.EMAIL_HOST_USER,
             to=email_list,
             connection=mail_backend,
             subject="[Bürgerbus] Fahrplan Backup {} vom {}".format(
                 bus, datetime.date.today()),
             body=mail_text,
         )
         attachments = []  # start with an empty list
         for filename in file_list:
             # create the attachment triple for this filename
             content = open(filename, 'rb').read()
             import os
             attachment = (os.path.basename(filename), content,
                           'application/csv')
             # add the attachment to the list
             attachments.append(attachment)
         message.attachments = attachments
         message.send()
Beispiel #2
0
    def run(self):
        message = EmailMessage(from_email=self.from_email,
                               to=self.to,
                               body=self.body,
                               subject=self.subject)
        message.content_subtype = self.body_content_type

        message.attachments = self.list_attachments
        '''
        How it works attachments on EmailMessage?
        
        - Traditional method:
        
        if self.list_attachments:
            for attachment in self.list_attachments:
                message.attach(attachment[0], attachment[1], attachment[2])  # filename, content, mimetype
        
        - Resume method:
                
        [message.attach(attachment[0], attachment[1], attachment[2]) for attachment in self.list_attachments
        if self.list_attachments]
        
        - Fast method:
        
        message.attachments = self.list_attachment
        '''
        message.send(fail_silently=self.fail_silently)
Beispiel #3
0
def mail_log(title, message):
    logfilepath = os.path.join(LOG_DIRECTORY, 'harvest_job.log')
    logfile = open(logfilepath, 'r')
    adresses = [user.email for user in User.objects.filter(is_superuser=True)]
    try:
        email = EmailMessage(title, message)
        email.attachments = [('harvest_job.log', logfile.read(), 'text/plain')]
        email.to = adresses
        email.from_email = 'noreply.aspira.cron_routine_report'
        email.send()
        print('%s - Routine email sent to %s' %
              (djangoNow().strftime('%y-%m-%d_%H:%M'), adresses))
    except Exception as e:
        print('Routine email failed to send')
        print(e)
Beispiel #4
0
def send_routine_email(title,message):
    logfilepath = os.path.join(LOG_DIRECTORY, 'facebook.log')
    logfile = open(logfilepath, 'r')
    adresses = [user.email for user in User.objects.filter(is_superuser=True)]
    try:
        email = EmailMessage(title, message)
        email.attachments = [('facebookLogger.log', logfile.read(), 'text/plain')]
        email.to = adresses
        email.from_email = 'Aspira'
        email.send()
        print('%s - Routine email sent to %s'%(datetime.now().strftime('%y-%m-%d_%H:%M'),adresses))
    except Exception as e:
        print('Routine email failed to send')
        print(e)
        facebookLogger.exception('An error occured while sending an email to admin')
def send_routine_email(title,message):
    logfilepath = os.path.join(LOG_DIRECTORY, 'twitter.log')
    logfile = open(logfilepath, 'r')
    adresses = [user.email for user in User.objects.filter(is_superuser=True)]
    try:
        email = EmailMessage(title, message)
        email.attachments = [('twitterlogger.log', logfile.read(), 'text/plain')]
        email.to = adresses
        email.from_email = 'Aspira'
        email.send()
        print('%s - Routine email sent to %s'%(datetime.datetime.now().strftime('%y-%m-%d_%H:%M'),adresses))
    except Exception as e:
        print('Routine email failed to send')
        print(e)
        twitterLogger.exception('An error occured while sending an email to admin')
Beispiel #6
0
def send_appropriation(appropriation, included_activities=None):
    """Generate PDF and XML files from appropriation and send them to SBSYS.

    :param appropriation: the Appropriation from which to generate PDF and XML.
    :param included_activities: Activities which should be explicitly included.

    """
    if included_activities is None:
        included_activities_qs = models.Activity.objects.none()
    else:
        # Convert to queryset.
        included_activities_qs = models.Activity.objects.filter(
            id__in=(a.id for a in included_activities))

    today = datetime.date.today()

    # Fetch all currently granted main activities.
    approved_main_activities_ids = (appropriation.activities.filter(
        activity_type=models.MAIN_ACTIVITY,
        status=models.STATUS_GRANTED).exclude(end_date__lt=today).values_list(
            "id", flat=True))
    # Fetch all main activities from the explicitly included queryset.
    included_main_activities_ids = included_activities_qs.filter(
        activity_type=models.MAIN_ACTIVITY).values_list("id", flat=True)

    # Annotate is_new so we can highlight them in the template.
    main_activities = models.Activity.objects.filter(
        Q(id__in=approved_main_activities_ids)
        | Q(id__in=included_main_activities_ids)).annotate(is_new=Case(
            When(id__in=included_main_activities_ids, then=True),
            default=False,
            output_field=BooleanField(),
        ))

    # Fetch all currently granted supplementary activities.
    approved_suppl_activities_ids = appropriation.activities.filter(
        activity_type=models.SUPPL_ACTIVITY,
        status=models.STATUS_GRANTED).exclude(end_date__lt=today)

    # Fetch all supplementary activities from the explicitly included queryset.
    included_suppl_activities_ids = included_activities_qs.filter(
        activity_type=models.SUPPL_ACTIVITY)
    # Annotate is_new so we can highlight them in the template.
    suppl_activities = models.Activity.objects.filter(
        Q(id__in=approved_suppl_activities_ids)
        | Q(id__in=included_suppl_activities_ids)).annotate(is_new=Case(
            When(id__in=included_suppl_activities_ids, then=True),
            default=False,
            output_field=BooleanField(),
        ))

    render_context = {
        "appropriation": appropriation,
        "main_activities": main_activities,
        "supplementary_activities": suppl_activities,
    }

    # Get SBSYS template from main activity
    # and KLE number, SBSYS case file number from appropriation.
    sbsys_id = appropriation.sbsys_id
    section_info = appropriation.section_info
    render_context["kle_number"] = sbsys_id.split("-")[0]
    render_context["sbsys_template_id"] = section_info.sbsys_template_id
    render_context["sbsys_case_file_number"] = "-".join(
        sbsys_id.split("-")[:4])

    # Generate os2forms.xml
    xml_template = get_template(settings.SBSYS_XML_TEMPLATE)
    xml_data = xml_template.render(context=render_context)
    xml_file_name = "os2forms.xml"

    # Generate PDF
    html_template = get_template(settings.SBSYS_APPROPRIATION_TEMPLATE)
    html_data = html_template.render(context=render_context)

    # Configure fonts for correct rendering.
    font_config = FontConfiguration()
    pdf_data = HTML(string=html_data).write_pdf(font_config=font_config)
    pdf_file_name = f"{appropriation.sbsys_id}.pdf"

    # Send as email
    msg = EmailMessage()
    msg.subject = "Bevillingsskrivelse"
    msg.body = ""
    msg.from_email = config.DEFAULT_FROM_EMAIL
    msg.to = [config.SBSYS_EMAIL]
    msg.attachments = [
        (xml_file_name, xml_data, "text/xml"),
        (pdf_file_name, pdf_data, "application/pdf"),
    ]

    msg.send()