SpeedPHP电子邮件扩展类

#1 starlight36

首先感谢论坛jiayan41提供的Email邮件发送类程序!http://speedphp.com/bbs/thread-577-1-1.html

本人进行了修改,使之成为了SpeedPHP的标准扩展程序,将spEmail.php文件放置在SpeedPHP/Extensions/spEmail.php位置即可,配置选项可在spConfig.php里面进行设置。设置项如下:

        'ext' => array(  // 扩展使用的配置根目录
                'spEmail' => array( //邮件扩展的基本设置
                        'debug' => TRUE, //调试模式
                        'host_name' => '163.com', //邮件主机名
                        'smtp_host' => 'smtp.163.com',        //SMTP服务器
                        'smtp_port' => '25',        //SMTP端口
                        'auth' => TRUE,        //身份验证
                        'from' => 'admin@163.com', //发件邮箱
                        'user' => 'admin',        //用户名
                        'pass' => 'pass',        //密码
                        'log_file' => '',        //日志文件
                        'time_out' => 30,        //超时时间
                ),
        ),



在控制器中可以使用如下代码(action)进行测试:

        function _email() {
                $mail = spClass('spEmail');
                $mailsubject = "SpeedPHP邮件扩展";//邮件主题
                $mailbody = "

SpeedPHP邮件扩展

";//邮件内容
                $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
                $mail->sendmail('收件人邮箱@email.com', $mailsubject, $mailbody, $mailtype);
        }



下载:
spEmail.zip

该贴已经同步到 starlight36的微博

2011-02-10 13:02:26

#2 jake

不错,很标准的扩展方式。:handshake 推荐!

2011-02-10 13:08:13

#3 jiayan41

starlight36  果真是高人啊,早点认识你就好了,那样我就可以用上speedphp标准Email扩展了,哈哈 :handshake

2011-02-12 10:27:13

#4 gonten

好啊,正缺这个

2011-02-14 11:58:02

#5 jake

:D 再来感谢一下,今天的项目就用到楼主的类。

2011-02-23 20:35:10

#6 vsxp

正点,收藏了。

2011-03-10 17:06:49

#7 梦里梦外

回复 1 starlight36

发现了一个bug,参数debug的设置无效!
即无论在配置设置debug为true或false结果都相当于true
if( !empty($params['debug']) )$this->debug = $params['debug'];
原因就在于上面这行代码
当debug为true时,empty判断为结果为true,if后面语句不执行;
当debug为false时,empty判断为结果仍旧为true,if后面语句不执行;
(如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。)

建议改为
$this->debug = isset($params['debug']) ? $params['debug'] : $this->debug;
其他赋值语句正常,但其他赋值语句也可以采用这种格式!

2011-04-01 12:00:32

#8 ookangzheng

支持下~~

2011-04-02 11:50:14

#9 jake

回复  starlight36

发现了一个bug,参数debug的设置无效!
即无论在配置设置debug为true或false结果都相 ...
梦里梦外 发表于 2011-4-1 12:00
对,的确不能用empty :)

2011-04-02 12:27:17

#10 lovebible

怎样让发送邮件的编码格式为UTF-8呢?? 希望有个能改编码的选项!!

2011-04-15 21:37:46

#11 微博评论

回复@LoveBible:呃。。这个默认就是UTF-8的。。

来自 starlight36 的新浪微博

2011-04-16 10:15:10

#12 lovebible

这个类默认不是UTF-8~  怎么改?

2011-04-17 18:48:51

#13 dhs789520

Trying to mx1.mail.139.com:25
Warning: Cannot connect to mx host mx1.mail.139.com
Error: Connection timed out (110)
Trying to mx2.mail.139.com:25
Warning: Cannot connect to mx host mx2.mail.139.com
Error: Connection timed out (110)
Trying to mx3.mail.139.com:25
Warning: Cannot connect to mx host mx3.mail.139.com
Error: Connection timed out (110)
Error: Cannot connect to any mx hosts (mx1.mail.139.com, mx2.mail.139.com, mx3.mail.139.com)
为什么老是连接不上服务器呢,难道是因为我是外国空间??

2011-04-21 04:34:44

#14 fengxuan

多谢了插件作者,debug的bug也建议相当好。

2011-05-18 16:15:18

#15 yijuninchina

哈哈,很标准哦,顶你一个!

2011-06-21 10:50:51

#16 yijuninchina

为什么我发送后,会输出一段这样的信息呢?能不能 去掉这些信息?
MIME-Version:1.0 Content-Type:text/html To: [email]jerry@765i.com[/email] From: [email]yijuninchina@163.com[/email] Subject: 注册激活邮件 Date: Tue, 21 Jun 2011 03:14:01 +0000 X-Mailer:By Redhat (PHP/5.2.6) Message-ID: <[email]20110621031401.209336.yijuninchina@163.com[/email]> ok

2011-06-21 11:17:20

#17 yijuninchina

哈哈,自己找到了,修改一下 94和95行,把那两个echo 注释掉就可以了。
支持作者!

2011-06-21 11:30:41

#18 霸气千秋

:lol顶起,收藏了,

2011-07-19 22:59:14

#19 hygzs

不错呀,看来SP里面好东西真不少

2011-08-30 15:20:58

#20 kilom

能用gmail发送吗?

2011-09-24 15:02:32

#21 鬼剑士

如何判断邮件发送是否成功???

2011-12-19 09:25:06

#22 樱桃大丸子

为什么,我总是提示

方法 sendmail 未定义

2012-02-11 06:18:01

#23 jake

樱桃大丸子 发表于 2012-2-11 06:18
为什么,我总是提示

方法 sendmail 未定义
sendmail 在楼主发的文件spEmail.php里面的48行!

2012-02-11 17:41:22

#24 cgjcgs

Trying to smtp.qq.com:25
Error: Cannot connenct to relay host smtp.qq.com
Error: ����Ŀ������ܾ��޷���ӡ� (10061)
Error: Cannot send email to [email]cgjcgs@sina.com[/email]

MIME-Version:1.0 Content-Type:text/html To: [email]cgjcgs@sina.com[/email] From: [email]328538031@qq.com[/email]<[email]328538031@qq.com[/email]> Subject: SpeedPHP邮件扩展 Date: Mon, 11 Jun 2012 16:45:01 +0800 X-Mailer:By Redhat (PHP/5.2.5) Message-ID: <[email]20120611164501.2943.328538031@qq.com[/email]>

这是怎么回事 ?

2012-06-11 16:48:29

#25 jake

cgjcgs 发表于 2012-6-11 16:48
Trying to smtp.qq.com:25
Error: Cannot connenct to relay host smtp.qq.com
Error: ����Ŀ���� ...
“Cannot connenct to relay host smtp.qq.com ”

链接不上QQ的SMTP服务器

2012-06-11 18:19:24

#26 cgjcgs

        'ext' => array(  // 扩展使用的配置根目录
                'spEmail' => array( //邮件扩展的基本设置
                        'debug' => TRUE, //调试模式
                        'host_name' => '163.com', //邮件主机名
                        'smtp_host' => 'smtp.163.com',        //SMTP服务器
                        'smtp_port' => '25',        //SMTP端口
                        'auth' => TRUE,        //身份验证
                        'from' => 'cgjcgs@163.com', //发件邮箱
                        'user' => 'cgjcgs',        //用户名
                        'pass' => 'thisismywangyi',        //密码
                        'log_file' => '',        //日志文件
                        'time_out' => 30,        //超时时间
                ),
        ), // 扩展使用的配置根目录

在speedphp / spconfig.php 里添加以上代码;
然后再控制控制器里添加以下代码,然后
传递到这个控制器里 ,我不知道哪里搞的不对 我是新手 多多指教

function _email() {
                $name=$_POST['name'];
                $title=$_POST['title'];
                $content=$_POST['contents'];
       
                $mail = spClass('spEmail');
                $mailsubject = "".$title."";//邮件主题
                $mailbody = "".$content."";//邮件内容
                $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
                $mail->sendmail('cgjcgs@163.com', $mailsubject, $mailbody, $mailtype);
        }

2012-06-12 09:08:03

#27 jake

按你给的错误提示,就是提示““Cannot connenct to relay host smtp.qq.com ”” 链接不到smtp.qq.com,

不相信自己可以找个google翻译的之类查查。

2012-06-12 09:22:34

#28 cgjcgs

这个我知道 我只是想知道流程是不是错了 流程没错就行 !

2012-06-12 09:26:27

#29 jake

cgjcgs 发表于 2012-6-12 09:26
这个我知道 我只是想知道流程是不是错了 流程没错就行 !
你的流程没错,应该是错误提示错了。

2012-06-12 12:45:11

#30 小懒虫

用163.com 发送到 qq.com  550 错误怎么解决,有谁遇到过吗

2012-12-25 15:57:37

#31 bibodeng

正在找这个东西,需要发送邮件给客户,以验证帐号注册的

2013-03-15 08:49:51

#32 和珅

好东西,正需要。

2013-05-02 22:32:35

#33 和珅

好东西,正需要。

2013-05-02 22:33:34

#34 和珅

好东西,正需要。

2013-05-02 22:35:17

#35 沁枫

我用这个类发送邮件,本地测试站可以发送成功,上传到虚拟主机上就不行了,郁闷啊
开启调试一直提示:
Trying to smtp.163.com:25
Error: Cannot connenct to relay host smtp.163.com
Error: ()
Error: Cannot send email to [email]274606385@qq.com[/email]

求解答啊!:'(:'(

2013-09-09 10:27:20

#36 jake

沁枫 发表于 2013-9-9 10:27
我用这个类发送邮件,本地测试站可以发送成功,上传到虚拟主机上就不行了,郁闷啊
开启调试一直提示:
Tryi ...
提示很清楚了,说是你的虚拟空间连接不上 smtp.163.com

2013-09-09 10:58:47

#37 沁枫

jake 发表于 2013-9-9 10:58
提示很清楚了,说是你的虚拟空间连接不上 smtp.163.com
这个是需要虚拟主机那边帮我配置下什么吗?
jake老大{:soso_e183:}

2013-09-09 11:40:04

#38 jake

沁枫 发表于 2013-9-9 11:40
这个是需要虚拟主机那边帮我配置下什么吗?
jake老大
连不上有很多原因,比如说不开放远程访问,不知道smtp的sockect访问等等。

2013-09-09 12:34:29

#39 沁枫

jake 发表于 2013-9-9 12:34
连不上有很多原因,比如说不开放远程访问,不知道smtp的sockect访问等等。
终于找到原因了虚拟主机把 fsockopen 函数给禁用了,百度了下要用stream_socket_client函数代替,尼玛啊,刚把spEmail 里的
$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
换成
$this->sock = @stream_socket_client("tcp://".$this->relay_host.":".$this->smtp_port, $errno, $errstr, $this->time_out);
就OK了。还是谢谢JACK老大哈,希望以后有同僚碰到这样的问题也能解决。

2013-09-09 14:04:44

#40 gnoynil

调试的时候出现 如下错误 请大使看看
Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 250

Deprecated: Function ereg_replace() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 258

Deprecated: Function ereg_replace() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 259

Deprecated: Function ereg_replace() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 51

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 250

Deprecated: Function ereg_replace() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 258

Deprecated: Function ereg_replace() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 259
Trying to smtp.163.com:25
220 163.com Anti-spam GT for Coremail System (163com[20121016])

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
Connected to relay host smtp.163.com
> HELO 163.com
250 OK

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> AUTH LOGIN c3VuLTEyOS0yMw==
334 UGFzc3dvcmQ6

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> Nzg1MDgzOA==
235 Authentication successful

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> MAIL FROM:
250 Mail OK

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> RCPT TO:<[email]455786559@qq.com[/email]>
250 Mail OK

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> DATA
354 End data with .

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> MIME-Version:1.0 > Content-Type:text/html > To: [email]455786559@qq.com[/email] > From: [email]sun-129-23@163.com[/email] > Subject: SpeedPHP邮件扩展 > Date: Wed, 13 Aug 2014 16:11:04 +0800 > X-Mailer:By Redhat (PHP/5.4.7) > Message-ID: <[email]20140813161104.418931.sun-129-23@163.com[/email]> > >
SpeedPHP邮件扩展
>
. [EOM]
250 Mail OK queued as smtp7,C8CowEC5hVvgHetTkIhCAA--.84S2 1407917537

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
> QUIT
221 Bye

Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\SpeedPHP\Extensions\spEmail.php on line 203
E-mail has been sent to <[email]455786559@qq.com[/email]>
Disconnected from remote host

MIME-Version:1.0 Content-Type:text/html To: [email]455786559@qq.com[/email] From: [email]sun-129-23@163.com[/email] Subject: SpeedPHP邮件扩展 Date: Wed, 13 Aug 2014 16:11:04 +0800 X-Mailer:By Redhat (PHP/5.4.7) Message-ID: <[email]20140813161104.418931.sun-129-23@163.com[/email]>

2014-08-13 16:15:20

#41 wo8818

gnoynil 发表于 2014-8-13 16:15
调试的时候出现 如下错误 请大使看看
Deprecated: Function ereg() is deprecated in D:\xampp\htdocs\Spee ...
也遇到同样的问题,但是邮件是发送成功的
百度到的说是ereg_replace 函数在高版本的PHP已经不使用了。


2014-10-02 16:40:11

#42 wo8818

wo8818 发表于 2014-10-2 16:40
也遇到同样的问题,但是邮件是发送成功的
百度到的说是ereg_replace 函数在高版本的PHP已经不使用了。
可以这样解决,在使用PHP 5.3以后的版本中,把插件中这两个函数替换,就可以了
ereg 替换成 preg_match
ereg_replace 替换成  preg_replace

2014-10-02 16:53:38

#43 kao10324

这个能否设置发件人名称

2015-02-05 08:57:49

#44 kao10324

这个可以设置发件人名称吗

2015-02-10 15:03:35

#45 jake

kao10324 发表于 2015-2-10 15:03
这个可以设置发件人名称吗
应该可以

2015-02-10 17:06:43