酷!學園

精華區 => 酷!學園 精華區 => 主題作者是: twu2 於 2007-03-11 19:00

主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-11 19:00
最近有個自動發送 MSN 訊息的需求, 是在系統有異常時, 希望可以發送 MSN 訊息通知相關人員 (一般還是發 email, 只是, 多數人並不是隨時都在檢查並讀取 email, 並沒有 IM 的即時效果). 我記得在 Study Area 有看過類似的作法, 找到了這一篇文章 (http://phorum.study-area.org/viewtopic.php?t=32299) , 打算照著做就可以了, 可惜... 怎麼試都不成功.

首先, 裝了 tmsnc (http://tmsnc.sourceforge.net/) 這套軟體, 結果, 似乎是新版本介面改變, 所以不能使用. 就自己抓了舊的版本回來, 結果... 一樣不能使用. 我試著直接去跑 tmsnc, 是可以正確的登入到  MSN 中, 不過... 當我要傳訊息時, 馬上就跳出這個訊息:
代碼: [選擇]
Use an Unicode compitable terminal such as rxvt-unicode or uxterm. 接著就結束程式了. 問題是... 我是用 PieTTY 連線, 使用 UTF-8 編碼, 應該也算是 unicode 的 terminal 吧. 而且, 傳的訊息只是一些英文字, 怎麼不行呢? 試著把程式的這個地方改成忽略這個錯誤, 結果, 一樣無法正確的把訊息送出. 試了幾次, 就決定放棄這個軟體了. (奇怪, 怎麼別人用都沒問題?)

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

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

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

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

上網再找了一下, 發現了另一個討論 MSN 協定的網站 (http://msnpiki.msnfanatic.com/index.php/Main_Page), 這一個網站看起來有持續的更新中,  上頭還有新的 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
&#40;E_ALL&#41;;
include_once&#40;'msn.class.php'&#41;;

// force to use MSNP9, without debug information
// $msn = new MSN&#40;'MSNP9'&#41;;

// force to use MSNP9, with debug information
// $msn = new MSN&#40;'MSNP9', true&#41;;

// force to use MSNP15, without debug information
// $msn = new MSN&#40;'MSNP15'&#41;;

// force to use MSNP15, with debug information
// $msn = new MSN&#40;'MSNP15', true&#41;;

// auto detect MSN protocol, without debug information
// $msn = new MSN;

// auto detect MSN protocol, with debug information
$msn = new MSN&#40;'', true&#41;;

if &#40;!$msn->connect&#40;'YOUR_ID', 'YOUR_PASSWORD'&#41;&#41; &#123;
    
echo "Error for connect to MSN network\n";
    echo 
"$msn->error\n";
    exit;
&
#125;

$msn->sendMessage&#40;'Now&#58; '.strftime&#40;'%D %T'&#41;."\nTesting\nSecond Line\n\n\n\nand Empty Line",
                  
array&#40;
                    
'somebody1@hotmail.com',
                    
'somebody2@hotmail.com'
                       
&#41;
                 
&#41;;
echo "Done!\n";
exit;

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

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

補充一下, 那個傳送的訊息, 如果不是英文, 請使用 UTF-8 編碼才能正確的傳送. 因為 MSN 在傳送的訊息, 是使用 UTF-8 編碼的.
主題: 使用 PHP 發送 MSN 訊息
作者: Darkhero2007-03-12 00:50
太棒了!~...
這篇一定要置頂..
感謝 twu2 大大的貢獻...
主題: 使用 PHP 發送 MSN 訊息
作者: sakana2007-03-12 00:54
感謝 twu2大大 ^^
真是獲益良多
主題: 在 shell script 中發送 MSN 訊息
作者: twu22007-03-12 08:39
有了之前用 PHP 寫的 MSN class 之後, 要在一般的 shell script 中來發送 MSN 的訊息就不是件難事了.

首先, 最好每一台機器都去申請一個新的 MSN 帳號 (因為同一個帳號不能同時在兩台機器上登入, 先進去的好像會被後進去的踢出去), 反正申請帳號也不用什麼費用. 當然, 要收這個訊息的帳號, 記得要允許由這個新的帳號發送訊息才可以.

然後, 寫一個小的 php script 如下:
代碼: [選擇]
#!/usr/bin/php -Cq
<?php

error_reporting
&#40;0&#41;;

if &#40;!isset&#40;$argc&#41;&#41; $argc = $_SERVER['argc'&#93;;
if &#40;!isset&#40;$argv&#41;&#41; $argv = $_SERVER['argv'&#93;;

if &#40;$argc != 3&#41; &#123;
    
echo "Syntax&#58; $argv[0&#93; to msg\n";
    exit;
&
#125;

$aTo explode&#40;',', $argv[1&#93;&#41;;
$sMsg $argv[2&#93;;

$msn_acct 'YOUR_MSN_ACCOUNT';
$msn_password 'YOUR_MSN_PASSWORD';

include_once&
#40;'msn.class.php'&#41;;

$msn = new MSN;

if &
#40;!$msn->connect&#40;$msn_acct, $msn_password&#41;&#41; &#123;
    
echo "Error for connect to MSN network\n";
    echo 
"$msn->error\n";
    exit;
&
#125;

$msn->sendMessage&#40;$sMsg, $aTo&#41;;
if &#40;$msn->error != ''&#41;
    
echo "Error&#58; $msn->error\n";

exit;

?>

上頭的 YOUR_MSN_ACCOUNT, YOUR_MSN_PASSWORD 設好後, 把這個檔案存成 msnsendmsg.php, 連同 msn.class.php 放到 /usr/local/bin 下頭. 記得把 msnsendmsg.php 加上可執行的屬性.

這樣子處理之後, 我們只要執行 msnsendmsg.php, 第一個參數是要接收這個訊息的使用者 (如果有多個, 以逗號分隔), 第二個參數就是要傳送的訊息 (用 UTF-8 編碼).  例如:
代碼: [選擇]
#!/bin/sh

msnsendmsg.php "user_a@hotmail.com,user_b@hotmail.com" "Date: $(date)
Subject: Test
=================================================
測試 line 1
line 2
line 3
以下空白


結束
================================================="

exit

當然, 要送什麼內容就由你自己決定吧. 這樣子, 是不是很方便呢?

上頭的文章, 同步發表於我的 blog:
http://blog.teatime.com.tw/1/post/200
http://blog.teatime.com.tw/1/post/201
主題: 使用 PHP 發送 MSN 訊息
作者: LPJ2007-03-12 09:01
感謝twu2提供!!
並應用於 http://gm5.cc/msn
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-12 09:08
引述: "LPJ"
感謝twu2提供!!
並應用於 http://gm5.cc/msn


沒輸入密碼的地方? 這樣子登入會失敗, 應該不能送出吧.
我剛試著送了一個給自己, 並沒有收到.
主題: 使用 PHP 發送 MSN 訊息
作者: abelyang2007-03-12 09:12
我個人的經驗, msn server 會判斷你的進出如果太頻繁
(logout/login) ,它會 block 你一陣子

以前用的那個tmsnc 我很早就放棄了,現在用的是 perl 的版本
(主要是用 expect 真不是一個好用的方法),用高度可用的程式語言
來開發彈性才會高 (雖然  expect 是 py 路線,但我實在是不熟)

這些東西其實有很大的延伸空間,除了傳訊外

代碼: [選擇]

abel@xyz.net.tw (電子郵件地址尚未確認) 說:
Abel 您好:
abel@xyz.net.tw (電子郵件地址尚未確認) 在此為您服務
使用 help 指令查詢使用方式

Abel 說:
?
abel@xyz.net.tw (電子郵件地址尚未確認) 說:
無效指令: ?
請使用 help 查看詳細說明

Abel 說:
dir
abel@xyz.net.tw (電子郵件地址尚未確認) 說:
asterisk-1.2.13.tar.gz
bind-9.3.0_abel.tar.gz

Abel 說:
get asterisk-1.2.13.tar.gz
abel@xyz.net.tw (電子郵件地址尚未確認) 傳送:
 
接受(Alt+C)  另存新檔...(Alt+S)  拒絕(Alt+D)
Abel 說:
help

abel@xyz.net.tw (電子郵件地址尚未確認) 說:
可使用之指令如下(使用 'help 指令' 可查詳細說明):
  dir  get  delete  msg  dict  ping  share  sms  status

Abel 說:
ping log.xyz.net.tw

abel@xyz.net.tw (電子郵件地址尚未確認) 說:
PING log.xyz.net.tw (211.72.210.251) 56(84) bytes of data.
64 bytes from eai2.xyz.tw (211.72.210.251): icmp_seq=0 ttl=64 time=0.514 ms
64 bytes from eai2.xyz.tw (211.72.210.251): icmp_seq=1 ttl=64 time=0.187 ms
64 bytes from eai2.xyz.tw (211.72.210.251): icmp_seq=2 ttl=64 time=0.167 ms
64 bytes from eai2.xyz.tw (211.72.210.251): icmp_seq=3 ttl=64 time=0.159 ms
64 bytes from eai2.xyz.tw (211.72.210.251): icmp_seq=4 ttl=64 time=0.149 ms

--- log.xyz.net.tw ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 836ms
rtt min/avg/max/mdev = 0.149/0.235/0.514/0.140 ms, pipe 2, ipg/ewma 209.077/0.369 ms

Abel 說:
help msg

abel@xyz.net.tw (電子郵件地址尚未確認) 說:
msg USER MESSAGE
  留 MESSAGE 給 USER (即使 user 不在線上也可以)

主題: 使用 PHP 發送 MSN 訊息
作者: paulso2007-03-12 17:54
實在是太棒了, 我使用 sample.php 來試
要使用 MSNP15 就要先裝 mhash, mcrypt, 我是用 CentOS 4.4 的

引用


Site:
http://phprpms.sourceforge.net/mhash
http://phprpms.sourceforge.net/mcrypt
http://rpmfind.net/linux/rpm2html/search.php?query=libmcrypt.so.4

wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/mhash-0.9.2-1.i386.rpm
wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/php-mhash-4.3.9-3.2.1.i386.rpm

rpm -ivh *.rpm

wget ftp://rpmfind.net/linux/PLD/dists/ac/ready/i386/libmcrypt-2.5.7-6.i386.rpm
wget http://nchc.dl.sourceforge.net/sourceforge/phprpms/php-mcrypt-4.3.9-3.2.1.i386.rpm

rpm -ivh libmcrypt-2.5.7-6.i386.rpm
rpm -ivh php-mcrypt-4.3.9-3.2.1.i386.rpm


引述: "sample.php"

$msn = new MSN('MSNP15', true);


使用 MSNP15

成功, 不過離線訊息不成功 :[
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-12 18:16
要不要把不成功的那一個畫面最後幾頁丟來看看? 就是用來傳送 OIM 那一段 (那兒只有 from/to 的資料, 沒有密碼, 放上來應該不會有什麼安全問題.).

我自己試幾個帳號都是可以正常傳送 OIM 的. (只是收的那方還是要用 WLM 8.x 才能收到)

比較有可能是 mcrypt 不對吧, 也許沒支援 DES3 的加密吧. 在算 challenge code 的時候, 會用到 MD5, MHASH_SHA1 與 DES3.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-12 19:09
剛剛在 CentOS 4.4 上頭試了一下, 除了 libmcrypt 是用 DAG 的版本外, 其他的與你上頭裝的一樣. (不過是 x86-64 的版本)
可以正常的發送 OIM, 並不會有什麼問題.
主題: 使用 PHP 發送 MSN 訊息
作者: LPJ2007-03-13 02:50
引述: "twu2"
引述: "LPJ"
感謝twu2提供!!
並應用於 http://gm5.cc/msn


沒輸入密碼的地方? 這樣子登入會失敗, 應該不能送出吧.
我剛試著送了一個給自己, 並沒有收到.


已將if (!$msn->connect('xxx@hotmail.com', 'xxxx')) {
程式碼專門用另外一個MSN帳號取代(ROBOT),所以不需要密碼.

可以離線傳送!本站使用FreeBSD 6.2
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-13 11:56
修改之前發送 MSN 的 php calss . 主要是加上 timeout 的設計, 以避免在 MSN protocol 修改之後, 程式可能會有無法結束的情形.

預設的 timeout 時間是 15 秒. 如果要修改, 可以直接改 msn.class.php 中 MSN ()的第三個參數的預設值, 或在使用 MSN 這個 class 時, 設定第三個參數值.

另外, 把除錯訊息的部份, 統一由一個函式處理, 並允許在設定是否除錯時, 直接把 $debug 設成一個字串 (檔名), 則這些除錯訊息就不會顯示出來, 而是寫到該檔案中.

檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass11.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z
主題: 使用 PHP 發送 MSN 訊息
作者: paulso2007-03-13 17:03
引述: "twu2"
要不要把不成功的那一個畫面最後幾頁丟來看看? 就是用來傳送 OIM 那一段 (那兒只有 from/to 的資料, 沒有密碼, 放上來應該不會有什麼安全問題.).

我自己試幾個帳號都是可以正常傳送 OIM 的. (只是收的那方還是要用 WLM 8.x 才能收到)

比較有可能是 mcrypt 不對吧, 也許沒支援 DES3 的加密吧. 在算 challenge code 的時候, 會用到 MD5, MHASH_SHA1 與 DES3.


感謝大大的支持, 現在可以了, 原來是因為沒裝 bcmath 的關係
因為訊息出得太快看不到第一行的:

引述: "error_log"

PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/bcmath.so' - /usr/lib/php4/bcmath.so: cannot open shared ob
ject file: No such file or directory in Unknown on line 0


引述: "my action"

wget ftp://rpmfind.net/linux/PLD/current/dists/ra/PLD/i386/PLD/RPMS/php-bcmath-4.2.3-8.i386.rpm
rpm -ivh --nodeps php-bcmath-4.2.3-8.i386.rpm


site: http://rpmfind.net/linux/rpm2html/search.php?query=bcmath.so
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-13 17:23
奇怪, 我在 CentOS 4 上頭, 並沒有另外裝 bcmath, 並不會有問題啊. 你的 php 是自己編的嗎?
主題: 使用 PHP 發送 MSN 訊息
作者: paulso2007-03-13 17:25
引述: "twu2"
奇怪, 我在 CentOS 4 上頭, 並沒有另外裝 bcmath, 並不會有問題啊. 你的 php 是自己編的嗎?


不是啊, 是預設的 rpm php

# rpm -q php
php-4.3.9-3.22
主題: 使用 PHP 發送 MSN 訊息
作者: paulso2007-03-13 17:32
當我打算再試的時候, 竟然失敗了

不好意思, 要貼訊息出來, 很多 >"<

代碼: [選擇]
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
  <soap:Fault>
    <faultcode xmlns:q0="http://messenger.msn.com/ws/2004/09/oim/">      q0:AuthenticationFailed</faultcode>
    <faultstring>Exception of type 'System.Web.Services.Protocols.SoapException' was thrown.</faultstring>
    <faultactor>https://ows.messenger.msn.com/OimWS/oim.asmx</faultactor>
    <detail>
      <LockKeyChallenge xmlns="http://messenger.msn.com/ws/2004/09/oim/">389889063</LockKeyChallenge>
    </detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
*** OIM need new challenge (389889063) for paulso43737@hotmail.com

PS. 整理一下, 上頭也有密碼的部份移除. by twu2

其中有一行是

*** SB: no any use online! skip to send message!

不知道有沒有關係
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-13 17:37
代碼: [選擇]
[twu@www ~]$ rpm -qa | grep php
php-xmlrpc-4.3.9-3.18
php-pgsql-4.3.9-3.18
php-devel-4.3.9-3.18
php-mysql-4.3.9-3.18
php-snmp-4.3.9-3.18
php-odbc-4.3.9-3.18
php-gd-4.3.9-3.18
php-mbstring-4.3.9-3.18
php-domxml-4.3.9-3.18
php-ncurses-4.3.9-3.18
php-imap-4.3.9-3.18
php-ldap-4.3.9-3.18
php-pear-4.3.9-3.18
php-4.3.9-3.18


找了一台 32bit 的 CentOS 4 來看, 沒裝 php-bcmath, 不過, 應該是有編在裡頭, 因為這個結果都是有的:
代碼: [選擇]
<?php

if &#40;function_exists&#40;'bcmod'&#41;&#41;
  
echo "yes for bcmod!\n";

if &
#40;extension_loaded&#40;'bcmath'&#41;&#41;
  
echo "yes for bcmath!\n";

?>

主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-13 17:51
那個訊息是因為你要收訊息的使用者不在線上, 就會回 217.
因為沒有人在線上, 所以就沒送出. 而會試著送 OIM.

後面是去試著送 OIM, 結果都是:
代碼: [選擇]
*** OIM need new challenge (389889063)
看起來是算出來的 lockkey 不對. 也就是 challenge 的算法不對吧.

我剛剛在我家唯一一台的 32 位元機器上 (debian) 試了一下, 果然不對... 回家再看看那兒算錯了. (64 bits 的機器是對的, 應該是 sign/unsign 或 overflow 造成的吧...)
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-13 18:37
msn.class.php v1.2 (修正 32 位元機器 OIM 問題)

修改之前發送 MSN 的 php calss. 修正在 32 位元的機器上, 無法計算出正確的 challenge code, 因此無法正確發送離線訊息的問題.

在使用 base_convert() 轉換出來的值, 是一個字串, 如果直接拿來做 AND/XOR 之類的位元運算, 在 32 位元的機器上頭, 會傳回 -1. (奇怪, 在 64 位元的機器上頭就是正常的)

檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass12.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z
主題: 使用 PHP 發送 MSN 訊息
作者: paulso2007-03-19 11:44
引述: "twu2"
msn.class.php v1.2 (修正 32 位元機器 OIM 問題)

修改之前發送 MSN 的 php calss. 修正在 32 位元的機器上, 無法計算出正確的 challenge code, 因此無法正確發送離線訊息的問題.

在使用 base_convert() 轉換出來的值, 是一個字串, 如果直接拿來做 AND/XOR 之類的位元運算, 在 32 位元的機器上頭, 會傳回 -1. (奇怪, 在 64 位元的機器上頭就是正常的)

檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass12.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z


嘗試了, ok 了 ;)
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-03-27 11:59
為了不上線太過頻繁,所以程式不能老在登入
但是如果被在其它地方登出、斷線,好像還不能偵測是不是還在線上?
有沒有辦法確認線上狀態。來決定要不要重新執行登入啊?
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-27 18:36
可以考慮寫成 daemon, login 之後, 沒必要就不要 logout 了. 用另外的方式來讀取要傳送的資料. 這樣子應該就可以避免這個問題了.

等有空再來改看看好了.
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-03-27 19:35
引述: "twu2"
可以考慮寫成 daemon, login 之後, 沒必要就不要 logout 了. 用另外的方式來讀取要傳送的資料. 這樣子應該就可以避免這個問題了.

等有空再來改看看好了.


我的程式本來就不會主動登出
是考慮當不正常登出後(像MSN Server有問題時)
沒有辦法偵測連線狀態~~

不過現在的板本好像是出傳一次就登入登出一次?
好像很容易被封索的樣子
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-27 19:41
不正常? 送出指令後如果沒有回覆 (斷線應該 feof() 就會知道), 或回覆錯誤碼, 就當做已經被登出, 然後再登入一次就可以.

正常情形下, 不會有 feof(), 也應該隔一段時間會收到一次 challenge.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-29 11:58
修改之前發送 MSN 的 php calss. 加入一些小功能, 可以做成簡單的 msnbot.

檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass13.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z

主要是加入一個 doLoop() 用來接收訊息並檢查 spool 內是否有訊息要送出. 另外寫一個 msnbot.php, 用來常駐執行.

安裝說明:

    * 建立下面的目錄:
代碼: [選擇]
mkdir /var/spool/msnbot
mkdir /var/spool/msnbot/log
mkdir /var/spool/msnbot/spool
chmod 777 /var/spool/msnbot/spool
chmod o+t /var/spool/msnbot/spool


    * 把 msnbot.php 與 msn.class.php 放到 /var/spool/msnbot 的目錄下頭, 把 msnbot.php 設成可執行:
代碼: [選擇]
chmod +x /var/spool/msnbot/msnbot.php

    * 修改 msnbot.php 的內容, 如果有必要, 可以修改 processMsg() 的內容, 改成你自訂的處理方式.
    * 使用 msnbot.sh 做成啟動的 script, 讓 msnbot.php 程式在開機之後就執行.
    * 如果有需要傳送訊息, 直接在 /var/spool/msnbot/spool 目錄下, 產生一個副檔名為 .msn 的文字檔, 第一行的內容是:
代碼: [選擇]
TO: email1,email2

    表示要接受訊息的使用者列表. 第二行之後是所要送出的訊息. 然後把檔案的屬性改成 0666. 可以參考 msnsendmsg.php 的做法.

詳細的內容... 請自行參考程式碼吧.

本文同步發表於: http://blog.teatime.com.tw/1/post/218
主題: 使用 PHP 發送 MSN 訊息
作者: pank2007-03-29 14:35
應該是 chmod 777 /var/spool/msnbot/spool
感謝 twu2 的程式!
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-29 15:51
補充一下, 如果用 MSNP15, 我試過 MSNP13 所用的 SOAP, 會有問題. 而該網站上頭在 MSNP15 的 contacts.msn.com 認證 policy 設定並不太對, 至少我試都會失敗. 我自己抓我用的 WLM 8.1 的記錄, 後來是可以正確的登入, 不過仍然無法取得 contact list. 而 MSNP15 中, 要使用 ADL 針對 contact list 送出指令, 對方才會看到你的上線狀態. 這一點在 MSNP9 中, 可以由  SYN 指令取得 contact list, 且, 只要 CHG 做 NLN 的指令, 對方就會看到這個帳號是 online 了. 因此.... msnbot.php 對於 MSNP15 的處理上頭, 會再產生一個 MSNP9 的 object, 去取得 contact list 後再使用 MSNP15 登入.

另外, 1.3a 修正被斷線後無法再次登入的問題. 檔名沒改, 如果你抓的還是 1.3 版的, 就麻煩再抓一次吧.
主題: 使用 PHP 發送 MSN 訊息
作者: pank2007-03-30 00:56
用這個程式做了一個 WEB2MSN http://pank.org/msn/
Source http://pank.org/msn/web2msn.tgz
建議再加一個功能, 當 user 新加入 MSN bot 為連絡人時,
MSN bot 應該會收到一個確認的訊息, 若能自動回應, 就很讚了
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-30 10:13
有人加入或移除時, 是會收到 ADL/RML 指令 (ADD/REM 在 MSNP9 中).
不過... 好像並不用回應對方就可以正確的加入了. (這個與 MSN 的運作一樣嗎? 我記得好像要同意才能加入? 還是那個同意是指加到自己的 contact list?)

在 MSNP15 中, 好像加入後, 還要送個 ADL 回給 NS 才會看到上線的狀態. (不過... 因為是由 MSNP9 抓 list, 所以, 如果重跑這個程式也會出現...)

另外, 就算沒把對方加入到自己的 contact list 中, 並不會妨礙傳送訊息給對方. 只要對方有把你加到他的 contact list, 允許你送訊息過去, 就可以收到訊息.

所以, 看不到上線的狀態, 只會影響對方送訊息給你 (因為要上線才允許送訊息... 如果是 OIM, 這個 bot 會不管...), 不過目前的作法, 只要重跑就會出現在 contact list 中了 (不太確定, 因為這點與實際 MSN 運作好像不同, 不過我測的結果是這樣).

需要有這功能, 急的話就自己加吧. 不急的話... 我是有寫這部份... 等下一次改版再丟出來吧.
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-03-30 12:17
twu2 你真猛! 呵呵
主題: 使用 PHP 發送 MSN 訊息
作者: Darkhero2007-03-30 12:26
twu2 你真是神!~
主題: 使用 PHP 發送 MSN 訊息
作者: hoyo2007-03-30 12:32
離題諂媚話之三:twn2 你害某些人失業了...

之前引以為傲技術在最近輪番討論後,都已經不是商業機密了

從 sockets, pcntl 到現在 MSN protocol 的實作,還有什麼是 php 做不到的呢?
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-03-30 13:36

讓我把到妹
wahahaha

--

精神不穩定,來亂的 = =
主題: 使用 PHP 發送 MSN 訊息
作者: Darkhero2007-03-30 13:37
引述: "梁楓"

讓我把到妹
wahahaha

--

精神不穩定,來亂的 = =


沒圖沒真相,交出來...
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-03-30 13:38
我列舉的是PHP 辦不到的事 ~><~~
主題: 使用 PHP 發送 MSN 訊息
作者: Darkhero2007-03-30 13:41
引述: "梁楓"
我列舉的是PHP 辦不到的事 ~><~~


那我想不只 php 辦不到....
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-30 22:12
不知道有沒有人用 1.3 版的 msnbot.php 持續跑了一天以上的 (應該說是, 用 MSNP15, 且上次做登入這個動作已經超過一天的) ? 如果有的話, 可以麻煩測試一下, 送一封 OIM (離線訊息) 試看看嗎? 看一下結果會不會成功?

發現 login 取得的 ticket 超過一天應該就會失效吧. 不確定發送 OIM 是否仍然正常. (也許應該在失效之後, 再試著重新登入, 抓取新的 ticket 吧.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-03-31 22:17
1.3 版有個問題, 是在讀取 TO: 的內容時, 如果有空白, 會連空白都帶入, 一般傳訊並不會有問題, 不過傳 OIM 會有錯誤. 如果你有碰到這個問題... 就在產生那個 .msn 檔案時, 不要在 TO: 後頭使用空白就可以避免.

另外 OIM 用的 ticket 應該一天就會失效, 也會造成無法傳送 OIM. (可能吧, 昨天看到這個, 特地等了一天再試, 結果因為上頭的問題沒測到, 只好今天再等一天看看了)
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-04-02 09:48
轉自: http://blog.teatime.com.tw/1/post/220

修改之前發送 MSN 的 php calss. 修正一些 bug, 並加上與 Yahoo 即時通互傳的功能.

檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass14.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z

異動說明:

    * 更改逾時的偵測方式, 只針對每兩個指令之間的時間來計算.
    * 對於 curl 的運作, 只有在除錯模式下才顯示 header 的內容.
    * 如果在登入 login.live.com 時, 收到 redirect 的 URL 時, 試著使用指定的 URL 再登入一次.
    * 修正在處理 .msn 檔時, 對於 TO: 的空白處理造成離線訊息無法使用的問題.
    * 修正在處理離線訊息時, 因為執行超過一天, ticket 失效, 無法傳送的問題.
    * 直接使用 MSNP15 取得聯絡人名單, 不必再透過 MSNP9 了.
    * 處理 ADD/REM (MSNP9) ADL/RML (MSNP15) 的指令, 可以自動接受別人加入名單, 並也把對方加入本身的名單中.
    * 支援 WLM 8.1 與 Yahoo 8.1 之間互相傳訊的功能 (含離線訊息).
    * 如果無法正確即時傳送訊息, 會利用離線訊息再送一次.
    * 可以讀取離線訊息, 並且回覆.
    * 處理過後的 .msn 檔案, 可以選擇不刪除而移到 backup 的目錄中.

除了 bug 的修正之後, 主要是利用 oSpy, 取得一些在 WLM 8.1 使用的 MSNP15 相關的一些 SOAP 運作方式, 所以, 目前我們可以直接利用 MSNP15 來取得聯絡人的名單, 也可以正確的新增或刪除聯絡人 (程式目前沒處理刪除的部份), 對於離線訊息的讀取, 也可以正常的運作. 另外, 也加上對於 WLM/Yahoo 之間互相傳訊的功能.

在 msnbot.php 上頭, 可以自訂函式來處理別人加入名單與移除名單的事件. 也移除利用 MSNP9 取得名單的功能. 另外把設定移到 config.php 中. 還有... 如果你有自訂處理訊息的功能, 如果傳回空字串, 就表示不用回傳訊息. 如果聯絡人中也有 bot 之後的程式, 記得排除在外, 免得 bot 之間一直互相回覆訊息. (當然, 如果你有利用這個功能來執行伺服器上的一些指令, 記得要過濾傳訊者, 注意一下安全的問題)

對了, 在 MSN 的定義中, 1 是屬於 MSN/WLM 的網路訊息. 32 是 Yahoo 即時通. 所以在收訊者的 email 上頭, 我在最後加上 @n 的東西, 來區別是屬於那一種的帳號. 如果沒有這個多出來的 @n 就表示是屬於 MSN 的帳號, 如果是 @1 也是表示屬於 MSN 的帳號. 而 @32 就表示屬於 Yahoo 即時通的帳號.
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-04-02 10:13
twu2 你真的是好樣的!
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-04-02 16:51
Bug: alias 上頭不能用空白, 會被 NS 中斷連線.
解決方法:
1. 就不要用空白吧.
2. 在 PRP 指令前, 加上一行 $alias = rawurlencode($alias);, 處理一下不允許的字元吧.
代碼: [選擇]
                  // NS: >>> PRP {id} MFN name
                    if ($alias == '') $alias = $user;
                    $alias = rawurlencode($alias);
                    $this->writeln("PRP $this->id MFN $alias");
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-04-06 19:15
轉自: http://blog.teatime.com.tw/1/post/227

修改之前發送 MSN 的 php calss. 修正一些 bug.

檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass15.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z

異動說明:

    * 更改傳輸時的逾時設定,  由 10 秒改成 2 秒. 可以加速處理的速度. 如果你有因為這個更改而無法順利使用時,  可以更改 msn.class.php 中的 $stream_timeout 變數值.
    * Alias 有空白時會有問題. 在送出 PRP 指令前, 必須對 alias 編碼.
    * 修正 sendMessage() 無法傳送到 yahoo 的問題.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-04-06 22:06
在 Google Code 開一個 project: phpmsnclass, 以後程式碼會丟到上頭去, 檔案請直接去那邊下載就可以了.
http://code.google.com/p/phpmsnclass/
主題: 使用 PHP 發送 MSN 訊息
作者: pank2007-04-07 00:23
用 PHP4 在 processMsg 部分好像有問題, 不會自動回應, PHP5 則正常,
試過 msnclass 1.4, 1.5 都是一樣狀況
PHP4, PHP5 是用以下參數編的
./configure --with-mysql --with-apxs2=/usr/local/apache/bin/apxs \
 --with-config-file-path=/usr/local/etc  --libexecdir=/usr/local/apache/libexec \
 --enable-module=so --enable-sockets --enable-pcntl --enable-mbstring \
 --with-iconv --with-gd --with-curl \
 --with-zlib --with-jpeg-dir --with-ttf --with-gettext \
 --enable-bcmath --with-mcrypt --with-mhash
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-04-07 08:51
剛剛試了一下, 請把 msnbot.php 中, 後頭那些 function, 全部都搬到前面去放.
在 PHP4 中, 把 function 寫在使用之後, 會無法呼叫. 不過在 PHP5 中並不會. (真是奇怪, 我記得順序是沒有差別的啊!)
主題: 使用 PHP 發送 MSN 訊息
作者: pank2007-04-07 19:09
的確把 function 調到前面就 OK 了, 真怪
主題: 匯整安裝資訊及問題
作者: k19512232007-05-17 13:46
感謝各位學長的開發及分享和測試
下列是我整理之前的文章,所寫的安裝程序,以方便初學者使用

感謝 twu2 學長的開發和公佈給大家使用

  在 Google Code 開一個 project: phpmsnclass, 以後程式碼會丟到上頭去, 檔案請直拉去那邊下載就可以了.
http://code.google.com/p/phpmsnclass/



感謝 paulso 學長發表環境安裝所需的套件資料

實在是太棒了, 我使用 sample.php 來試
要使用 MSNP15 就要先裝 mhash, mcrypt, 我是用 CentOS 4.4 的

引言回覆:


Site:
http://phprpms.sourceforge.net/mhash
http://phprpms.sourceforge.net/mcrypt
http://rpmfind.net/linux/rpm2html/search.php?query=libmcrypt.so.4

wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/mhash-0.9.2-1.i386.rpm
wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/php-mhash-4.3.9-3.2.1.i386.rpm

rpm -ivh *.rpm

wget ftp://rpmfind.net/linux/PLD/dists/ac/ready/i386/libmcrypt-2.5.7-6.i386.rpm
wget http://nchc.dl.sourceforge.net/sourceforge/phprpms/php-mcrypt-4.3.9-3.2.1.i386.rpm

rpm -ivh libmcrypt-2.5.7-6.i386.rpm
rpm -ivh php-mcrypt-4.3.9-3.2.1.i386.rpm


也可以利用 yum -y install mhash php-mhash
及 yum -y install libmcrypt php-mcrypt 來安裝所需要的套件



問:如何在 linux 下安裝 7-zip
答: 請在 http://www.7-zip.org/download.html 下載 7-Zip 的 linux 版本

問: 如何 在linux下使用 7-Zip 壓縮(含分割)解壓縮
答:
Linux:
語法
         7z [adeltux] [-] [SWITCH] <ARCHIVE_NAME> <ARGUMENTS>...

範例1
         #7z a file dir
範例1解說
         將dir這個目錄壓縮成file.7z,a代表壓縮的意思
範例2
         #7z a -v25m file dir
範例2解說
         將dir這個目錄壓縮成file.7z.001 file.7z.002.....,每個檔案為25M
                             
[FAQ]
怎麼解壓縮7z.001 7z.002...的檔案?
只要解壓縮7z.001就可以了,不用每個檔案都解開來

在Linux平台底下我該怎麼解壓縮7z的檔案?
先安裝一份p7zip,然後執行7z x file.7z解壓縮你要的檔案

在Windows平台底下我該怎麼解壓縮7z的檔案?
安裝7-Zip,或者其它任何支持7z的壓縮軟件,比如:WinRAR

參考來源:
http://www.7-zip.org/zh-cn/7z.html
http://zh.wikipedia.org/wiki/7z



感謝 twu2 學長寫的安裝說明

安裝說明:

* 建立下面的目錄:
代碼:
mkdir /var/spool/msnbot
mkdir /var/spool/msnbot/log
mkdir /var/spool/msnbot/spool
chmod 777 /var/spool/msnbot/spool
chmod o+t /var/spool/msnbot/spool


* 把 config.php , msnbot.php , msnbot.sh 與 msn.class.php 放到 /var/spool/msnbot 的目錄下頭, 把 msnbot.sh 設成可執行:
代碼:
chmod +x /var/spool/msnbot/msnbot.sh


* 修改 msnbot.php 的內容, 如果有必要, 可以修改 processMsg() 的內容, 改成你自訂的處理方式.
* 使用 msnbot.sh 做成啟動的 script, 讓 msnbot.php 程式在開機之後就執行.
* 如果有需要傳送訊息, 直接在 /var/spool/msnbot/spool 目錄下, 產生一個副檔名為 .msn 的文字檔, 第一行的內容是:
代碼:
TO: email1,email2


表示要接受訊息的使用者列表. 第二行之後是所要送出的訊息. 然後把檔案的屬性改成 0666. 可以參考 msnsendmsg.php 的做法.

詳細的內容... 請自行參考程式碼吧.

本文同步發表於: http://blog.teatime.com.tw/1/post/218


問: 如何設定發送msn的帳號
答:
設定發送程式使用的 MSN 帳號及密碼,請編輯 confg.php 設定帳號/密碼/顯示名稱等資訊,
再配合 WEB2MSN 及 WGET 指令,就可以只要一台電腦安裝,所有的機器都可以發MSN的訊息通知
利用 /var/spool/msnbot/msnbot.sh start 指令啟動 msbbot 程式監控 /var/spool/msnbot/spool 目錄



感謝 pank 學長發佈的 Web2Msn 配合使用更方便
用這個程式做了一個 WEB2MSN http://pank.org/msn/
Source http://pank.org/msn/web2msn.tgz
建議再加一個功能, 當 user 新加入 MSN bot 為連絡人時,
MSN bot 應該會收到一個確認的訊息, 若能自動回應, 就很讚了



感謝 twu2 解決在 php4 下使用的問題 , 在 php4 執行須要作下列修改
剛剛試了一下, 請把 msnbot.php 中, 後頭那些 function, 全部都搬到前面去放.
在 PHP4 中, 把 function 寫在使用之後, 會無法呼叫. 不過在 PHP5 中並不會. (真是奇怪, 我記得順序是沒有差別的啊!)



當完成上列的安裝程序後,就可以利用 網頁 或者 wget 指令 在任何一台機器,
發送訊息通知,到指定的 MSN 帳號了



另外請問 pank 學長你的網頁 http://pank.org/msn/ 上有可以查詢英文和中文的翻譯,
可否提供一下要如何安裝及設定



還有請問一下 abelyang 學長,你秀的操作結果,可以提供部份的指令使用,
是否方便提供要如何安裝及設定
主題: 使用 PHP 發送 MSN 訊息
作者: abelyang2007-05-17 14:01
引用

還有請問一下 abelyang 學長,你秀的操作結果,可以提供部份的指令使用,
是否方便提供要如何安裝及設定

我用的不是 twu2 兄的方式,我的是 perl 版本

command 的送法並不難, twu2 兄講的那個網站都要提到
至於像 system call 這種只要自己多加工並不難
去 call ping , df ..再把結果當成 msg 等傳回來而以
主題: 使用 PHP 發送 MSN 訊息
作者: pank2007-05-17 22:41
查字典功能是用 pyDict 的字典檔, 在 processMsg 內加條件, 看到是 q 開頭的, 就去呼叫查字典的 script
代碼: [選擇]
   switch (strtolower(substr($msg,0,1))) {
        case 'q':
            exec("/usr/local/bin/pydict.sh ".substr($msg,2), $arr);
            $n=count($arr);
            if ($n>20) $n=20;
            $return_msg="Query result:\r\n";
            for ($i=0;$i<$n;$i++) $return_msg.=$arr[$i]."\r\n";
            return $return_msg;
            break;
        case 'h':
            return "http://pank.org/msn/\r\nq word for English<->Chinese translation";
            break;
        default:
           return "Hello! I'm Pank's MSN bot. http://pank.org/msn/";
    }

pydict.sh 很簡單, 只用到 grep 而已
代碼: [選擇]
#!/bin/bash
if [ -z $1 ] ; then
    echo "`basename $0` {word}"
else
    cd /usr/local/share/pydict
    if echo ${1:0:1} | grep -iq [a-z] ; then
        grep -i ^$1= ${1:0:1}.lib
    else
        grep -ih $1 *.lib
    fi
fi
主題: 使用 PHP 發送 MSN 訊息
作者: k19512232007-05-21 16:53
感謝 abelyang 學長的回覆

非常感謝 pank 學長的分享
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-06-07 16:26
更新 phpmsnclass (http://code.google.com/p/phpmsnclass/) 版本為 1.6.

異動記錄:

    * 修正登入時被 redirect 但 http 的傳回值仍為 200 時, 會無法登入的問題.
    * 支援 clientid, 允許接受動畫快遞等訊息. 但不回覆.
    * 若 $use_ping 為非 0 數字時, 會每隔 $use_ping 的秒數, 送出 PNG 指令.
    * 讓 msnbot.php 與 msn.class.php 在 windows 下運作. (在 php 5.2.3 測試)
    * 在收到 RML 指令時, 會把該資料於聯絡人清單中移除.

檔案請到 Google Code (http://code.google.com/p/phpmsnclass/downloads/list) 抓取.
主題: 使用 PHP 發送 MSN 訊息
作者: 梁楓2007-06-07 16:28

快要可以做出完整的Web MSN 了
twu2真是好樣的
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-06-07 16:34
webmsn 需要的是大量的 javascript (AJAX) 技巧, 這個 class 只能做後端的處理.
兩個的方向有些不同.

需要用 webmsn 的, 可以考慮用 qmsn 來改.
主題: 使用 PHP 發送 MSN 訊息
作者: kang8122007-06-15 15:12
謝謝 twu2 無私的分享!
有給個問題回報一下...

1. 在  debug log 中,會有名單中某些聯絡人會持續送 UBX 封包過來
2. 如果聯絡人對 bot 使用上傳檔案或非文字訊息的動作,function 內雖有用 ignore 的方式 reject , 但是看 debug.log , 其實對方還是有持續送 RNG 的封包過來, 經過測試,必須那位聯絡人登出才會停止發送 RNG (就算 bot 登出在登入,對方只要不登出,照樣送)

以上兩個問題回報一下!(這兩個問題對 bot 執行是不會有任何影響的囉)
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-06-15 15:32
1. UBX 是用來傳送傳送個人訊息與目前播放的歌曲, 所以只要有人更改個人訊息, 或更換所聽的音樂, 就會送這個訊息過來.
2. 請抓 Google Code 上頭 SVN 的版本, 或等 1.7 版發表 (也許這幾天吧, 因為改了這個也快一星期了, 再來應該也沒什麼好改的). 因為那些動作會送 p2p 的訊息, 如果沒有正確回應, 伺服器就會一直送過來.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-06-17 16:20
更新 phpmsnclass (http://code.google.com/p/phpmsnclass/) 版本為 1.7.

異動記錄:

    * clientid 預設改為 0x7000800C, 可以在 MSN() 的第四個參數傳入.
    * 判斷並忽略 text/x-mms-animemoticon 訊息.
    * 判斷並忽略 application/x-ms-ink 訊息.
    * 處理 application/x-msnmsgrp2p 訊息, 在必須回應的時候回覆, 否則忽視.
    * 如果在 SB 中不處理該訊息, 則不寫入逾時的記錄.

檔案請到 Google Code (http://code.google.com/p/phpmsnclass/downloads/list) 抓取.
主題: 使用 PHP 發送 MSN 訊息
作者: 湯姆貓2007-10-31 13:11
感謝twu2的無私.....

1.請問一下在iptables上需要開放那些port才能傳訊息,
因為小弟目前可以使用sample.php傳訊息,
但必須先將iptables停掉.

2.在實作msnbot時,一直無法成功.
[root@www msnbot]# ./msnbot.sh start
Starting MSN bot: msnbotExtension '/var/spool/msnbot/msnbot.php' not present.

有人遇過相同的問題嗎??
主題: 使用 PHP 發送 MSN 訊息
作者: 湯姆貓2007-10-31 13:45
第一個問題解決了~~~把1863Port打開就行了.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-10-31 13:59
1. TCP 80,443,1863 (基本是這三個吧, 如果沒記錯)
2. 我那幾個 .php 沒有 Extension 這個字, 應該是你的 shell 的錯誤訊息? 你的 msnbot.php 是放在 /var/spool/msnbot/ 下頭嗎? 且是可以執行的嗎?
主題: 使用 PHP 發送 MSN 訊息
作者: 湯姆貓2007-10-31 14:13
[root@www msnbot]# pwd
/var/spool/msnbot
[root@www msnbot]# ls -al
總計 196
drwxr-xr-x  5 root root   4096 10月 31 14:10 .
drwxr-xr-x 15 root root   4096 10月 31 12:19 ..
drwxr-xr-x  2 root root   4096 10月 31 12:19 backup
-rw-r--r--  1 root root   2470  6月 16 13:20 changelog.txt
-rw-r--r--  1 root root    600 10月 31 13:59 config.php
drwxr-xr-x  2 root root   4096 10月 31 14:09 log
-rwxr-xr-x  1 root root   6947 10月 31 14:10 msnbot.php
-rwxr-xr-x  1 root root    444  4月  6  2007 msnbot.sh
-rw-r--r--  1 root root 139021  6月 16 13:18 msn.class.php
-rw-r--r--  1 root root   1029 10月 31 12:58 msnsendmsg.php
-rw-r--r--  1 root root   1086 10月 31 13:43 sample.php
drwxrwxrwt  2 root root   4096 10月 31 12:19 spool
-rw-r--r--  1 root root    101  4月  6  2007 test.msn
[root@www msnbot]# ./msnbot.php
Extension './msnbot.php' not present.
[root@www msnbot]# php -f msnbot.php
[root@www msnbot]#

原本用php -f msnbot.php時會出現Call to undefined function pcntl_fork();
後來重編php加上--enable-pcntl後就都沒出現錯誤訊息了.
主題: 使用 PHP 發送 MSN 訊息
作者: 湯姆貓2007-10-31 14:18
剛才發現用php -f msnbot.php後
另一台的MSN就發現他有上線了.

直接下./msnbot.php
[root@www msnbot]# ./msnbot.php
Extension './msnbot.php' not present.
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-10-31 14:39
檔案是 DOS 格式? 換行字元不對?
php 不在 /usr/bin/php ?
主題: 使用 PHP 發送 MSN 訊息
作者: 湯姆貓2007-10-31 14:54
Bingo~~ 我使用dos2unix將msnbot.php轉換一下....
就通通正常了~~

感謝twu2~~~
主題: 使用 PHP 發送 MSN 訊息
作者: twu22007-11-11 10:35
更新 phpmsnclass (http://code.google.com/p/phpmsnclass/) 版本為 1.8.

異動記錄:

    * 修正 sendMessage() 中的 $re_login undefined 錯誤.
    * 忽略所有 text/x- 與 application/x- 的訊息, 只處理已知的訊息.
    * 修正在收到 NS 送來的 XFR 訊息, 要求重新連線時, 會重送前一個訊息的問題.
    * 修正 $hdr_TotalDataSize1 與 $hdr_TotalDataSize2 undefined 的錯誤.
    * 新增個人訊息 (PSM) 的支援.
    * 修改 doLoop() 的參數, 改用陣列來傳送參數, 方便以後新增參數時的處理.
    * 有多個收件者時, 不再使用群組發送的方式, 改為每個收件者使用獨立的 switchboard 來處理.
    * sendMessage() 的 $aTo 參數, 如果只有一個收件者時, 允許使用字串而非陣列.
    * 修正接收到 Yahoo 訊息的換行問題.
    * 訊息大小 (含檔頭) 目前已經被限制為 1664 (WLM) 位元組與 518 (YIM) 位元組. 超過這個大小時, 可能會有錯誤, 而收件者也無法收到訊息. 如果有大於這個限制的訊息, 會分開傳送.  (不過 YIM 在接收時, 有時順序會與發送順序不一樣)

檔案請到 Google Code (http://code.google.com/p/phpmsnclass/downloads/list) 抓取.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: jaymsa2007-12-19 16:00
各位前輩:
小弟參照此篇,想做個主機監控+MSN通知!!
目前寫了一小段Shell,如下:
代碼: [選擇]
#/bin/sh
#$Ping URL
URL="192.168.0.1"
TO="TO:xxx@msn.com"
TIME=`date +%Y年%m月%d日%H時%M分%S秒`
MSG="PING BAD! Cool"
echo "$TIME"
TTL=`ping -c 200 -w 2 $URL | head -2 | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 3 | cut -d '=' -f 2`
if [ "$TTL" > "0" ]; then
    echo "icmp="$icmp
    echo "TTL="$TTL
    echo "URL="$URL
  echo "I="$i
    echo "Good"
        else
    echo "icmp="$icmp
    echo "TTL="$TTL
    echo "URL="$URL
    echo "I="$i
    echo "Bad"
         `echo $TO > /var/spool/msnbot/spool/msn.msn | echo $MSG  $TIME >> /var/spool/msnbot/spool/msn.msn | chmod 666 /var/spool/msnbot/spool/msn.msn`
fi
想請教兩個問題,
Q1
因為我有看到msnbot.php此檔說明,要傳輸中文字的話要使用UTF8,那小弟該如何轉檔,iconv?小弟有測試過,不過因為不知道預設產生的msn.msn此檔是何種編碼,所以試不出來,請問我如果想傳輸中文該如何改寫?
Q2
此程式有規定傳檔的格式是:
代碼: [選擇]
TO:xxx@msn.com
傳輸內容
不過小弟寫入\n無法換行,不知道這部分要如何寫,所以小弟用了比較笨的方式,分兩次給,也請教此部分要如何改寫?或是各位前輩有更好的建議?之後我還想針對各個服務來監測,所以問題會很多,請多加包函.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22007-12-19 16:29
1. 看你要直接輸入 UTF-8 的中文還是用 iconv 轉碼都可以. 如果都不會, 那就用英文就好了. 反正 MSN 只能用 UTF-8 來傳就對了. 至少英文是 UTF-8 的子集, 一定可以用.
2. 直接 echo 引號內的字串分好幾行寫, 是後一行再加上引號就可以. 如果不行... 也許你不是用 linux 上頭的 bash 吧. 我也不知道你的 shell 要怎麼用... 自己想辦法處理吧, 不然就用 perl 或 php 之類的程式去產生檔案吧.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: jaymsa2007-12-20 09:08
1. 看你要直接輸入 UTF-8 的中文還是用 iconv 轉碼都可以. 如果都不會, 那就用英文就好了. 反正 MSN 只能用 UTF-8 來傳就對了. 至少英文是 UTF-8 的子集, 一定可以用.
2. 直接 echo 引號內的字串分好幾行寫, 是後一行再加上引號就可以. 如果不行... 也許你不是用 linux 上頭的 bash 吧. 我也不知道你的 shell 要怎麼用... 自己想辦法處理吧, 不然就用 perl 或 php 之類的程式去產生檔案吧.
謝謝...關於於轉碼的部分我終於試出來了,再請教個問題請問msnbot.php這個檔案的作用是?msnbot.sh呼叫msnbot.php來處理傳送訊息嗎?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232008-08-08 14:40
twu2跟網路上的朋友們大家好
我叫做小包
我有一個問題請教
我是使用Windows平台用的事Appserv
使用
$msn = new MSN('MSNP9', true);
通訊協定一切正常

但當我想嘗試用
$msn = new MSN('MSNP15', true);
就會出現錯誤訊息如下msn.class.php
We need mhash module for MSNP15!
We need mcrypt module for MSNP15!

我有爬文~我也真的把php.ini前面的分號取消
extension=php_mcrypt.dll
extension=php_mhash.dll
重開過Apache

但卻沒出現mcrypt或是mcrypt的相關字眼訊息
請問這個部份要怎麼在WIN平台上解決會比較好了
謝謝大家 
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22008-08-08 16:01
載入 php_mcrypt.dll 與 php_mhash.dll 之後, 再跑都沒有任何訊息了嗎?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232008-08-08 18:31
是的
phpinfo裡面就沒有出現這兩個模組的相關設定
比方是mbstring載入後
就會出現一個mbstring的模組資訊在phpinfo中
但是mhash跟mcrypt沒有諸如此類得訊息
我也故意把msn.class.php的以下判斷敘述拿掉
if ($protocol != 'MSNP9' && !function_exists('mhash')) {
            if ($protocol == 'MSNP15') die("We need mhash module for $protocol!\n");
            $protocol = 'MSNP9';
        }
        if ($protocol != 'MSNP9' && !function_exists('mcrypt_cbc')) {
            if ($protocol == 'MSNP15') die("We need mcrypt module for $protocol!\n");
            $protocol = 'MSNP9';
        }
想當然而螢幕上也會顯示錯誤訊息
Fatal error: Call to undefined function mhash() in C:\AppServ\www\msnclass\msn.class.php on line 1041
這一行是一個function
function derive_key($key, $magic)
    {
        $hash1 = mhash(MHASH_SHA1, $magic, $key);
        $hash2 = mhash(MHASH_SHA1, $hash1.$magic, $key);
        $hash3 = mhash(MHASH_SHA1, $hash1, $key);
        $hash4 = mhash(MHASH_SHA1, $hash3.$magic, $key);
        return $hash2.substr($hash4, 0, 4);
    }
所以我還是覺得這兩個module我沒有裝好
所以才會請教您這個問題
不好意思打擾到您了
謝謝

另外
http://linux.tnc.edu.tw/techdoc/php/php_big5/ref.mhash.html
網頁中有說這個要怎安裝
You need to compile PHP with the --with-mhash[=DIR] parameter to enable this extension. DIR is the mhash install directory.
目前還不知道怎麼用~還在研究
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22008-08-08 19:46
php -m
看有沒有那些 module.
如果沒有
php --ini
看看有沒有什麼錯誤.

對了, 官方網站下載的 php.ini 的裡頭 extension_dir 是設成 ./ 也就是目前的目錄, 並不是 ext 那個目錄. 看你是要把 extension_dir 改成 ./ext/ 或是把用到的那幾個 module 的 dll 與 php.exe 放同一目錄吧.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232008-08-11 12:12
TRY過了~還是沒有用說~真是奇怪~這一點Appserv真的怪怪的
請問您是否是使用WIN的作業系統呢
您是否可以提供給我一下
php_mcrypt.dll
php_mhash.dll
這兩個檔案呢~以前也有過經驗安裝別的module怎樣都安裝不起來
原來是module檔案的版本不匹配PHP的版本(不同的module版本搭配不同的PHP版本)
找到適合PHP的版本的MODULE之後就OK了
所以我再猜想是否也有可能相同的一個原因
當然都只是在猜測
不過真是謝謝您的回答
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22008-08-11 12:30
請到 php 官方網站抓 win32 的版本. 那是我在 windows 下頭測試時用的版本.
不需要搭配 apache 使用, 直接用 php.exe 跑就可以看到結果了.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232008-08-11 13:08
謝謝您的回覆
我已經成功解決了這個問題
在Appserv上
算是瞎矇的
分享給大家
步驟一(php.ini)(記得存檔)
將;拿掉所以變成以下這樣
extension=php_mcrypt.dll
extension=php_mhash.dll

COPY
C:\AppServ\php5\libmhash.dll
C:\AppServ\php5\libmcrypt.dll
TO
C:\WINDOWS\system32
底下

重開APACHE
看看INFO資訊
好了^^

PS
因為這樣離線訊息我這邊也都可以收到了唷
感謝您的教導~謝謝您
主題: phpmsnclass 1.9
作者: twu22008-10-23 23:38
更新 phpmsnclass (http://code.google.com/p/phpmsnclass/) 版本為 1.9.

異動記錄:

    * 修正 MSNP9 只有在除錯模式才能登入的問題. (r22, 2007/11/14)
    * 修正 PHP notice 訊息: undefined offset of $aMSNUsers in 'XFR' of doLoop(). (r23, 2007/12/21)
    * 修正 MSNP15 密碼使用特殊字元的編碼問題. (r23, 2007/12/21)
    * 修正密碼長度問題, 密碼只允許最長 16 個字元. (r23, 2007/12/21)
    * 修正 PHP notice 訊息: preg_match(): Unknown modifier ']' in getOIM_maildata(). (r24, 2007/12/26)
    * 修正變數名打錯的問題: $precess_file. (r25, 2008/01/01)
    * 修正 Google Code Issue 11: Undefined property: $oim_send_soap on line 2872. (r26, 2008/01/09)
    * 在 msnbot.php 中新增定時通知的功能. (r27, 2008/03/04)
    * 新增 addContact() 函式, 主動詢問使用者是否允許加入他的聯絡清單中. (r29, 2008/03/11)
    * 修正 sendOIM() 中, 可能同時產生 LockKeyChallenge 與 RequiredAuthPolicy 錯誤的問題. (r30, 2008/10/23)

檔案請到 Google Code (http://code.google.com/p/phpmsnclass/downloads/list) 抓取.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232008-11-13 16:59
謝謝您新文章的分享
小包跟您說聲謝謝
PS
之前有一次把做好的MSN機器人功能放到公司網站上使用(配合網站發送訊息)
結果突然變成怎樣訊息都發送不出去
後來才知道那時候全球MSN大斷線
所以這功能也暫時失效
真是給它有點無言^^
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: Darkhero2008-11-20 19:06

一文多發...視為惡意廣告
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-01-08 21:15
最近 MS 的 server 好像加上離線訊息的長度限制, 所以如果你有用的 OIM 的話, 在下一版推出前 (也許要一年半載的吧), 請自行抓請 Google Code 裡頭最新的 SVN 版本出來用吧.

似乎是今年才有的限制, 至少我記得當初測試時, 3000 個字仍然可以傳. 現在大約 315 bytes 左右就不行了.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: Steven仔2009-03-09 11:38
twu2神.. 我想問問如何可以讓人們自己打他的電郵.. 之後自動加入我的msn中?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-03-09 11:58
請用 MSNP15 的協定, 只要對方加入你, 也就會自動也把對方加入.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: Steven仔2009-03-09 12:21
請用 MSNP15 的協定, 只要對方加入你, 也就會自動也把對方加入.
其實如何用MSNP15 的協定? 我不太會..
我在你的sample.php改了MSNP15之後.. 出了以下的ERROR

#!/usr/bin/php -Cq We need mhash module for MSNP15!
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: 湯姆貓2009-03-09 15:03
We need mhash module for MSNP15!
這兒不就寫了~~~
mhash裝了嗎?????
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: Steven仔2009-03-09 15:05
We need mhash module for MSNP15!
這兒不就寫了~~~
mhash裝了嗎?????
明白了.. 我試一試
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: Steven仔2009-03-10 11:31
我已安裝了 mhash.. 但也不成功  :'(
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: Steven仔2009-03-11 10:53
我想啟動時msnbot.sh時.. 出現了以下問題.. 是不是我留了什麼?

代碼: [選擇]
Starting MSN bot: msnbotPHP Warning:  PHP Startup: Unable to load dynamic librar                                                                                                 y '/usr/lib/php/modules/mcrypt.so' - /usr/lib/php/modules/mcrypt.so: cannot open                                                                                                  shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/                                                                                                 mhash.so' - /usr/lib/php/modules/mhash.so: cannot open shared object file: No su                                                                                                 ch file or directory in Unknown on line 0
Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.

主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232009-04-16 18:15
我已安裝了 mhash.. 但也不成功  :'(

請看我在第#73發的訊息
拜託麻煩爬文一下唷
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: ricky2009-07-17 17:07
最近把twu2兄的msnclass做了大改版
加上大頭貼以及表情符號的支援
圖片傳輸必須使用P2P模式
由於MSNP9並不支援P2P
v2版本取消了MSP9的支援 僅支援php5
程式必須以daemon的方式執行,會自動讀取spool目錄底下的*.msn檔案傳送
目前還在bug多多版
等穩定一點後會在補上使用範例以及說明文件
 ;D

有興趣常鮮的人請抓取svn版本
http://code.google.com/p/phpmsnclass/source/browse/#svn/trunk/phpmsnclassv2
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-07-25 13:52
似乎由 7/21 開始, MS 的 server 伺服有些更改, 在 MSNP15 的使用上, 並不會在 USR 指令登入之後送出 SBS 的指令, 這會造成 phpmsnclass 在登入後等待 SBS 的指令而無後續的動作.

所以目前把程式修改一下, 直接在 USR 回應後就處理後續的動作, 不再依靠 SBS 指令處理.

改了之後看起來是正常了. 有使用的朋友, 請更新到 r38 或之後的版本.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: ricky2009-07-27 10:18
目前正在改寫Web Service部份
改用原本php5內建的SOAP來處理
完成後再上傳到svn
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: herb1234562009-09-09 20:34
有人有興趣一起弄個web版msn嗎?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-09-09 23:27
web 版? MS 自己就有了, 想不出有自己弄的必要吧.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: herb1234562009-09-10 02:10
好像也是~~
只是剛才看到這篇文章有股無聊的衝動罷了 ::)
哈哈~~當我沒說
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2009-12-09 18:30
我看不到机器人在线?请问是什么问题?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-12-10 15:12
版本太舊, 協定不對.... 要看 log 才會知道.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2009-12-10 16:19
[attachment=1]
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2009-12-10 16:21
是debug.log 吗 ?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-12-10 17:33
到 google code 去抓 svn 最新的版本 (或至少是 r38 之後的版本).
http://code.google.com/p/phpmsnclass/source/checkout
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2009-12-10 18:25
我已经去抓 svn 最新的版本 (r45).

phpmsnclass changelog:
1.10 20xx/xx/xx

我还是看不到机器人在线?请问是什么问题?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22009-12-11 00:12
把 log 再丟上來看吧.
如果還是停在同樣的地方.... 會不會是沒更新到 msn.class.php? 還是用舊的版本?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2009-12-11 09:03
twu2 你好。我已经解决问题了。谢谢你的热心帮忙。
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232010-01-15 01:57
您好
我是小包
好久沒碰MSN發送訊息這塊

因為看到有新版所以抓了phpmsnclass_1.9.7z
並且也設定好了
extension=php_mcrypt.dll
extension=php_mhash.dll
兩個模組

但執行sample.php之後(我已經有把機器人的帳密設定好了-用的是MSNP15除錯模式)
卻出現以下的訊息
Timeout, maybe protocol changed! NS: >>> OUT Done!
後來我就把$timeout加大變成100
因此那段話消失了
但MSN訊息還是沒收到..我是透過"本機端localhost"來發的..這樣會有關係嗎??
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22010-01-15 08:41
請抓 google code 裡頭 SVN 的最新版本.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: bau7201232010-01-15 13:59
謝謝您
我再試試看
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cui_fc@163.com2010-03-25 13:23
在windows下怎么样使机器人持久在线?
是不是配置msnbot.sh?需做怎样的修改?
谢谢解答!
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: §そし嵐§2010-07-14 13:41
感謝twu2~~這篇文章真是太讚啦!!
也多虧twu2~~我終於解決問題嚕~~~
感謝啦~~~
 :D :D :D ;D ;D ;D ;D ;D ;D ;D ;D :D :D :D ;D ;) ;) ;) ;) ;) :) :) :) :) :) ;) ;) ;)
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22011-02-17 14:57
v1.10 released, 主要是修正這幾天無法登入的問題. (因為很久沒動了, 就乾脆直接 release 了)
請自己到 Google Code 去抓吧.

主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2011-06-23 09:50
twu2, 你好。
最近msnbot 好想有问题. 我跟msnbot讲话,没有回复我。
我看debug.log,msnbot有发送给我。可是,我没有收到。
请问有什麽问题吗?
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22011-06-23 11:18
你的 log 看不出有什麼錯.
我自己剛試一下, 在我的機器上相同的 log 流程, 還是可以正常運作.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: cslimcom2011-06-23 11:53
你好。我找到问题了。但是不知道怎样解决。
如果發送www.google.com给msnbot,msnbot不会回复。

之后,试其他的url,都不能回复。
似乎msn有过滤。
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22011-06-23 20:51
url 用官方的 WLM client 可以送, 也可以收.
不過用這個 msnbot, 可以收但不能送. 目前還不知道怎麼解決.
主題: 回覆: 使用 PHP 發送 MSN 訊息
作者: twu22011-06-23 20:56
這幾天離線訊息不能使用, 原本用來發送 OIM 的 ows.messenger.msn.com 被 microsoft 改到 127.0.0.1, 看起來是不能用這方法來送了 (目前所有非官方的 client, 應該都是用這方法, 應該也都是不能用了).

WLM 官方的 client 還可以用, 查了一下, 發現是用 UUM 送, 不過在 MSNP15 會有錯, 所以程式改到 MSNP18, 目前看起來是正常的.
由於 MSNP9 好像也不能用了, 所以就把 MSNP9/MSNP15 的支援都移除了, 目前只能用 MSNP18.

有需要的自己到 google code 的 svn 去抓新的版本回來用. (r53)
主題: Re: 使用 PHP 發送 MSN 訊息
作者: twu22011-11-15 11:14
更新 phpmsnclass 版本為 1.11.

異動記錄:

    移除 MSNP9 (伺服器不允許連線) 與 MSNP15 (無法使用離線訊息) 的支援. (r53, 2011/06/24)
    支援 MSNP18 (目前只支援這協定, 任何傳入協定的參數會被忽略). (r53, 2011/06/24)
    使用 UUM 指令傳送離線訊息 (SOAP 的方法已經無法使用了). (r53, 2011/06/24)
    針對 switchboard 使用不能的交易序號. (r54, 2011/06/24)
    修正在 switchboard 會有多餘 CAL/JOI 回應的處理. (r54, 2011/06/24)
    在離線訊息的 header 加上 'Dest-Agent:'. (r55, 2011/06/25)
    修正 sendMessage() 逾時問題. (r56, 2011/06/28)
    修正某些 typo. (r57, 2011/06/29)
    修正 issue 74, 無法取得聯絡人清單. (r58, 2011/11/10)
    再次修正 issue 74 (前一個修正只有在除錯模式下有作用), 並檢查回傳的 location, 避免造成迴圈. (r59, 2011/11/10)

檔案請到 Google Code 抓取.
主題: Re: 使用 PHP 發送 MSN 訊息
作者: twu22011-11-22 19:51
訊息含有 URL 不能寄送的問題,  請抓 r60 的版本回去試看看.