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()
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)
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)
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')
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()