]> git.somenet.org - irc/bugbot.git/blob - lib/Mails.pm
some old base
[irc/bugbot.git] / lib / Mails.pm
1 # -*- Mode: perl; indent-tabs-mode: nil -*-
2 #
3 # The contents of this file are subject to the Mozilla Public
4 # License Version 1.1 (the "License"); you may not use this file
5 # except in compliance with the License. You may obtain a copy of
6 # the License at http://www.mozilla.org/MPL/
7 #
8 # Software distributed under the License is distributed on an "AS
9 # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10 # implied. See the License for the specific language governing
11 # rights and limitations under the License.
12 #
13 # The Original Code is the Bugzilla Bug Tracking System.
14 #
15 # The Initial Developer of the Original Code is Netscape Communications
16 # Corporation. Portions created by Netscape are
17 # Copyright (C) 1998 Netscape Communications Corporation. All
18 # Rights Reserved.
19 #
20 # Contributor(s): Harrison Page <harrison@netscape.com>
21 #                 Terry Weissman <terry@mozilla.org>
22 #                 Ian Hickson <mozbot@hixie.ch>
23
24 package Mails;
25 use strict;
26 use Carp;
27
28 # User must declare the following package global variables:
29 #  $Mails::owner = \'e-mail address of owner';
30 #  $Mails::smtphost = 'name of SMTP server';
31 #  $Mails::debug = \&function to print debug messages # better solutions welcome
32
33 # send mail to the owner
34 sub mailowner {
35     my ($subject, $text) = @_;
36     &$Mails::debug('I am going to mail the owner!!!');
37     return &sendmail($$Mails::owner, $0, $subject, $text);
38 }
39
40 sub RFC822time {
41     # Returns today's date as an RFC822 compliant string with the
42     # exception that the year is returned as four digits.  In my
43     # extremely valuable opinion RFC822 was wrong to specify the year
44     # as two digits.  Many email systems generate four-digit years.
45
46     # Today is defined as the first parameter, if given, or else the
47     # value that time() gives.
48
49     my ($tsec,$tmin,$thour,$tmday,$tmon,$tyear,$twday,$tyday,$tisdst) = gmtime(shift || time());
50     $tyear += 1900; # as mentioned above, this is not RFC822 compliant, but is Y2K-safe.
51     $tsec = "0$tsec" if $tsec < 10;
52     $tmin = "0$tmin" if $tmin < 10;
53     $thour = "0$thour" if $thour < 10;
54     $tmon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')[$tmon];
55     $twday = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')[$twday];
56     return "$twday, $tmday $tmon $tyear $thour:$tmin:$tsec GMT";
57
58 }
59
60 sub sendmail {
61     my ($to, $from, $subject, $text, $sig) = (@_, $0);
62     eval {
63         use Net::SMTP;
64         my $date = &RFC822time();
65         my $smtp = Net::SMTP->new($Mails::smtphost) or confess("Could not create SMTP connection to $Mails::smtphost! Giving Up");
66         $smtp->mail($ENV{USER}); # XXX ?
67         $smtp->to($to);
68         $smtp->data(<<end);
69 X-Mailer: $0, Mails.pm; $$Mails::owner
70 To: $to
71 From: $from
72 Subject: $subject
73 Date: $date
74
75 $text
76 --
77 $sig
78 end
79         $smtp->quit;
80     } or do {
81         &$Mails::debug('Failed to send e-mail.');
82         &$Mails::debug($@);
83         &$Mails::debug('-'x40);
84         &$Mails::debug("To: $to");
85         &$Mails::debug("From: $from");
86         &$Mails::debug("Subject: $subject");
87         &$Mails::debug("\n$text\n-- \n$sig");
88         &$Mails::debug('-'x40);
89         return 0;
90     };
91     return 1;
92 }
93
94
95 ##########################################################
96 ####  The Mails ##########################################
97 ##########################################################
98
99 sub ServerDown {
100     my ($server, $port, $localAddr, $nick, $ircname, $username) = @_;
101     my $localAddrMessage;
102     if (defined($localAddr)) {
103         $localAddrMessage = <<end;
104 You've configured me to assume that '$localAddr' is the address of the
105 network interface to use. If this is wrong, change the localAddr
106 setting in the configuration file (or remove it to enable autodetect).
107 end
108     } else {
109         $localAddrMessage = <<end;
110 I'm currently autodetecting the address of the network interface to
111 use. If this host has more than one interface, set the localAddr
112 setting in the configuration file to the IP address of the outgoing
113 connection I should use.
114 end
115     }
116     return &mailowner("Help! I can't talk to $server:$port!", <<end);
117
118 Hello Sir or Madam!
119
120 I'm afraid I could not connect to the IRC server. I tried, and will
121 try and try again (unless you kill me...) but it was fruitless.
122
123 Could you kick the IRC server for me? Give it a right ol' booting.
124 And hit the network connection while you are at it, would you please?
125
126 Thanks.
127
128 Here is what I was trying to connect to:
129
130    Server: $server
131      Port: $port
132      Nick: $nick
133   Ircname: $ircname
134  Username: $username
135
136 $localAddrMessage
137
138 Hope that helps.
139
140 Cheers,
141 end
142 }
143
144 sub ServerUp {
145     my ($server) = @_;
146     return &mailowner("Woohoo! $server let me in!", <<end);
147
148 Hello again.
149
150 You'll be happy to know that everything turned out for the better.
151
152 Seeya later,
153 end
154 }
155
156 sub NickShortage {
157     my ($cfgfile, $hostname, $port, $username, $ircname, @nicks) = @_;
158     local $" = "\n   ";
159     return &mailowner('There is a nick shortage!', <<end);
160
161 Hello Sir or Madam.
162
163 I could not find an unused nick on IRC.
164
165 I tried all of these:
166    @nicks
167
168 If you like you could add some more nicks manually by
169 editing my configuration file, "$cfgfile"... *hint* *hint*
170
171 Here is what I think I am connected to:
172
173     Hostname: $hostname
174     Port: $port
175     Username: $username
176     IRC Name: $ircname
177
178 I'll e-mail you again when I manage to get on.
179
180 Seeya,
181 end
182 }
183
184 sub NickOk {
185     my ($nick) = @_;
186     return &mailowner("It's ok, I'm now using $nick as my nick.", <<end);
187
188 Hello again.
189
190 You'll be happy to know that everything turned out for the better.
191
192 Seeya later,
193 end
194 }
195
196 1; # end