function.mailto.php

Discussion in 'PHP' started by rheahold, Mar 28, 2013.

  1. #1
    So i have this file in a certain script, i need help getting the bcc option to work, just cant figure it out.

    <?php
    /**
    * Smarty plugin
    * @package Smarty
    * @subpackage plugins
    */
     
     
    /**
    * Smarty {mailto} function plugin
    *
    * Type:    function<br>
    * Name:    mailto<br>
    * Date:    May 21, 2002
    * Purpose:  automate mailto address link creation, and optionally
    *          encode them.<br>
    * Input:<br>
    *        - address = e-mail address
    *        - text = (optional) text to display, default is address
    *        - encode = (optional) can be one of:
    *                * none : no encoding (default)
    *                * javascript : encode with javascript
    *                * hex : encode with hexidecimal (no javascript)
    *        - cc = (optional) address(es) to carbon copy
    *        - bcc = (optional) address(es) to blind carbon copy
    *        - subject = (optional) e-mail subject
    *        - newsgroups = (optional) newsgroup(s) to post to
    *        - followupto = (optional) address(es) to follow up to
    *        - extra = (optional) extra tags for the href link
    *
    * Examples:
    * <pre>
    * {mailto address="me@domain.com"}
    * {mailto address="me@domain.com" encode="javascript"}
    * {mailto address="me@domain.com" encode="hex"}
    * {mailto address="me@domain.com" subject="Hello to you!"}
    * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
    * {mailto address="me@domain.com" extra='class="mailto"'}
    * </pre>
    * @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
    *          (Smarty online manual)
    * @version  1.2
    * @author  Monte Ohrt <monte@ispi.net>
    * @author  credits to Jason Sweat (added cc, bcc and subject functionality)
    * @param    array
    * @param    Smarty
    * @return  string
    */
    function smarty_function_mailto($params, &$smarty)
    {
        $extra = '';
     
        if (empty($params['address'])) {
            $smarty->trigger_error("mailto: missing 'address' parameter");
            return;
        } else {
            $address = $params['address'];
        }
     
        $text = $address;
     
        // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
        // so, don't encode it.
        $mail_parms = array();
        foreach ($params as $var=>$value) {
            switch ($var) {
                case 'cc':
                case 'bcc':
                case 'followupto':
                    if (!empty($value))
                        $mail_parms[] = $var.'='.str_replace('%40','@',rawurlencode($value));
                    break;
                   
                case 'subject':
                case 'newsgroups':
                    $mail_parms[] = $var.'='.rawurlencode($value);
                    break;
     
                case 'extra':
                case 'text':
                    $$var = $value;
     
                default:
            }
        }
     
        $mail_parm_vals = '';
        for ($i=0; $i<count($mail_parms); $i++) {
            $mail_parm_vals .= (0==$i) ? '?' : '&';
            $mail_parm_vals .= $mail_parms[$i];
        }
        $address .= $mail_parm_vals;
     
        $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
        if (!in_array($encode,array('javascript','hex','none')) ) {
            $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
            return;
        }
     
        if ($encode == 'javascript' ) {
            $string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');';
     
            $js_encode = '';
            for ($x=0; $x < strlen($string); $x++) {
                $js_encode .= '%' . bin2hex($string[$x]);
            }
     
            return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
     
        } elseif ($encode == 'hex') {
     
            preg_match('!^(.*)(\?.*)$!',$address,$match);
            if(!empty($match[2])) {
                $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
                return;
            }
            $address_encode = '';
            for ($x=0; $x < strlen($address); $x++) {
                if(preg_match('!\w!',$address[$x])) {
                    $address_encode .= '%' . bin2hex($address[$x]);
                } else {
                    $address_encode .= $address[$x];
                }
            }
            $text_encode = '';
            for ($x=0; $x < strlen($text); $x++) {
                $text_encode .= '&#x' . bin2hex($text[$x]).';';
            }
     
            $mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
            return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';
     
        } else {
            // no encoding
            return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
     
        }
     
    }
     
    /* vim: set expandtab: */
     
    ?>
    Code (markup):

     
    rheahold, Mar 28, 2013 IP
  2. EricBruggema

    EricBruggema Well-Known Member

    Messages:
    1,740
    Likes Received:
    28
    Best Answers:
    13
    Trophy Points:
    175
    #2
    Its in the comments

    {mailto address="" bcc=","}
     
    EricBruggema, Mar 28, 2013 IP
    GMF likes this.