Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

使用 PHP 發送 MSN 訊息
post by tommy @ 11 三月, 2007 10:55
最近有個自動發送 MSN 訊息的需求, 是在系統有異常時, 希望可以發送 MSN 訊息通知相關人員 (一般還是發 email, 只是, 多數人並不是隨時都在檢查並讀取 email, 並沒有 IM 的即時效果). 我記得在 Study Area 有看過類似的作法, 找到了這一篇文章 , 打算照著做就可以了, 可惜... 怎麼試都不成功.

首先, 裝了 tmsnc 這套軟體, 結果, 似乎是新版本介面改變, 所以不能使用. 就自己抓了舊的版本回來, 結果... 一樣不能使用. 我試著直接去跑 tmsnc, 是可以正確的登入到  MSN 中, 不過... 當我要傳訊息時, 馬上就跳出這個訊息:

Use an Unicode compitable terminal such as rxvt-unicode or uxterm. 

接著就結束程式了. 問題是... 我是用 PieTTY 連線, 使用 UTF-8 編碼, 應該也算是 unicode 的 terminal 吧. 而且, 傳的訊息只是一些英文字, 怎麼不行呢? 試著把程式的這個地方改成忽略這個錯誤, 結果, 一樣無法正確的把訊息送出. 試了幾次, 就決定放棄這個軟體了. (奇怪, 怎麼別人用都沒問題?)

上網找了一下, 發現了這一個討論 MSN 協定的網站 (雖然好像很久沒更新? 討論區的資料也好像很舊?), 也找到了這個別人寫的 php MSN class, 抓回來自己用了一下, 果然, 在接收到別人傳入的訊息後, 可以把相同的訊息再傳回去.

因為並沒有直接傳送訊息的功能, 所以我就照著網站上頭的協定, 改了一下程式, 在登入之後, 就送出 XFR 指令取得一個新的 SwitchBoard 伺服器, 然後用一個新的連線到 SB 伺服器, 送出 USR 指令後.... 接著就被斷線了 (奇怪... 看別人寫的怎麼都正常?). 多試了幾次, 發現約 5 次會成功一次, 可是接著的 CAL 指令, 又會被斷線 (這個就完全沒成功過).

試了一下午, 找不出原因. 就打算看別人怎麼寫的. 抓了 qmsn (在 debian 中, 如果 session 不是用 /tmp, 會不能用, 不過... 我改掉這個問題後, 還是不能用?), amsn, gaim 等回來看... 沒什麼特別的啊. 怎麼大家都可以做到. 我的程式就做不到? 後來, 加上一堆除錯的訊息, 才發現我在 XFR 指令取得的 CKI 碼後頭, 還有換行字元存在, 所以我送出的指令, 等於多了一組換行字元, 就被伺服器給斷線了 (果然年紀大了, 寫程式的功力退步不少, 這種小問題, 居然花了快一天才發現). 改了之後, 就可以正確的發送訊息了.

原本打算這樣子就弄好了, 結果... 上線一跑, 如果對方有上線, 是可以正確的收到訊息. 但是如果對方沒有上線, 就完全收不到訊息了. 也就是離線訊息是無法正確使用的.

上網再找了一下, 發現了另一個討論 MSN 協定的網站, 這一個網站看起來有持續的更新中,  上頭還有新的 WLM 8.1 所用的 MSNP15 協定. 由於 MSNP13 開始有支援離線訊息. 所以就把我的程式就照 MSNP13 的內容來改. 也加上了 OIM 的支援. 不過, 怎麼試都不成功. 後來看到 MSNP15 中, 對於 OIM 的傳送方式有些更改, 想說會不會之前 MSNP13 的就不能用了呢 (我覺得可能是我那兒又寫錯了吧, 不然... 總不會之前的舊版 MSN 也不能發離線訊息了嗎?) ?

再把程式改成支援 MSNP15. 這次改的就多了...  因為登入的方式由 TWN 改成  SSO, 且 challenge 檢查碼的計算又改的很複雜 (用到一些平常不常用的  mhash, mcrypt, bcmath 等模組, 所以... 如果你要用 OIM 的話, 你使用的 PHP 就必須加上這些模組的支援), 花了快一天才全部改好. 不過... 辛苦是有代價的, 這次果然可以正確的發送出離線訊息了. (該網站上頭對於 OIM 的 XML 內容, 似乎還是舊的, 有些內容和我自己用 WLM 8.1 把除錯功能打開所取得的記錄內容似乎不太一樣, 我是用我由 WLM 中抓到的那個 XML 才能正確傳送 OIM. 也許之前用 MSNP13 無法傳送也是類似的問題, 不過, 我這兒沒有使用 MSNP13 的 WLM 8.0 版本, 所以, 不確定是否是因為這個原因才不能使用)

整理了一下, 我把這個程式放在這兒 (使用 GPL 授權方式):  http://www.teatime.com.tw/~tommy/files/msnclass.7z

你只要寫一個小程式, 就可以用來發送 MSN 訊息了, 如:

#!/usr/bin/php -Cq
<?php
 
error_reporting(E_ALL);
include_once('msn.class.php');
 
// force to use MSNP9, without debug information
// $msn = new MSN('MSNP9');
 
// force to use MSNP9, with debug information
// $msn = new MSN('MSNP9', true);
 
// force to use MSNP15, without debug information
// $msn = new MSN('MSNP15');
 
// force to use MSNP15, with debug information
// $msn = new MSN('MSNP15', true);
 
// auto detect MSN protocol, without debug information
// $msn = new MSN;
 
// auto detect MSN protocol, with debug information
$msn = new MSN('', true);
 
if (!$msn->connect('YOUR_ID', 'YOUR_PASSWORD')) {
echo "Error for connect to MSN network\n";
echo "$msn->error\n";
exit;
}
 
$msn->sendMessage('Now: '.strftime('%D %T')."\nTesting\nSecond Line\n\n\n\nand Empty Line",
array(
'[email protected]',
'[email protected]'
)
);
echo "Done!\n";
exit;
 
?>

建議先用 $msn = new MSN('', true) 的方式跑一次, 確定沒有問題後, 再把除錯的功能關閉.

再提醒一次, 你的系統用的 PHP 至少要有 curl, pcre 這兩個模組才能使用 MSNP9. 如果要發送 OIM, 就得使用 MSNP15, 這時, 還要有 mhash, mcrypt, bcmath 等模組才可以.

補充一下, 那個傳送的訊息, 如果不是英文, 請使用 UTF-8 編碼才能正確的傳送. 因為 MSN 在傳送的訊息, 是使用 UTF-8 編碼的.


2007/03/13: 

做了一點小改版 , 上頭的網址會抓到最新的版本, 如果有需要舊的版本, 請抓這個檔案:  http://www.teatime.com.tw/~tommy/files/msnclass10.7z


2007/03/13:

修正在 32 位元的機器上, 無法發送離線訊息的問題. 有這個問題的使用者, 請抓取最新的一個版本吧.

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] 好用 [ 回覆 ]

以前用过一个用expect写的,但你这个比较好用:)。

commons icon [2] [ 回覆 ]

這篇真的很有參考價值 ^^

commons icon [3] [ 回覆 ]

感謝分享,非常有參考價值。

commons icon [4] 很讚的分享.. [ 回覆 ]

謝謝你...這很讚的分享..
在爬文中...不小心掉進這好地方..^^

commons icon [5] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

真是不錯喔,感謝您的分享。

commons icon [6] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

感謝大大的努力啦!剛好有需要自己寫一個Web MSN...這樣真是太棒了!

commons icon [7] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請問這個東西可否檢查連絡人列表 ? 在線狀態等資料 ?
加我 MSN 交流好嗎 ? MSN: [email protected]

commons icon [8] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

裡頭抓聯絡人名單與傳訊的步驟中, 是可以用來檢查是否上線. 不過... 程式沒有對這些有特別的處理, 要做這些功能要自己改程式.

commons icon [9] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

首先謝謝 tommy, 我的功能正常, 但就是無法處理msn用戶在加密情形所傳的訊息, 請教如何處理, 最近有個 http://live0800.blogspot.com/2007/08/todo-u.html [email protected] 有問必達 是可以的. 我也想做一個 msn robot, 可以process 有加密訊息功能的. 謝謝.

commons icon [10] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

我沒有用過加密的外掛, 所以不清楚會傳些什麼內容. 你可能要自己研究看看吧.

commons icon [11] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

感谢分享

commons icon [12] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

你好, phpmsnclass 預設是不接收檔案的, 如果要改為接收的話,應如何設定呢?
看了
http://msnpiki.msnfanatic.com/index.php/Main_Page
也不太明白 謝謝

commons icon [13] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

不支援傳檔, 不是設定問題, 是程式裡頭沒寫.
如果你有需求, 請自行研究協定, 自己加上吧.

commons icon [14] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請問這個可以接收訊息嗎?要如何做?

commons icon [15] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

用 bot 的模式一直跑就可以接收訊息. 請自己參考裡頭的程式吧.

commons icon [16] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

正想自己寫,正好找到閣下的大作,真是太好了

commons icon [17] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請問這個程式能夠連續傳送不同訊息給不同使用者嗎, 像是

$msn->sendMessage("msg1",array("user1@mail"));

$msn->sendMessage("msg2",array("user2@mail"));

這樣使用會失敗, 我trace code之後發現sendMessage之後就登出了, 但我把登出的部分註解掉仍然無法使用,是否一定要重新connect才行?

commons icon [18] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

我修改了程式碼, 現在應該是可以用了

commons icon [19] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

我也遇到和小殘相同的問題,當我傳訊息給某位後MSN機器人便離線了,可以請教一下該修改程式碼的哪些地方呢?

謝謝 ^_^

commons icon [20] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

真不知道為甚麼
我每次用都是
Error for connect to MSN network Can't connect to messenger.hotmail.com:1863, error => 10060, 連線嘗試失敗,因為連線對象有一段時間並未正確回應,或是連線建立失敗,因為連線的主機無法回應。

commons icon [21] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

那是你的網路問題吧. 也許是 firewall 擋了? 或者 DNS 有問題? 取得的 messenger.hotmail.com 的 IP 是有問題的吧.

那個訊息, 與這個 class 沒什麼關係.

commons icon [22] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

希望今天可以功!

試用成功

commons icon [23] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

您好 想用你的PHP CLASS 來寄 MSN 訊息

使用MSN9的時候都沒問題
但適用 MSN 15都會出現
Get Result: HTTP/1.1 100 Continue HTTP/1.1 200 OK Connection: close Date: Tue, 14 Oct 2008 07:13:58 GMT Server: Microsoft-IIS/6.0 PPServer: PPV: 30 H: BAYIDSLGN1U01 V: 0 Content-Type: text/html; charset=iso-8859-1 Expires: Tue, 14 Oct 2008 07:12:58 GMT Cache-Control: no-cache Pragma: no-cache P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" Content-Length: 883 10x800488000x80048821BAYIDSLGN1U01 2008.07.30.00.23.50wsse:FailedAuthenticationAuthentication Failure *** Can't get passport ticket! NS: >>> OUT *** Passport authenticated fail! Error for connect to MSN network Passport authenticated fail!
看解釋 因該是密碼錯誤
所以我在想是不是 mhash, mcrypt, bcmath 模組有問題
請問一下 您用的模組版本是什麼
mcrypt Version 2.5.7 Api No 20021217
mcrypt.algorithms_dir no value
mcrypt.modes_dir no value

mhash MHASH support enable
MHASH API Version 20020524

bcmath
BCMath support enabled

MHASH 跟 mcrypt 我都有手動設定 還有上傳 dll檔
BCMATH 我就沒做任何事 裝 apache 本身就有

commons icon [24] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

你的密碼有什麼特殊字元嗎?
有的話, 請改用 google code SVN 裡頭的版本試看看吧. 或者改一下密碼再連看看吧.

commons icon [25] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

TOMMY 感謝你
沒想到真的是 特殊字元的問題
我改過密碼就可以了
非常感謝!!

commons icon [26] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

謝謝你,這篇文章對於study省了不少的工夫

commons icon [27] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

路過的,
感謝大大無私的分享
省了不小功夫。

commons icon [28] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

試了好多次,也試著把 msnp9 的拿來用
可是怎麼用就是連登入都沒辦法登入
想要請教一下
這是我試驗的情況:
情況一:
我在原公司的 server 上,因為原本的 php 工程師有寫
所以我就試著改一改,調用了一下
不過,這部份都是可以正常登入,也可以取出之前 msnp9 所列出的好友名單
情況二:
我用原公司改寫好的同一支 Code 直接 Copy 過來到現在公司裡的 server
只不過是改了個 include_once 的路徑而已,而且用 get_class_methods 也都抓得到它所有的 function
這應該表示我在 $msn = new MSN; 的時候是正常的,也沒有 include path 方面的錯誤

我看了說文件中有提到要使用這個 class 的 php 需要要支援 crul and pcre module 所以用 phpinfo() 找出了下面的訊息
也都有顯示 enabled

curl
cURL support enabled
cURL Information libcurl/7.16.0 OpenSSL/0.9.8d zlib/1.2.3

pcre
PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 7.2 2007-06-19

看了上面的說明和討論之後,仍然還是不解,為什麼就是沒辦法在現在公司的 server connect msn
難道是上面所談到防火牆的關係嗎~!?

有請各位大大指點 >

commons icon [29] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請把 php 的訊息功能打開, 再把 msn.class.php 的除錯功能打開. (請參考 sample.php 的內容)

commons icon [30] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

嗯,感謝 tommy 大大
已經有請內部的網管把防火牆開起來了
也可以正常 login 和取得相關資料
東西真是永遠也學不完呀 ^^
3Q~

commons icon [31] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

診麼今天 MSN機器人 就不能使用了阿
昨天都可以正常今天去只要發訊息就斷線
是不是MSN有改版阿
大大要如何處裡阿

commons icon [32] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

今天 MS 的伺服器在讀取 contact list 時會發生錯誤. 這會導致使用 SOAP 去讀取失敗, 因此會被認為是離線的狀態.

實際上是可以正常接收與發送訊息的. (透過 OIM 離線的方式來接收與傳送)

可以改用 MSNP9 的方式連線 (不過就沒 OIM 可以用了), 或者忽略它吧.

等 MS 修好他們的系統 (當然也有可能是故意造成的, 因為正常的 WLM client 似乎不是使用這個方式去讀取 contact list, 所以沒有這個問題)

commons icon [33] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

如果要改用MSNP9 要改哪個部分阿
可以請大大說一下嗎小地不知道要診麼改才對

commons icon [34] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請自行看 sample.php 裡頭的說明.
不過 MS 應該也已經修好這個問題了.

commons icon [35] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

感謝 tommy 的努力與付出!
有一個問題請教,目前的方式每次要發訊息前都需要 new 一個 msn,然後 connect,但 msn 的 login 實在不快,所以想將產生的 msn 物件放在全域變數中來重複使用,將 sendMessage(..) 最後的 logout 相關程式碼搬移到獨立的 disconnect() function 中,然後試著連續呼叫兩次以上的 sendMessage(..),結果只有第一次的訊息會送出,後面的會發生 Timeout, maybe protocol changed! 的狀況,再麻煩大家給點建議,謝謝!!

commons icon [36] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

sendMessage() 本來就是設計在傳完就會離線.
要傳送多個訊息的, 請參考 bot 的執行方式, 基本上就是一個 loop 在那一直跑.

commons icon [37] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

謝謝你的回覆!
我測試過 bot 的執行方式,的確是可以達到這個目標。
不過因為我目前的 hosting 不支援在 server 直接執行指令,所以另外找 PHP Thread (http://www.phpclasses.org/browse/package/1136.html) 希望透過這個方式來包覆 bot 的背景執行,很可惜我目前的 hosting 也不支援 fork process。
不論如何還是謝謝囉~~

commons icon [38] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

小弟有個疑問請問要如何讓機器人可以改變頭像阿
或是開啟旁邊的功能視窗
是否可以給小弟一些線索

commons icon [39] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

頭像目前不支援.
功能視窗? 這 class 沒有 UI, 那來的功能視窗?
UI 的部份請自己處理吧, 基本上與這個 class 應該沒什麼關係.

commons icon [40] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

Tommy 大哥
小弟在安裝機器人時發生問題
安裝 curl, pcre , mhash, mcrypt, bcmath
模組
我使用YUM來安裝以下是LOG
Updated: mhash-0.9.9-1.el5.centos.i386
Updated: php-mhash-5.1.6-15.el5.centos.1.i386
Updated: libmcrypt-2.5.8-4.el5.centos.i386
Installed: php-mcrypt-5.1.6-15.el5.centos.1.i386
Updated: httpd-2.2.3-22.el5.centos.2.i386
Updated: php-common-5.1.6-23.2.el5_3.i386
Installed: php-pdo-5.1.6-23.2.el5_3.i386
Updated: php-cli-5.1.6-23.2.el5_3.i386
Updated: php-5.1.6-23.2.el5_3.i386
Installed: perl-DBD-MySQL-3.0007-2.el5.i386
Installed: imake-1.0.2-3.i386
Installed: mysql-server-5.0.45-7.el5.i386
Installed: php-mysql-5.1.6-23.2.el5_3.i386
Updated: php-ldap-5.1.6-23.2.el5_3.i386
Updated: 1:mod_ssl-2.2.3-22.el5.centos.2.i386
Installed: autoconf-2.59-12.noarch
Installed: automake-1.9.6-2.1.noarch
Installed: php-devel-5.1.6-23.2.el5_3.i386
Updated: httpd-manual-2.2.3-22.el5.centos.2.i386
Installed: ntp-4.2.2p1-9.el5.centos.2.i386
Installed: php-mbstring-5.1.6-23.2.el5_3.i386
Installed: php-bcmath-5.1.6-23.2.el5_3.i386
Erased: php-bcmath
Installed: php-bcmath-5.1.6-23.2.el5_3.i386
Updated: curl-7.15.5-2.1.el5_3.4.i386
我發生的問題是在php-bcmath我如果裝上去機器人看不到上線
如果我把他一除再執行
/var/spool/msnbot/msnbot.sh start
他可以上線但是不能顯示標題暱稱那些資訊
請大大交交我要如何來架設所需要的環境
感激大大

commons icon [41] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

我不確定你為什麼 php-bcmath 裝上會有問題.
不過... 沒有 bcmath, 就只會使用 MSNP9, 而部份的功能只有在 MSNP15 才支援, 沒出現是正常的.

commons icon [42] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

你好,我大約放了100個 .msn 檔案在 spool 資料夾讓 bot 自動發送,大約每發九封訊息就會自動離線,並會自動登入,之前版本在自動登入後會繼續讀取 spool 資料夾並繼續發送。
但是這次 r38 版本在 bot 離線並自動登入後,並沒有再次讀取 spool 資料夾內的.msn檔案並繼續發送,可以請大大看看是否有哪裡出錯呢?
謝謝大大。

commons icon [43] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請把除錯的功能打開並把除錯的記錄寫到檔案去, 然後去看裡頭是那兒有問題吧. 看不懂的話請把檔案寄給我吧 (如果不方便... 那就自己學著怎麼除錯吧).

我自己試著產生 100 的訊息, 在發送幾個後會有 800 錯誤, 然後離線後等 120 秒會重新連送再接著送, 並沒有你說的問題.

commons icon [44] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

你好,已經把 log 檔發給您了,再麻煩您抽空查看,謝謝。

commons icon [45] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

*** Timeout, maybe protocol changed!
为啥我的程式总出现这个问题,错误的原因在那里!!

commons icon [46] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

要看這行之前的記錄才知道.
請先更新到 svn 的最新版本再試看看, 也許已經被修正過了.

commons icon [47] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請問有不用 bcmath class 的程式嗎?
舊版 php4 好像沒個東西 .. @@ tks

commons icon [48] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

bcmath module 不是 class.
這東西可能 php3 就有了吧. 只是一般的 linux 在打包套件時都不會編入, 可能都要自己做或是加外的安裝模組.

請到 php 官網查 bcmath 就可以找到資料了.

commons icon [49] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

請問在發送第二次 sendMessage 的時候都會發生 feof 的錯誤不知是何原因?

如下面只會傳 1 然後到要傳送 2 就會出錯了 ><

$msn->sendMessage('1', array('[email protected]'));

$msn->sendMessage('2', array('[email protected]'));

-----------------------------------------

Warning: stream_set_timeout(): 14 is not a valid stream resource in D:\WAMP\www\msn\class\msn.class.php on line 2366

Warning: feof(): 14 is not a valid stream resource in D:\WAMP\www\msn\class\msn.class.php on line 2372

commons icon [50] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

sendMessage() 執行完就會離線, 要重新登入才能再傳.
覺得這樣不好用.... 可以自己改成你想要的方式來使用.

commons icon [51] Online 模式下的 sendMessage [ 回覆 ]

感謝 tommy 大哥熱心協助

小弟把 sendMessage 最後兩行登出的部份拿掉
$this->writeln("OUT");
fclose($this->fp);

現在離線的時候可以重複傳 sendMessage 了
可是發現線上的時候還是只能發一次,第二次就沒反應了,也沒有錯誤訊息,小弟是想讓機器人除了回應對話的功能外,可以主動發訊息出去,原本依照 processMsg 去改可是發現還要考量各種狀態,直接用 sendMessage 似乎還是不行,執行一次以後連 doLoop 迴圈都不跑了,請問大哥知道可以直接修改哪個部分讓他在迴圈內可以直接傳訊息出去嗎? 萬分感激

commons icon [52] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

如果你不知道怎麼改, 建議你直接用 msnbot 的方式來執行吧.

commons icon [53] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

一分钟只能发几个信息的么?好像每分钟给6个以上的人sendmsg,ms 的server 就返回 800 错误了,为什么呢。。。

commons icon [54] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

沒有文件提到多久可以發一次訊息. 總之碰到 800 之後就只能等著再連線後再發了.

commons icon [55] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

那有没什么好办法去get online friends list呢,如果用CAL的方法去判断friends online就会出现每分钟CAL 6次就返回800错误了。。。

commons icon [56] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

就被動的等著 server 送來使用者的狀態不就可以了?
這本來就是 msn 運作的方式, 並不是主動去問, 而是被動的等伺服器傳來.

commons icon [57] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

想請問一下Tommy 大大!
我試過也是無法送出! 但是透過 Linux 上
在 console 中使用 php script.php 去送就一切OK!
但是,透過 Apache Web, 使用 IE 去連該 script.php
都會出現 Error for connect to MSN network
是不是還有啥麼設定必需打開的呢?!

commons icon [58] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

也許你的機器有什麼安全性的設定會不允許這樣子的連線吧?
SELinux?

commons icon [59] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

请教各位大大:
我使用r46的phpmsnclass做MSN消息发送没有成功。
启动机器人:
[root@localhost phpmsnclass]# ./msnbot.sh start
Starting MSN bot: msnbot.
发送消息:
[root@localhost phpmsnclass]# php msnsendmsg.php [email protected] "123"
但没有消息接收到,查看日志
debug.log:
04/21/10 13:18:23 [18071] *** try to connect to MSN network
04/21/10 13:18:23 [18071] NS: >>> VER 1 MSNP9 CVR0
04/21/10 13:18:23 [18071] NS: > CVR 2 0x0409 winnt 5.1 i386 MSMSGS 6.0.0602 msmsgs [email protected]
04/21/10 13:18:24 [18071] !!! Can't connect to server: Can't connect to messenger.hotmail.com:1863, error => 110, Connection timed out
04/21/10 13:18:24 [18071] *** wait for 30 seconds
与MSN网络连接不成功。
但是本机能够telnet到messenger.hotmail.com的1863端口。
[root@localhost phpmsnclass]# telnet messenger.hotmail.com 1863
Trying 64.4.9.254...
Connected to messenger.hotmail.com (64.4.9.254).
Escape character is '^]'.
^[^[
Connection closed by foreign host.
在此请教各位,谢谢。

commons icon [60] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

各位前輩您好
我在使用msnbot上有些問題 想請教大家

執行msnbot.php後
debug.log內容為
----------------
04/27/10 16:23:36 [nopid] *** startup ***
04/27/10 16:23:36 [nopid] *** try to connect to MSN network
04/27/10 16:23:37 [nopid] NS: >>> VER 1 MSNP9 CVR0
04/27/10 16:23:38 [nopid] NS: > CVR 2 0x0409 winnt 5.1 i386 MSMSGS 6.0.0602 msmsgs [email protected]
04/27/10 16:23:38 [nopid] user:[email protected],password:bobo941104
04/27/10 16:23:38 [nopid] !!! Can't connect to server:
04/27/10 16:23:38 [nopid] *** wait for 30 seconds
---------------------
firefox出現
---------------------
#!/usr/bin/php -Cq
Fatal error: Maximum execution time of 30 seconds exceeded in D:\elearn\AppServ\www\msnbot\msn.class.php on line 1464
---------------------

因為我是裝在appserv裡
而我的appserv位址為 D:\elearn\AppServ\www\
我分別創3個資料夾
D:\elearn\AppServ\www\msnbot
D:\elearn\AppServ\www\msnbot\spool
D:\elearn\AppServ\www\msnbot\log
接著將msnbot.php跟msn.class.php裡
出現dirname($_SERVER['argv'][0]).的部分
都改成'd:\elearn\AppServ\www\msnbot'.

執行sample.php後 出現
NS: >>> VER 1 MSNP9 CVR0 NS: > CVR 2 0x0409 winnt 5.1 i386 MSMSGS 6.0.0602 msmsgs [email protected] Error for connect to MSN network

如果tommy願意且需要幫看
msnbot.php, config.php, msn.class.php
我非常樂意寄給您
非常感謝

commons icon [61] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

msnbot 的方式不適合用在 httpd 上頭去跑, 它是一個無窮迴圈, web server 不會允許這類的執行方式.

commons icon [62] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

tommy大 感謝您提供如此棒的東西
並且回答我的問題
之後如果還有使用上的問題
還望您能不吝賜教

真是非常感謝!!!!

commons icon [63] Re:使用 PHP 發送 MSN 訊息 [ 回覆 ]

謝謝Tommy,您寫的程式真的很棒,非常方便。
再一次感謝

迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 50 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS