[請益] 用PEAR寄信, &Mail::factory()的用法問題?
在下之前有請益過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'] = 'friendforever@mail.tbcnet.net';
$headers['To'] = 'the_unluck_seven@hotmail.com';
$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