#!/usr/bin/perl -w use strict; use warnings; use Net::XMPP; { # monkey-patch XML::Stream to support the google-added JID package XML::Stream; no warnings 'redefine'; sub SASLAuth { my $self = shift; my $sid = shift; my $first_step = $self->{SIDS}->{$sid}->{sasl}->{client}->client_start(); my $first_step64 = MIME::Base64::encode_base64( $first_step, "" ); $self->Send( $sid, "" . $first_step64 . "" ); } } my $username = shift or die "$0: username needed"; my $password = shift or die "$0: password needed"; my $resource = shift or die "$0: client handle needed"; my $recipient = shift or die "$0: need recipient address"; my $message = shift or die "$0: need message to send"; my $conn = Net::XMPP::Client->new; my $status = $conn->Connect( hostname => 'talk.google.com', port => 5222, componentname => 'gmail.com', connectiontype => 'tcpip', tls => 1, ); die "Connection failed: $!" unless defined $status; my ( $res, $msg ) = $conn->AuthSend( username => $username, password => $password, resource => $resource, # client name ); die "Auth failed ", defined $msg ? $msg : '', " $!" unless defined $res and $res eq 'ok'; $conn->MessageSend( to => $recipient, resource => $resource, subject => 'message via ' . $resource, type => 'chat', body => $message, );