]>
git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/mail.cgi
2 ###############################################################################
4 # IPFire.org - A linux based firewall #
5 # Copyright (C) 2015 IPFire Team <alexander.marx@ipfire.org> #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
20 ###############################################################################
24 #enable only the following on debugging purpose
26 #use CGI::Carp 'fatalsToBrowser';
28 require '/var/ipfire/general-functions.pl';
29 require "${General::swroot}/lang.pl";
30 require "${General::swroot}/header.pl";
32 #Initialize variables and hashes
33 my $dmafile="${General::swroot}/dma/dma.conf";
34 my $authfile="${General::swroot}/dma/auth.conf";
35 my $mailfile="${General::swroot}/dma/mail.conf";
43 #Read all parameters for site
44 &Header
::getcgihash
(\
%cgiparams);
45 &General
::readhash
("${General::swroot}/main/settings", \
%mainsettings);
46 &General
::readhash
("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \
%color);
49 &Header
::showhttpheaders
();
53 open (FILE
, "<", $dmafile) or die $!;
54 foreach my $line (<FILE
>) {
55 $line =~ m/^([A-Z]+)\s+?(.*)?$/;
61 open(FILE
, ">$dmafile") or die $!;
65 if (exists $dma{'AUTHPATH'}){
66 open (FILE
, "<", $dma{'AUTHPATH'}) or die "$dma{'AUTHPATH'} nicht gefunden $! ";
68 foreach my $line (<FILE
>) {
71 my @part1 = split(/\|/,$authline);
72 my @part2 = split(/\:/,$part1[1]);
73 $auth{'AUTHNAME'} = $part1[0];
74 $auth{'AUTHHOST'} = $part2[0];
75 $auth{'AUTHPASS'} = $part2[1];
79 &General
::readhash
($mailfile, \
%mail);
83 if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}"){ #SaveButton on configsite
85 if ($cgiparams{'USEMAIL'} eq 'on'){
86 $errormessage=&checkmailsettings
;
88 $cgiparams{'txt_mailserver'}='';
89 $cgiparams{'txt_mailport'}='';
90 $cgiparams{'txt_mailuser'}='';
91 $cgiparams{'txt_mailpass'}='';
92 $cgiparams{'mail_tls'}='';
93 $cgiparams{'txt_mailsender'}='';
94 $cgiparams{'txt_recipient'}='';
103 open (TXT
, ">$dmafile") or die("Could not open /var/ipfire/dma/dma.conf: $!\n");
104 open (TXT1
, ">$authfile") or die("Could not open /var/ipfire/dma/auth.conf: $!\n");
105 open (TXT2
, ">$mailfile") or die("Could not open /var/ipfire/dma/mail.conf: $!\n");
108 #Fill hashes with actual values
109 $mail{'USEMAIL'} = $cgiparams{'USEMAIL'};
110 $mail{'SENDER'} = $cgiparams{'txt_mailsender'};
111 $mail{'RECIPIENT'} = $cgiparams{'txt_recipient'};
113 if ($cgiparams{'txt_mailuser'} && $cgiparams{'txt_mailpass'}) {
114 $auth{'AUTHNAME'} = $cgiparams{'txt_mailuser'};
115 $auth{'AUTHPASS'} = $cgiparams{'txt_mailpass'};
116 $auth{'AUTHHOST'} = $cgiparams{'txt_mailserver'};
117 print TXT1
"$auth{'AUTHNAME'}|$auth{'AUTHHOST'}:$auth{'AUTHPASS'}\n";
120 $dma{'SMARTHOST'} = $cgiparams{'txt_mailserver'};
121 $dma{'PORT'} = $cgiparams{'txt_mailport'};
122 $dma{'STARTTLS'} = '' if ($cgiparams{'mail_tls'});
123 $dma{'SECURETRANSFER'} = '' if exists $dma{'STARTTLS'};
124 $dma{'SPOOLDIR'} = "/var/spool/dma";
125 $dma{'FULLBOUNCE'} = '';
126 $dma{'MAILNAME'} = "$mainsettings{'HOSTNAME'}.$mainsettings{DOMAINNAME}";
127 $dma{'AUTHPATH'} = "$authfile" if exists $auth{'AUTHNAME'};
129 #Create new configfiles
130 &General
::writehash
("$mailfile", \
%mail);
131 while ( ($k,$v) = each %dma ) {
139 $cgiparams{'update'}='on';
143 if ($cgiparams{'ACTION'} eq "$Lang::tr{'email testmail'}"){ #Testmail button on configsite
154 #If update set fieldvalues new
155 if($cgiparams{'update'} eq 'on'){
156 $mail{'USEMAIL'} = 'on';
157 $mail{'SENDER'} = $cgiparams{'txt_mailsender'};
158 $mail{'RECIPIENT'} = $cgiparams{'txt_recipient'};
159 $dma{'SMARTHOST'} = $cgiparams{'txt_mailserver'};
160 $dma{'PORT'} = $cgiparams{'txt_mailport'};
161 $auth{'AUTHNAME'} = $cgiparams{'txt_mailuser'};
162 $auth{'AUTHHOST'} = $cgiparams{'txt_mailserver'};
163 $auth{'AUTHPASS'} = $cgiparams{'txt_mailpass'};
164 $dma{'STARTTLS'} = $cgiparams{'mail_tls'};
167 $checked{'usemail'}{$mail{'USEMAIL'}} = 'CHECKED';
168 $checked{'mail_tls'}{'on'} = 'CHECKED' if exists $dma{'STARTTLS'};
171 &Header
::openpage
($Lang::tr
{'email settings'}, 1, '');
172 &Header
::openbigbox
('100%', 'center');
175 &Header
::openbox
('100%', 'left', $Lang::tr
{'email config'});
177 #### JAVA SCRIPT ####
180 \$(document).ready(function() {
181 // Show/Hide elements when USEMAIL checkbox is checked.
182 if (\$("#MAIL").attr("checked")) {
183 \$(".MAILSRV").show();
185 \$(".MAILSRV").hide();
188 // Toggle MAIL elements when "USEMAIL" checkbox is clicked
189 \$("#MAIL").change(function() {
190 \$(".MAILSRV").toggle();
195 ##### JAVA SCRIPT END ####
196 my $col="style='background-color:$color{'color22'}'";
198 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
199 <table style='width:100%' border='0'>
201 <th colspan='3'></th>
204 <td style='width:24em'>$Lang::tr{'email usemail'}</td>
205 <td><label><input type='checkbox' name='USEMAIL' id='MAIL' $checked{'usemail'}{'on'}></label></td>
210 <div class="MAILSRV">
211 <table style='width:100%;'>
213 <td>$Lang::tr{'email mailsender'}<img src='/blob.gif' alt='*' /></td>
214 <td><input type='text' name='txt_mailsender' value='$mail{'SENDER'}' style='width:22em;'></td>
217 <td>$Lang::tr{'email mailrcpt'}<img src='/blob.gif' alt='*' /></td>
218 <td><input type='text' name='txt_recipient' value='$mail{'RECIPIENT'}' style='width:22em;'></td>
221 <td style='width:24em'>$Lang::tr{'email mailaddr'}<img src='/blob.gif' alt='*' /></td>
222 <td><input type='text' name='txt_mailserver' value='$dma{'SMARTHOST'}' style='width:22em;'></td>
225 <td>$Lang::tr{'email mailport'}<img src='/blob.gif' alt='*' /></td>
226 <td><input type='text' name='txt_mailport' value='$dma{'PORT'}' size='3'></td>
229 <td>$Lang::tr{'email mailuser'}</td>
230 <td><input type='text' name='txt_mailuser' value='$auth{'AUTHNAME'}' style='width:22em;'></td>
233 <td>$Lang::tr{'email mailpass'}</td>
234 <td><input type='password' name='txt_mailpass' value='$auth{'AUTHPASS'}' style='width:22em;' ></td>
237 <td>$Lang::tr{'email tls'}</td>
238 <td><input type='checkbox' name='mail_tls' $checked{'mail_tls'}{'on'}></td>
241 if (! -z
$dmafile && $mail{'USEMAIL'} eq 'on' && !$errormessage){
244 print "<td><input type='submit' name='ACTION' value='$Lang::tr{'email testmail'}'></td>";
249 <td colspan='2'> </td>
254 <table style='width:100%;'>
256 <td colspan='3' display:inline align='right'><input type='submit' name='ACTION' value='$Lang::tr{'save'}'></td>
263 &Header
::closebigbox
();
264 &Header
::closepage
();
268 sub checkmailsettings
{
269 #Check if mailserver is an ip address or a domain
270 if ($cgiparams{'txt_mailserver'} =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/){
271 if (! &General
::validip
($cgiparams{'txt_mailserver'})){
272 $errormessage.="$Lang::tr{'email invalid mailip'} $cgiparams{'txt_mailserver'}<br>";
274 }elsif(! &General
::validfqdn
($cgiparams{'txt_mailserver'})){
275 $errormessage.="$Lang::tr{'email invalid mailfqdn'} $cgiparams{'txt_mailserver'}<br>";
277 #Check valid mailserverport
278 if($cgiparams{'txt_mailport'} < 1 || $cgiparams{'txt_mailport'} > 65535){
279 $errormessage.="$Lang::tr{'email invalid mailport'} $cgiparams{'txt_mailport'}<br>";
282 if(! $cgiparams{'txt_mailsender'}){
283 $errormessage.="$Lang::tr{'email empty field'} $Lang::tr{'email mailsender'}<br>";
285 if (! &General
::validemail
($cgiparams{'txt_mailsender'})){
286 $errormessage.="<br>$Lang::tr{'email invalid'} $Lang::tr{'email mailsender'}<br>";
289 return $errormessage;
293 ### Create a new multipart message:
294 $msg = MIME
::Lite
->new(
295 From
=> $mail{'SENDER'},
296 To
=> $mail{'RECIPIENT'},
297 #Cc => 'some@other.com, some@more.com',
298 Subject
=> 'IPFire Testmail',
299 Type
=> 'multipart/mixed'
302 ### Add parts (each "attach" has same arguments as "new"):
305 Data
=> "This is the IPFire test mail."
308 ### Add attachment for testing
310 # Type => 'application/txt',
311 # Encoding => 'base64',
312 # Path => '/var/ipfire/dma/dma.conf',
313 # Filename => 'dma.conf',
314 # Disposition => 'attachment'
317 $msg->send_by_sendmail;
322 &Header
::openbox
('100%', 'left', $Lang::tr
{'info messages'});
323 print "<class name='base'>$infomessage\n";
324 print " </class>\n";
331 &Header
::openbox
('100%', 'left', $Lang::tr
{'error messages'});
332 print "<class name='base'>$errormessage\n";
333 print " </class>\n";