def run(self,rr,elem,**kw): if elem.sent: return rr.ui.error(message='Mail has already been sent.') text_content = html2text(elem.body) #~ subject = elem.subject #~ sender = "%s <%s>" % (rr.get_user().get_full_name(),rr.get_user().email) sender = "%s <%s>" % (elem.sender.get_full_name(),elem.sender.email) #~ recipients = list(elem.get_recipients_to()) msg = EmailMultiAlternatives(subject=elem.subject, from_email=sender, body=text_content, to=[r.name_address() for r in elem.recipient_set.filter(type=RecipientType.to)]) msg.attach_alternative(elem.body, "text/html") msg.send() elem.sent = datetime.datetime.now() elem.save() kw.update(refresh=True) msg = "Email %s from %s has been sent to %s." % ( elem.id,elem.sender,', '.join([r.address for r in elem.recipient_set.all()])) #~ for n in """EMAIL_HOST SERVER_EMAIL EMAIL_USE_TLS EMAIL_BACKEND""".split(): #~ msg += "\n" + n + " = " + unicode(getattr(settings,n)) logger.info(msg) return rr.ui.success(msg,**kw)
def run_from_ui(self, ar, **kw): elem = ar.selected_rows[0] #~ if elem.sent: #~ return rr.ui.error(message='Mail has already been sent.') #~ subject = elem.subject #~ sender = "%s <%s>" % (rr.get_user().get_full_name(),rr.get_user().email) sender = "%s <%s>" % (elem.user.get_full_name(), elem.user.email) #~ recipients = list(elem.get_recipients_to()) to = [] cc = [] bcc = [] found = False missing_addresses = [] for r in elem.recipient_set.all(): recipients = None if r.type == RecipientTypes.to: recipients = to elif r.type == RecipientTypes.cc: recipients = cc elif r.type == RecipientTypes.bcc: recipients = bcc if recipients is not None: if not r.address: missing_addresses.append(r) if r.address.endswith('@example.com'): logger.info("20120712 ignored recipient %s", r.name_address()) else: recipients.append(r.name_address()) found = True #~ else: #~ logger.info("Ignoring recipient %s (type %s)",r,r.type) if not found: return ar.error(_("No recipients found.")) if len(missing_addresses): msg = _("There are recipients without address: ") msg += ', '.join([str(r) for r in missing_addresses]) return ar.error(msg, alert=True) #~ as_attachment = elem.owner.attach_to_email(rr) #~ body = elem.body #~ if as_attachment: #~ body = elem.body #~ else: #~ body = elem.owner.get_mailable_body(rr) text_content = html2text(elem.body) msg = EmailMultiAlternatives(subject=elem.subject, from_email=sender, body=text_content, to=to, bcc=bcc, cc=cc) msg.attach_alternative(elem.body, "text/html") for att in elem.attachment_set.all(): #~ if as_attachment or att.owner != elem.owner: fn = att.owner.get_target_name() if fn is None: raise Warning(_("Couldn't find target file of %s") % att.owner) msg.attach_file(fn) uploads = dd.resolve_app("uploads") for up in uploads.UploadsByController.request(elem): #~ for up in uploads.Upload.objects.filter(owner=elem): fn = os.path.join(settings.MEDIA_ROOT, up.file.name) msg.attach_file(fn) num_sent = msg.send() elem.sent = timezone.now() kw.update(refresh=True) #~ msg = "Email %s from %s has been sent to %s." % ( #~ elem.id,elem.sender,', '.join([ #~ r.address for r in elem.recipient_set.all()])) msg = _("Email %(id)s from %(sender)s has been sent to %(num)d recipients.") % dict( id=elem.id, sender=sender, num=num_sent) kw.update(message=msg, alert=True) #~ for n in """EMAIL_HOST SERVER_EMAIL EMAIL_USE_TLS EMAIL_BACKEND""".split(): #~ msg += "\n" + n + " = " + unicode(getattr(settings,n)) logger.info(msg) if elem.owner: elem.owner.after_send_mail(elem, ar, kw) elem.save() ar.success(**kw)
def run_from_ui(self, ar, **kw): elem = ar.selected_rows[0] #~ if elem.sent: #~ return rr.ui.error(message='Mail has already been sent.') #~ subject = elem.subject #~ sender = "%s <%s>" % (rr.get_user().get_full_name(),rr.get_user().email) sender = "%s <%s>" % (elem.user.get_full_name(), elem.user.email) #~ recipients = list(elem.get_recipients_to()) to = [] cc = [] bcc = [] found = False missing_addresses = [] for r in elem.recipient_set.all(): recipients = None if r.type == RecipientTypes.to: recipients = to elif r.type == RecipientTypes.cc: recipients = cc elif r.type == RecipientTypes.bcc: recipients = bcc if recipients is not None: if not r.address: missing_addresses.append(r) if r.address.endswith('@example.com'): logger.info("20120712 ignored recipient %s", r.name_address()) else: recipients.append(r.name_address()) found = True #~ else: #~ logger.info("Ignoring recipient %s (type %s)",r,r.type) if not found: return ar.error(_("No recipients found.")) if len(missing_addresses): msg = _("There are recipients without address: ") msg += ', '.join([unicode(r) for r in missing_addresses]) return ar.error(msg, alert=True) #~ as_attachment = elem.owner.attach_to_email(rr) #~ body = elem.body #~ if as_attachment: #~ body = elem.body #~ else: #~ body = elem.owner.get_mailable_body(rr) text_content = html2text(elem.body) msg = EmailMultiAlternatives(subject=elem.subject, from_email=sender, body=text_content, to=to, bcc=bcc, cc=cc) msg.attach_alternative(elem.body, "text/html") for att in elem.attachment_set.all(): #~ if as_attachment or att.owner != elem.owner: fn = att.owner.get_target_name() if fn is None: raise Warning(_("Couldn't find target file of %s") % att.owner) msg.attach_file(fn) uploads = dd.resolve_app("uploads") for up in uploads.UploadsByController.request(elem): #~ for up in uploads.Upload.objects.filter(owner=elem): fn = os.path.join(settings.MEDIA_ROOT, up.file.name) msg.attach_file(fn) num_sent = msg.send() elem.sent = datetime.datetime.now() kw.update(refresh=True) #~ msg = "Email %s from %s has been sent to %s." % ( #~ elem.id,elem.sender,', '.join([ #~ r.address for r in elem.recipient_set.all()])) msg = _( "Email %(id)s from %(sender)s has been sent to %(num)d recipients." ) % dict(id=elem.id, sender=sender, num=num_sent) kw.update(message=msg, alert=True) #~ for n in """EMAIL_HOST SERVER_EMAIL EMAIL_USE_TLS EMAIL_BACKEND""".split(): #~ msg += "\n" + n + " = " + unicode(getattr(settings,n)) logger.info(msg) if elem.owner: elem.owner.after_send_mail(elem, ar, kw) elem.save() ar.success(**kw)