메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

재버(Jabber) 즐기기 - 2부

한빛미디어

|

2001-04-17

|

by HANBIT

9,102

메시지 보내기 메시지를 생성했으니 이제 보내도록 하자. 우리가 지금 하고 있는 일의 속성을 내포하고 있기 때문에 이 두 액션(생성과 보내기)은 별개의 과정으로 봐야 한다. ‘재버 즐기기 1부’에서 재버 메시지를 설명하면서 “컨테이너(container)"라는 용어를 사용했다. 이제 컨테이너와 이의 컨텐츠를 생성했으므로, 지금부터는 생성한 컨텐츠를 보내도록 하자. 컨테이너를 보낼 때에는 Net::Jabber::Message 클래스의 매소드가 아니라, Net::Jabber::Client 클래스를 사용하는데, $connection 스칼라에 이미 우리의 스크립트로 나타나 있기 때문이다. 즉, 메시지는 우리의 클라이언트가 재버 서버에 보낸 데이터 꾸러미이다. 다음을 보자:
$connection->Send($message);
접속 종료 메시지를 보냈으므로 이젠 접속을 종료하자. 접속을 종료하려면 Disconnect()메소드를 사용다. 이는 XML::Stream 클래스의 Disconnect() 메소드를 보호하는 필수적인 과정이며, 이때의 XML::Stream 클래스는 XML 닫기 태그를 전송하여 XML Stream(재버 XML은 “stream" 모드로 전송한다)을 종료하며 소켓을 닫는다.
$connection->Disconnect(); exit;
요약 여기에 지금까지 작성했던 모든 스크립트와 각주를 나열했다.
# notify.pl
# Version 1
# E-mail notification script to Jabber client

use strict;
use Mail::Internet;
use Net::Jabber;

# Declare our constants
# ---------------------
use constant RECIPIENT => "dj@yak";      # Jabber ID to be notified
use constant SERVER    => "yak";         # Jabber server to connect to
use constant PORT      => 5222;          # Port to connect to
use constant USER      => "notify";      # user this script connects as
use constant PASSWORD  => "notify";      # password associated with USER
use constant RESOURCE  => "perlscript";

# Read and parse email and extract header info
# --------------------------------------------
my $header = Mail::Internet->new(*STDIN)->head()->header_hashref();
chomp $header->{$_}[0] foreach keys(%{$header});

# Create a new Jabber client and connect
# --------------------------------------
my $connection = Net::Jabber::Client->new();
$connection->Connect( "hostname" => SERVER,
                      "port"     => PORT )
   or die "Cannot connect ($!)n";

# Identify and authenticate with the server
# -----------------------------------------
my @result = $connection->AuthSend( "username" => USER,
                                    "password" => PASSWORD,
                                    "resource" => RESOURCE );
if ($result[0] ne "ok") {
  die "Ident/Auth with server failed: $result[0] - $result[1]n";
}

# Create a message and build it up
# --------------------------------
my $msg = Net::Jabber::Message->new();
$msg->SetMessage( "to"      => RECIPIENT,
                  "subject" => "Email from $header->{From}[0]",
                  "body"    => join("n", "Subject: $header->{Subject}[0]",
                                          "Date: $header->{Date}[0]") );
# Send the message
# ----------------
$connection->Send($msg);

# Disconnect from the Jabber server
# ---------------------------------
$connection->Disconnect();

exit;
맺음말 아주 놀랍게도 이제 재버가 작동한다. 그림 5에 스크립트로 발송된 메일 알림 공지가 도착했다는 것이 나타나 있다:


그림 5: 내 WinJab 클라이언트에 도착한 공지

이는 단지 하나의 예에 불과하며, 한계점도 많다. 먼저 RECIPIENT 값을 바꿀 수 없다. 그래서 명령행으로 RECIPIENT 값을 바꿔서 사용자의 프록메일 레시피에 다음과 같은 것을 입력하는 기능은 지원되지 않는다:
:0 c | ~/notify.pl -n qmacro@jabber.org
게다가 무엇인가 잘못되면, 스크립트는 자동으로 죽어 버린다. 그러므로 만약 설정(혹은 재버 서버)에 무엇인가 잘못되었다면, 이를 찾아내는 일 또한 어렵다.
TAG :
댓글 입력
자료실

최근 본 상품0