作者liveoutmyway (friend forever)
看板PHP
标题[请益] 用PEAR寄信, &Mail::factory()的用法问题?
时间Sun Sep 5 23:59:33 2010
在下之前有请益过PHP内建的mail()可以用,但是PEAR::mail却失败的问题
在一位热心的版友的建议之下 (没先徵得这位好心的板友的同意,所以不敢随意打上ID)
慢慢找到问题所在
後来看到另一位版友分享的文章
http://blog.wu-boy.com/2007/12/18/129/
(很谢谢这位版友的分享)
(不知道引用文章需不需要事先告知,如果有问题可以寄信给我,看到会尽快移除修改)
发现我可以用里面的范例成功寄信
对照书上的范例之後,除了发现并修正书上原本就有的错误之外
找到问题在於 1. & Mail::factory('mail');
2. & Mail::factory('smtp',$mailParams);
用法的差别
板友分享的范例和书上的范例如果一律改用第一种" & Mail::factory('mail'); "
是都可以成功寄信的
但是改用第2种用法 "& Mail::factory('smtp',$mailParams); " 都会失败
(本来我是想把书上的范例PO上来但是好像会有违法的问题..)
而且用2种范例失败的错误代码都是一样
在此引用版友的范例并改用第2种SMTP用法,
再加上回传错误代码的PEAR::isError
原始码如下
-------------
<?php
require_once("Mail.php");
//include(Document_root . '/includes/Mail.php');
$recipients = '收信者信箱@hotmail.com';
$headers['From'] = '
[email protected]';
$headers['To'] = '
[email protected]';
$headers['Subject'] = 'Test message';
$body = 'Test message';
//$mail_object =& Mail::factory('mail');
$mailParams = array(
'host' => 'smtp.tbcnet.net',//供我上网ISP(TBC台湾宽频)的SMTP
'auth' => false, //改成True错误代码一样
// 'port' => '25', //port有没有加错误代码还是一样
'username' => 'SMTP的帐号信箱@mail.tbcnet.net', // SMTP 帐号
'password' => '***'); // SMTP 密码
$mail_object = &Mail::factory('smtp',$mailParams);
$result=$mail_object->send($recipients, $headers, $body);
if(PEAR::isError($result))
echo '<p>寄送失败:' . $result->getMessage() . '</p>';
else
echo '<p>邮件已成功寄出!</p>';
?>
------------------------------------
以下为错误代码
---------------------------------------------
Failed to add recipient: 我的收件信箱@hotmail.com
[SMTP: Invalid response code received from server
(code: 550, response: Spam suspect,we do not accept the mail)]
-----------------------------------------------------------------
查了 SMTP Error 550 的英文用google翻成中文为(需要看原文的话我在po上来)
SMTP错误 550:这种反应可能造成相当一些情况。
550始终是一个问题的外部到您自己的邮件服务器。
通常它是在收件人的电脑终端,但它可以在你还源於自己的“围墙”,通过正造成的,
例如,通过一个防火墙设备进行扫描您的外发邮件一旦他们离开你的服务器。
--------
SMTP错误将返回由550多个服务器如果收件人的邮件地址根本不存在於远程端
(你经常会得到“550无效收件人”或“550用户帐户是不可用”或
“<IP地址,ofremote -服务器“>不喜欢收件人 - 550地址拒绝“或
”550这里没有这样的用户“或”550我们不客户“或”550帐户不可用“或
”远程主持人说:550 - Barack.Obama @ ThisCompany.com,
这THISCOMPANY.COM邮箱不存在 - 给了“)。
在这种情况下,发件人的电子邮件需要联系收件人口头得到正确的电子邮件地址。
------------------------------------------------------------------------
设定篇
另外有可能是我设定上的问题(虽然是按照书上的步骤,但可能会有遗漏也不一定)
以下为设定的内容
-----------------
这本书是用WAMP5架设Apache和MySQL
目前安装的是WAMP5_1.72版 PHP5.2.3版
(和用过的AppServ不同的是有2个php.ini
分别在
C:\wamp\php\php.ini ==>不知道有啥用,但书上还是会设定到这个
C:\wamp\Apache2\bin\php.ini ==>我只知道这个Apache伺服器会用到 )
一般用mail()
书上按照下列设定php.ini就可以成功寄信了
(2个php.ini都有设定)
------------------------------------
[mail function]
; For Win32 only.
SMTP = smtp.tbcnet.net ===>供我上网ISP(TBC台湾宽频)的SMTP
; For Win32 only.
sendmail_from = 我的信箱@mail.tbcnet.net
再来就是使用PEAR::Mail的设定
按照书上的设定更改Apache用的php.ini
C:\wamp\Apache2\bin\php.ini
-----------------------------
; Paths and Directories ;
; Windows: "\path1;\path2"
include_path = ".;c:\wamp\php\pear;C:\wamp\php\Smarty\libs"
^^^^^^^目前用到Smarty之後才加进去的
----------------------------------------------------------------------
劳烦各位板友不吝给予方向,协助解惑
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.110.129.251