예제 #1
0
    def get_header_info(self, fields, request, context,
                        from_addr=None, to_addr=None,
                        subject=None):
        """Return header info

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        portal = getToolByName(context, 'portal_url').getPortalObject()
        utils = getToolByName(context, 'plone_utils')
        (to, from_addr, reply) = self.get_addresses(fields, request, context)
        subject = self.get_subject(fields, request, context)

        headerinfo = OrderedDict()

        headerinfo['To'] = self.secure_header_line(to)
        headerinfo['From'] = self.secure_header_line(from_addr)
        if reply:
            headerinfo['Reply-To'] = self.secure_header_line(reply)

        # transform subject into mail header encoded string
        email_charset = portal.getProperty('email_charset', 'utf-8')

        if not isinstance(subject, unicode):
            site_charset = utils.getSiteEncoding()
            subject = unicode(subject, site_charset, 'replace')

        msgSubject = self.secure_header_line(
            subject).encode(email_charset, 'replace')
        msgSubject = str(Header(msgSubject, email_charset))
        headerinfo['Subject'] = msgSubject

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if hasattr(self, 'ccOverride') and self.ccOverride:
            _cc = get_expression(context, self.ccOverride, fields=fields)
            if _cc:
                cc_recips = _cc

        if cc_recips:
            headerinfo['Cc'] = format_addresses(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if hasattr(self, 'bccOverride') and self.bccOverride:
            _bcc = get_expression(context, self.bccOverride, fields=fields)
            if _bcc:
                bcc_recips = _bcc

        if bcc_recips:
            headerinfo['Bcc'] = format_addresses(bcc_recips)

        for key in getattr(self, 'xinfo_headers', []):
            headerinfo['X-{0}'.format(key)] = self.secure_header_line(
                request.get(key, 'MISSING'))

        return headerinfo
예제 #2
0
    def get_addresses(
        self,
        fields,
        request,
        context,
        from_addr=None,
        to_addr=None
    ):
        """
        Return addresses
        """
        # get Reply-To
        reply_addr = None
        if hasattr(self, 'replyto_field'):
            reply_addr = fields.get(self.replyto_field, None)

        # Get From address
        portal_addr = self.get_portal_email_address(context)
        from_addr = from_addr or portal_addr

        if hasattr(self, 'senderOverride') and self.senderOverride:
            _from = get_expression(context, self.senderOverride, fields=fields)
            if _from:
                from_addr = _from

        # Get To address and full name
        recip_email = None
        if hasattr(self, 'to_field') and self.to_field:
            recip_email = fields.get(self.to_field, None)
        if not recip_email:
            if self.recipient_email != '':
                recip_email = self.recipient_email

        if hasattr(self, 'recipientOverride') and self.recipientOverride:
            _recip = get_expression(
                context,
                self.recipientOverride,
                fields=fields
            )
            if _recip:
                recip_email = _recip

        to = None
        if to_addr:
            to = format_addresses(to_addr)
        elif recip_email:
            to = format_addresses(
                recip_email,
                self.recipient_name
            )
        else:
            # Use owner adress or fall back to portal email_from_address.
            to = formataddr(self.get_owner_info(context))

        assert(to)
        return (to, from_addr, reply_addr)
예제 #3
0
    def get_header_info(self, fields, request, context, from_addr=None, to_addr=None, subject=None):
        """Return header info

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        portal = getToolByName(context, "portal_url").getPortalObject()
        utils = getToolByName(context, "plone_utils")
        (to, from_addr, reply) = self.get_addresses(fields, request, context)
        subject = self.get_subject(fields, request, context)

        headerinfo = OrderedDict()

        headerinfo["To"] = self.secure_header_line(to)
        headerinfo["From"] = self.secure_header_line(from_addr)
        if reply:
            headerinfo["Reply-To"] = self.secure_header_line(reply)

        # transform subject into mail header encoded string
        email_charset = portal.getProperty("email_charset", "utf-8")

        if not isinstance(subject, unicode):
            site_charset = utils.getSiteEncoding()
            subject = unicode(subject, site_charset, "replace")

        msgSubject = self.secure_header_line(subject).encode(email_charset, "replace")
        msgSubject = str(Header(msgSubject, email_charset))
        headerinfo["Subject"] = msgSubject

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if hasattr(self, "ccOverride") and self.ccOverride:
            _cc = get_expression(context, self.ccOverride, fields=fields)
            if _cc:
                cc_recips = _cc

        if cc_recips:
            headerinfo["Cc"] = format_addresses(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if hasattr(self, "bccOverride") and self.bccOverride:
            _bcc = get_expression(context, self.bccOverride, fields=fields)
            if _bcc:
                bcc_recips = _bcc

        if bcc_recips:
            headerinfo["Bcc"] = format_addresses(bcc_recips)

        for key in getattr(self, "xinfo_headers", []):
            headerinfo["X-{0}".format(key)] = self.secure_header_line(request.get(key, "MISSING"))

        return headerinfo
예제 #4
0
    def get_addresses(self,
                      fields,
                      request,
                      context,
                      from_addr=None,
                      to_addr=None):
        """
        Return addresses
        """
        pprops = getToolByName(context, 'portal_properties')
        site_props = getToolByName(pprops, 'site_properties')
        portal = getToolByName(context, 'portal_url').getPortalObject()
        registry = getUtility(IRegistry)

        # get Reply-To
        reply_addr = None
        if hasattr(self, 'replyto_field'):
            reply_addr = fields.get(self.replyto_field, None)

        # Get From address
        from_addr = (from_addr or site_props.getProperty('email_from_address')
                     or portal.getProperty('email_from_address')
                     or registry.get('plone.email_from_address'))

        if hasattr(self, 'senderOverride') and self.senderOverride:
            _from = get_expression(context, self.senderOverride, fields=fields)
            if _from:
                from_addr = _from

        # Get To address and full name
        recip_email = None
        if hasattr(self, 'to_field') and self.to_field:
            recip_email = fields.get(self.to_field, None)
        if not recip_email:
            if self.recipient_email != '':
                recip_email = self.recipient_email

        if hasattr(self, 'recipientOverride') and self.recipientOverride:
            _recip = get_expression(
                context, self.recipientOverride, fields=fields)
            if _recip:
                recip_email = _recip

        to = None
        if to_addr:
            to = format_addresses(to_addr)
        elif recip_email:
            to = format_addresses(recip_email, self.recipient_name)
        else:
            # Use owner adress or fall back to portal email_from_address.
            to = formataddr(self.get_owner_info(context))

        assert (to)
        return (to, from_addr, reply_addr)
예제 #5
0
    def get_header_info(self,
                        fields,
                        request,
                        context,
                        from_addr=None,
                        to_addr=None,
                        subject=None):
        """Return header info.

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        (to, from_addr, reply) = self.get_addresses(fields, request, context)

        headerinfo = OrderedDict()
        headerinfo["To"] = self.secure_header_line(to)
        headerinfo["From"] = self.secure_header_line(from_addr)
        if reply:
            headerinfo["Reply-To"] = self.secure_header_line(reply)
        headerinfo["Subject"] = self.get_subject(fields, request, context)

        # CC
        if isinstance(self.cc_recipients, six.string_types):
            cc_recips = self.cc_recipients
        else:
            cc_recips = [_f for _f in self.cc_recipients if _f]
        if hasattr(self, "ccOverride") and self.ccOverride:
            _cc = get_expression(context, self.ccOverride, fields=fields)
            if _cc:
                cc_recips = _cc

        if cc_recips:
            headerinfo["Cc"] = format_addresses(cc_recips)

        # BCC
        if isinstance(self.bcc_recipients, six.string_types):
            bcc_recips = self.bcc_recipients
        else:
            bcc_recips = [_f for _f in self.bcc_recipients if _f]
        if hasattr(self, "bccOverride") and self.bccOverride:
            _bcc = get_expression(context, self.bccOverride, fields=fields)
            if _bcc:
                bcc_recips = _bcc

        if bcc_recips:
            headerinfo["Bcc"] = format_addresses(bcc_recips)

        for key in getattr(self, "xinfo_headers", []):
            headerinfo["X-{0}".format(key)] = self.secure_header_line(
                request.get(key, "MISSING"))

        return headerinfo
예제 #6
0
    def get_addresses(self,
                      fields,
                      request,
                      context,
                      from_addr=None,
                      to_addr=None):
        """Return addresses
        """
        pprops = getToolByName(context, 'portal_properties')
        site_props = getToolByName(pprops, 'site_properties')
        portal = getToolByName(context, 'portal_url').getPortalObject()

        # get Reply-To
        reply_addr = None
        if hasattr(self, 'replyto_field'):
            reply_addr = fields.get(self.replyto_field, None)

        # Get From address
        from_addr = (from_addr or site_props.getProperty('email_from_address')
                     or portal.getProperty('email_from_address'))

        if hasattr(self, 'senderOverride') and self.senderOverride:
            _from = get_expression(context, self.senderOverride, fields=fields)
            if _from:
                from_addr = _from

        # Get To address and full name
        recip_email = None
        if hasattr(self, 'to_field') and self.to_field:
            recip_email = fields.get(self.to_field, None)
        if not recip_email:
            recip_email = self.recipient_email

        if hasattr(self, 'recipientOverride') and self.recipientOverride:
            _recip = get_expression(context,
                                    self.recipientOverride,
                                    fields=fields)
            if _recip:
                recip_email = _recip

        to = None
        if to_addr:
            to = format_addresses(to_addr)
        elif recip_email:
            to = format_addresses(recip_email, self.recipient_name)
        else:
            # Use owner adress or fall back to portal email_from_address.
            to = formataddr(self.get_owner_info(context))

        assert (to)
        return (to, from_addr, reply_addr)
예제 #7
0
    def get_header_info(self,
                        fields,
                        request,
                        context,
                        from_addr=None,
                        to_addr=None,
                        subject=None):
        """Return header info

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        (to, from_addr, reply) = self.get_addresses(fields, request, context)

        headerinfo = OrderedDict()
        headerinfo['To'] = self.secure_header_line(to)
        headerinfo['From'] = self.secure_header_line(from_addr)
        if reply:
            headerinfo['Reply-To'] = self.secure_header_line(reply)
        headerinfo['Subject'] = self.get_subject(fields, request, context)

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if hasattr(self, 'ccOverride') and self.ccOverride:
            _cc = get_expression(context, self.ccOverride, fields=fields)
            if _cc:
                cc_recips = _cc

        if cc_recips:
            headerinfo['Cc'] = format_addresses(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if hasattr(self, 'bccOverride') and self.bccOverride:
            _bcc = get_expression(context, self.bccOverride, fields=fields)
            if _bcc:
                bcc_recips = _bcc

        if bcc_recips:
            headerinfo['Bcc'] = format_addresses(bcc_recips)

        for key in getattr(self, 'xinfo_headers', []):
            headerinfo['X-{0}'.format(key)] = self.secure_header_line(
                request.get(key, 'MISSING'))

        return headerinfo
예제 #8
0
    def get_header_info(self, fields, request, context,
                        from_addr=None, to_addr=None,
                        subject=None):
        """Return header info

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        (to, from_addr, reply) = self.get_addresses(fields, request, context)

        headerinfo = OrderedDict()
        headerinfo['To'] = self.secure_header_line(to)
        headerinfo['From'] = self.secure_header_line(from_addr)
        if reply:
            headerinfo['Reply-To'] = self.secure_header_line(reply)
        headerinfo['Subject'] = self.get_subject(fields, request, context)

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if hasattr(self, 'ccOverride') and self.ccOverride:
            _cc = get_expression(context, self.ccOverride, fields=fields)
            if _cc:
                cc_recips = _cc

        if cc_recips:
            headerinfo['Cc'] = format_addresses(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if hasattr(self, 'bccOverride') and self.bccOverride:
            _bcc = get_expression(context, self.bccOverride, fields=fields)
            if _bcc:
                bcc_recips = _bcc

        if bcc_recips:
            headerinfo['Bcc'] = format_addresses(bcc_recips)

        for key in getattr(self, 'xinfo_headers', []):
            headerinfo['X-{0}'.format(key)] = self.secure_header_line(
                request.get(key, 'MISSING'))

        return headerinfo
예제 #9
0
    def get_header_info(self,
                        fields,
                        request,
                        context,
                        from_addr=None,
                        to_addr=None,
                        subject=None):
        """Return header info

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        portal = getToolByName(context, 'portal_url').getPortalObject()
        utils = getToolByName(context, 'plone_utils')
        (to, from_addr, reply) = self.get_addresses(fields, request, context)
        subject = self.get_subject(fields, request, context)

        headerinfo = OrderedDict()

        headerinfo['To'] = self.secure_header_line(to)
        headerinfo['From'] = self.secure_header_line(from_addr)
        if reply:
            headerinfo['Reply-To'] = self.secure_header_line(reply)

        # transform subject into mail header encoded string
        email_charset = portal.getProperty('email_charset', 'utf-8')

        if not isinstance(subject, unicode):
            site_charset = utils.getSiteEncoding()
            subject = unicode(subject, site_charset, 'replace')

        msgSubject = self.secure_header_line(subject).encode(
            email_charset, 'replace')
        msgSubject = str(Header(msgSubject, email_charset))
        headerinfo['Subject'] = msgSubject

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if hasattr(self, 'ccOverride') and self.ccOverride:
            _cc = get_expression(context, self.ccOverride, fields=fields)
            if _cc:
                cc_recips = _cc

        if cc_recips:
            headerinfo['Cc'] = format_addresses(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if hasattr(self, 'bccOverride') and self.bccOverride:
            _bcc = get_expression(context, self.bccOverride, fields=fields)
            if _bcc:
                bcc_recips = _bcc

        if bcc_recips:
            headerinfo['Bcc'] = format_addresses(bcc_recips)

        for key in getattr(self, 'xinfo_headers', []):
            headerinfo['X-{0}'.format(key)] = self.secure_header_line(
                request.get(key, 'MISSING'))

        return headerinfo