2007年12月12日星期三

於Windows XP環境安裝dotProject (二)

上一篇文章已經探討過在Windows XP使用AppServ 2.5.9來安裝dotProject繁體UTF8中文版,如何正常顯示Gantt圖的方式,現在再來討論dotProject其他需要修正的地方,也就是發送email錯誤的修正。

要正式啟用dotProject,需要先做以下步驟:

(1)先更改admin的資料,包括正確的email address
(2)建立公司、建立部門、將admin設到某公司某部門下
(3)建立專案、建立任務

以上主要目的是要測試dotProject是否能正確發送email


(1)新增任務或任務日誌時,勾選發送email,submit出去出現以下錯誤

ERROR 001
Fatal error
: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\dotProject\classes\libmail.class.php on line 461

當你去設定系統管理->系統配置,修改為SMTP發送,並輸入正確SMTP Server後,問題仍舊一樣 ...

(2)而在新增ticket(問題跟蹤單)時,送出email通知也出現以下錯誤

ERROR 002
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\AppServ\www\dotProject\modules\ticketsmith\do_ticket_aed.php on line 89

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\dotProject\modules\ticketsmith\do_ticket_aed.php:89) in C:\AppServ\www\dotProject\classes\ui.class.php on line 510



ERROR 003
Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\dotProject\classes\libmail.class.php on line 465

關於ERROR 001:
表示在libmail.class.php無法去發出email
我們打開libmail.class.php (在dotProject/classes下)發現

$this->transport = dPgetConfig('mail_transport', 'php');
$this->host = dPgetConfig('mail_host', 'localhost');

他並沒有去抓dotProject的config,直接設成php方式接localhost

關於ERROR 002:
do_ticket_aed.php亦使用libmail.class.php方式發送email,也沒有去抓dotProject的config

關於ERROR 003:
去修改dotProject的系統設定maximum timeout也沒有用

由以上可以知道dotProject這個版本的發送mail方式並不統一
在dotProject的系統管理下去設定SMTP並不能解決問題

最後的測試結果,在盡量不修改dotProject程式情況下,以下為解決方式:

(1)修改php.ini
[mail function]
; For Win32 only.
SMTP = yourSMTPServer
smtp_port = 25

(修改完重新啟動Apache Server)

(2)修改do_ticket_aed.php (在dotProject/modules/ticketsmith下)

原程式碼
mail($ticketNotification[$priority], $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG['reply_to'] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

修改成
mail($email, $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG["reply_to"] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

(3)將libmail.class.php修改
原程式碼
var $charset = "us-ascii";
var $ctencoding = "7bit";
var $receipt = 0;

修改成
var $charset = "utf-8";
var $ctencoding = "8bit";
var $receipt = 0;

(4)修改ticketsmith下的view.php
在if (@$type_toggle @$priority_toggle @$assignment_toggle)
的前面加上以下程式碼

$author2 = $author;
$position = strpos($author2,"<");
$position++;
$author3 = substr($author2,$position);
$author4 = rtrim($author3, ">");

然後把兩行
mail($ticketNotification[$priority], $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG['reply_to'] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

修改成
mail($author4, $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG['reply_to'] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

經測試,送出正確email
但尚有些問題待解決,如ticketsmith的followup.php的錯誤,如發送email通知時,如何發出通知給task所有人/被指派人或ticket所有人/被指派人 ... 過陣子再談了。

標籤: ,

加入書籤 :

其他書籤 :

1 個意見:

2008年4月29日下午9:07 , Anonymous 匿名 提到...

very 感謝ㄋㄟ

 

張貼意見

<< 首頁