JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix db_get_value after mysql->mysqli upgrade
[wfpl.git] / email.php
index 8140ded..74518ab 100644 (file)
--- a/email.php
+++ b/email.php
@@ -1,23 +1,9 @@
 <?php
 
-#  Copyright (C) 2006 Jason Woofenden
-#
-#  This file is part of wfpl.
-#
-#  wfpl is free software; you can redistribute it and/or modify it under the
-#  terms of the GNU Lesser General Public License as published by the Free
-#  Software Foundation; either version 2.1 of the License, or (at your option)
-#  any later version.
-#
-#  wfpl is distributed in the hope that it will be useful, but WITHOUT ANY
-#  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-#  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
-#  more details.
-#
-#  You should have received a copy of the GNU Lesser General Public License
-#  along with wfpl; if not, write to the Free Software Foundation, Inc., 51
-#  Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
+# This program is in the public domain within the United States. Additionally,
+# we waive copyright and related rights in the work worldwide through the CC0
+# 1.0 Universal public domain dedication, which can be found at
+# http://creativecommons.org/publicdomain/zero/1.0/
 
 
 # This function will SAFELY send e-mail (ie you can pass parameters to it
@@ -35,7 +21,7 @@
 # address fields (from, to, cc, bcc) can be in either of these formats:
 # 1) me@foo.com  2) Me Who <me@foo.com>
 # returns 0 on success
-function email($from, $to, $subject, $message, $cc = '', $bcc = '') {
+function email($from, $to, $subject, $message, $reply_to = '', $cc = '', $bcc = '') {
        if(($from = email_header($from)) === false) { return 1; }
        if(($to   = email_header($to))   === false) { return 2; }
        if(($cc   = email_header($cc))   === false) { return 3; }
@@ -44,15 +30,20 @@ function email($from, $to, $subject, $message, $cc = '', $bcc = '') {
        if($to   == '') { return 2; }
 
        #FIXME should allow many more characters here
-       $subject = ereg_replace("[^a-zA-Z _'.-]", '_', $subject);
+       $subject = preg_replace("|[^a-z0-9 _/#'.:&,-]|i", '_', $subject);
 
        $headers = "From: $from";
+       if($reply_to) {
+               $headers .= "\r\nReply-To: $reply_to";
+       }
        if($cc) {
                $headers .= "\r\nCC: $cc";
        }
        if($bcc) {
                $headers .= "\r\nBCC: $bcc";
        }
+       $headers .= "\r\nContent-type: text/plain; charset=UTF-8";
+
        if(mail($to, $subject, $message, $headers)) {
                return 0;
        } else {
@@ -72,14 +63,15 @@ function email_header($addr) {
                return '';
        }
 
-       if(ereg('<.*>$', $addr) !== false) {
+       if(preg_match('|<.*>$|', $addr) === 1) {
                # format 2
-               list($name, $email) = split('<', $addr);
+               $div = strrpos($addr, '<');
+               $name = substr($addr, 0 , $div);
                $name = rtrim($name);
-               $email = substr($email, 0, -1); # get rid of the '>' at the end
+               $email = substr($addr, $div + 1, -1);
        } else {
                $email = $addr;
-               $name = ereg_replace('@.*', '', $addr);
+               $name = preg_replace('|@.*|', '', $addr);
        }
 
        if(!valid_email($email)) {
@@ -87,7 +79,7 @@ function email_header($addr) {
        }
 
        #FIXME should allow many more characters here
-       $name = ereg_replace("[^a-zA-Z _'-]", '_', $name);
+       $name = preg_replace("|[^a-z0-9 _/'.-]|i", '_', $name);
 
        return $name . ' <' . $email . '>';
 }
@@ -96,5 +88,5 @@ function email_header($addr) {
 
 # return true if e-mail is formatted like a valid email address
 function valid_email($email) {
-       return ereg('^[0-9a-zA-Z_~.-]+@[0-9a-zA-Z.-]+\.[a-z]+$', $email) !== false;
+       return preg_match('|^[0-9a-zA-Z_~.+-]+@[0-9a-zA-Z.-]+\.[a-z]+$|', $email) === 1;
 }