Compare commits
6 Commits
master
...
postfixadm
| Author | SHA1 | Date |
|---|---|---|
|
|
29f588ae9f | 15 years ago |
|
|
5e169b9544 | 17 years ago |
|
|
74dfe63b9f | 17 years ago |
|
|
07b82d2ead | 17 years ago |
|
|
316884b6e8 | 17 years ago |
|
|
187e4d9a0b | 17 years ago |
@ -1,34 +0,0 @@
|
||||
name: GitHubBuild
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
|
||||
- name: Validate composer.json and composer.lock
|
||||
run: composer validate
|
||||
|
||||
- name: setup templates_c
|
||||
run: mkdir templates_c || true
|
||||
|
||||
- name: touch config.local.php
|
||||
run: touch config.local.php && php -v
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer install --prefer-dist --no-progress --no-suggest
|
||||
|
||||
- name: Build/test
|
||||
run: composer build
|
||||
|
||||
- name: setup coveralls
|
||||
run: mkdir -p build/logs || true
|
||||
|
||||
- name: Coveralls
|
||||
run: vendor/bin/coveralls ./clover.xml || true
|
||||
env:
|
||||
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
||||
@ -1,7 +0,0 @@
|
||||
/config.local.php
|
||||
/templates_c/*.tpl.php
|
||||
/templates_c/*menu.conf.php
|
||||
/vendor/
|
||||
/.php_cs.cache
|
||||
/.idea
|
||||
/composer.lock
|
||||
@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
->exclude('lib')
|
||||
->exclude('vendor')
|
||||
->exclude('templates')
|
||||
->exclude('templates_c')
|
||||
->exclude('debian')
|
||||
->files()->notName('config.inc.php')->notName('config.local.php')
|
||||
->in(__DIR__);
|
||||
|
||||
return PhpCsFixer\Config::create()
|
||||
->setFinder($finder)
|
||||
->setRules(array(
|
||||
'@PSR2' => true,
|
||||
'braces' => array(
|
||||
'position_after_functions_and_oop_constructs' => 'same',
|
||||
),
|
||||
'method_argument_space' => false, # don't break formatting in initStruct()
|
||||
'no_spaces_inside_parenthesis' => false, # don't break formatting in initStruct()
|
||||
));
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4 ft=php: */
|
||||
@ -1,32 +0,0 @@
|
||||
language: php
|
||||
php:
|
||||
- 7.2
|
||||
- 7.3
|
||||
- 7.4
|
||||
|
||||
services:
|
||||
- mysql
|
||||
- postgresql
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.composer/cache
|
||||
- $HOME/vendor
|
||||
|
||||
before_install:
|
||||
- mysql -e 'CREATE DATABASE postfixadmin;'
|
||||
- psql -c 'create database postfixadmin;' -U postgres
|
||||
|
||||
|
||||
before_script:
|
||||
- travis_retry composer install --no-interaction --prefer-source --dev
|
||||
- mkdir -p build/logs
|
||||
|
||||
script:
|
||||
- composer build
|
||||
- DATABASE=sqlite vendor/bin/phpunit tests/
|
||||
- DATABASE=mysql vendor/bin/phpunit --coverage-clover=build/logs/clover.xml tests/
|
||||
- DATABASE=postgresql vendor/bin/phpunit tests/
|
||||
|
||||
after_success:
|
||||
- travis_retry php vendor/bin/php-coveralls
|
||||
@ -1,8 +0,0 @@
|
||||
|
||||
Version 0.1 -- 26/10/2009
|
||||
---------------------------
|
||||
|
||||
* Public Release.
|
||||
* Postcreation, Postdeletion and Postedit hooks.
|
||||
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
|
||||
Configuración
|
||||
-------------
|
||||
|
||||
- Edita el fichero cyrus.conf y modifica las variables $cyrus_*. El usuario debe tener permisos sobre todas las cuentas.
|
||||
- Edita los ficheros cyrus-*.pl y cambia la ruta de cyrus.conf (linea require '/path/to/cyrus.conf';)
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
- Edit cyrus.conf and set $cyrus_* variables correctly. User must have permission over all accounts.
|
||||
- Edit cyrus-*.pl and change path to cyrus.conf (require '/path/to/cyrus.conf'; line)
|
||||
|
||||
@ -1,36 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Cyrus Mailbox creation
|
||||
#
|
||||
# Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es)
|
||||
#
|
||||
# LICENSE
|
||||
# This source file is subject to the GPL license that is bundled with
|
||||
# this package in the file LICENSE.TXT.
|
||||
#
|
||||
# (26/10/2009)
|
||||
|
||||
use Cyrus::IMAP::Admin;
|
||||
require '/etc/mail/postfixadmin/cyrus.conf';
|
||||
use strict;
|
||||
use vars qw($cyrus_user $cyrus_password $cyrus_host);
|
||||
|
||||
my %opts;
|
||||
|
||||
my $mailbox = mailbox_name($ARGV[0]);
|
||||
|
||||
my $client = Cyrus::IMAP::Admin->new($cyrus_host);
|
||||
die_on_error($client);
|
||||
|
||||
$opts{-user} = $cyrus_user;
|
||||
$opts{-password} = $cyrus_password;
|
||||
|
||||
$client->authenticate(%opts);
|
||||
die_on_error($client);
|
||||
|
||||
$client->create($mailbox);
|
||||
die_on_error($client);
|
||||
|
||||
$client->setquota($mailbox,'STORAGE',scalar $ARGV[3]) if ($ARGV[3] > 0);
|
||||
die_on_error($client);
|
||||
|
||||
@ -1,36 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Cyrus Mailbox deletion
|
||||
#
|
||||
# Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es)
|
||||
#
|
||||
# LICENSE
|
||||
# This source file is subject to the GPL license that is bundled with
|
||||
# this package in the file LICENSE.TXT.
|
||||
#
|
||||
# (26/10/2009)
|
||||
|
||||
use Cyrus::IMAP::Admin;
|
||||
require '/etc/mail/postfixadmin/cyrus.conf';
|
||||
use strict;
|
||||
use vars qw($cyrus_user $cyrus_password $cyrus_host);
|
||||
|
||||
my %opts;
|
||||
|
||||
my $mailbox = mailbox_name($ARGV[0]);
|
||||
|
||||
my $client = Cyrus::IMAP::Admin->new($cyrus_host);
|
||||
die_on_error($client);
|
||||
|
||||
$opts{-user} = $cyrus_user;
|
||||
$opts{-password} = $cyrus_password;
|
||||
|
||||
$client->authenticate(%opts);
|
||||
die_on_error($client);
|
||||
|
||||
$client->setacl($mailbox,$cyrus_user => 'all');
|
||||
die_on_error($client);
|
||||
|
||||
$client->deletemailbox($mailbox);
|
||||
die_on_error($client);
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Cyrus Mailbox edition
|
||||
#
|
||||
# Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es)
|
||||
#
|
||||
# LICENSE
|
||||
# This source file is subject to the GPL license that is bundled with
|
||||
# this package in the file LICENSE.TXT.
|
||||
#
|
||||
# (26/10/2009)
|
||||
|
||||
use Cyrus::IMAP::Admin;
|
||||
require '/etc/mail/postfixadmin/cyrus.conf';
|
||||
use strict;
|
||||
use vars qw($cyrus_user $cyrus_password $cyrus_host);
|
||||
|
||||
my %opts;
|
||||
|
||||
my $mailbox = mailbox_name($ARGV[0]);
|
||||
|
||||
my $client = Cyrus::IMAP::Admin->new($cyrus_host);
|
||||
die_on_error($client);
|
||||
|
||||
$opts{-user} = $cyrus_user;
|
||||
$opts{-password} = $cyrus_password;
|
||||
|
||||
$client->authenticate(%opts);
|
||||
die_on_error($client);
|
||||
|
||||
$client->setquota($mailbox,'STORAGE',scalar $ARGV[3]) if ($ARGV[3] > 0);
|
||||
die_on_error($client);
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Config
|
||||
|
||||
$cyrus_user = 'cyrus';
|
||||
$cyrus_password = 'cyruspass';
|
||||
$cyrus_host = 'localhost';
|
||||
|
||||
# unixhierarchysep => 1 (yes) / 0 (no)
|
||||
$unixhierarchysep = 1;
|
||||
|
||||
# Common routines
|
||||
|
||||
sub mailbox_name {
|
||||
my $mailbox = shift;
|
||||
|
||||
if($unixhierarchysep) {
|
||||
$mailbox = 'user/'.$ARGV[0];
|
||||
} else {
|
||||
$mailbox = 'user.'.$ARGV[0];
|
||||
}
|
||||
|
||||
return $mailbox;
|
||||
}
|
||||
|
||||
sub die_on_error {
|
||||
my $cyradm = shift;
|
||||
if($cyradm->error) { die $cyradm->error; }
|
||||
}
|
||||
1;
|
||||
|
||||
@ -1,77 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
|
||||
|
||||
$ENV{'PATH'} = "/sbin:/bin:/usr/sbin:/usr/bin";
|
||||
|
||||
my ($domain);
|
||||
my $list = 0;
|
||||
|
||||
(help()) if (!$ARGV[0]);
|
||||
GetOptions ('l' => \$list, 'd=s' => \$domain) or (help());
|
||||
|
||||
|
||||
(list_queue()) if ($list == 1);
|
||||
|
||||
(delete_queue()) if ($domain);
|
||||
|
||||
|
||||
sub delete_queue {
|
||||
my $ids = `postqueue -p`;
|
||||
my @ids = split /\n/, $ids;
|
||||
|
||||
for my $id (@ids) {
|
||||
next if $id =~ /^[\s\(-]/;
|
||||
chomp $id;
|
||||
next unless $id;
|
||||
$id =~ s/(.*?)\**\s.*/$1/;
|
||||
#print "$id\n";
|
||||
my $match = `postcat -q $id | grep '$domain'`;
|
||||
next unless $match;
|
||||
#print "Deleting ID: $id\n";
|
||||
my $saida = `postsuper -d $id`;
|
||||
print $saida;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
sub list_queue {
|
||||
my %hash_mail = ();
|
||||
my @queue = `postqueue -p`;
|
||||
my($queue,$key,$total);
|
||||
|
||||
|
||||
foreach $queue(@queue) {
|
||||
chomp $queue;
|
||||
if ( $queue =~ /^\s+.*\@(.*)/ ) {
|
||||
$hash_mail{$1}++;
|
||||
}
|
||||
}
|
||||
print"\nTOTAL\tTO\n";
|
||||
print"-----
|
||||
----------------------------------------------------------------\n";
|
||||
foreach $key (reverse sort { $hash_mail{$a} <=> $hash_mail{$b}} keys
|
||||
%hash_mail) {
|
||||
$total += $hash_mail{$key};
|
||||
print"$hash_mail{$key} - $key\n";
|
||||
}
|
||||
print"\n$total -> TOTAL QUEUE\n";
|
||||
|
||||
}
|
||||
|
||||
|
||||
sub help {
|
||||
print "Usage $0 -l To list a row of E-mail
|
||||
Usage $0 -d domain.com To delete the mensgens the Domain\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,231 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# Script takes a CSV list of users and does a 'bulk' insertion into mysql.
|
||||
#
|
||||
# Copyright (C) 2009 Simone Piccardi
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or (at
|
||||
# your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
|
||||
import csv
|
||||
import getopt
|
||||
import sys
|
||||
import re
|
||||
import time
|
||||
import random, string
|
||||
from datetime import datetime
|
||||
from crypt import crypt
|
||||
try:
|
||||
import MySQLdb
|
||||
except ImportError ,e:
|
||||
print 'Cannot import the needed MySQLdb module, you must install it'
|
||||
print 'on Debian systems just use the command'
|
||||
print ' apt-get install python-mysqldb'
|
||||
|
||||
def usage():
|
||||
print "Usage: inspostadmusers.py [options] users.csv"
|
||||
print " -h print this help"
|
||||
print " -t test run, do not insert, just print"
|
||||
print " -u DB user"
|
||||
print " -p DB password"
|
||||
print " -D DB name"
|
||||
print " -H DB host"
|
||||
print " -q Quota in Mb (0 => no limit)"
|
||||
print " -n char in seed"
|
||||
print " -d debug info on"
|
||||
print " -A create default alias for each domain"
|
||||
print
|
||||
print "the users.csv file must contains the user list with a line"
|
||||
print "for each user, first line should be a title line with at least"
|
||||
print "the following column names: "
|
||||
print " * user - user part of the email (like user in user@domain.com)"
|
||||
print " * password - cleartext password"
|
||||
print " * domain - domain name (like 'domain.com')"
|
||||
print " * name - full user name ('Name Surname')"
|
||||
print
|
||||
print "the 'name' column is optional, other columns will be ignored"
|
||||
print
|
||||
print "Known restrictions:"
|
||||
print "* this script only works with MySQL"
|
||||
print "* mailbox paths are hardcoded to domain/username/"
|
||||
|
||||
|
||||
# option parsing
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'u:p:d:D:H:htdA')
|
||||
optval={}
|
||||
for opt, val in opts:
|
||||
if opt == "-h":
|
||||
usage()
|
||||
sys.exit(0)
|
||||
else:
|
||||
optval[opt]=val
|
||||
except getopt.GetoptError:
|
||||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
#
|
||||
# Setup DB connection
|
||||
#
|
||||
MYSQLDB="postfixadmin"
|
||||
MYSQLUSER="postfixadmin"
|
||||
MYSQLPASSWORD=""
|
||||
MYSQLHOST="localhost"
|
||||
|
||||
# settings by command line options
|
||||
if optval.has_key('-u'):
|
||||
MYSQLUSER = optval['-u']
|
||||
if optval.has_key('-p'):
|
||||
MYSQLPASSWORD = optval['-p']
|
||||
if optval.has_key('-D'):
|
||||
MYSQLDB = optval['-D']
|
||||
if optval.has_key('-H'):
|
||||
MYSQLHOST = optval['-H']
|
||||
|
||||
if optval.has_key('-q'):
|
||||
quota = optval['-q']
|
||||
else:
|
||||
quota = 0
|
||||
|
||||
if optval.has_key('-n'):
|
||||
seed_len = optval['-n']
|
||||
else:
|
||||
seed_len = 8
|
||||
|
||||
# check arguments, only the user list file must be present
|
||||
if len(args) !=1:
|
||||
print 'Need just one argument'
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
# MySQL connection (skipped in test run)
|
||||
if optval.has_key('-t'):
|
||||
print "Test Run"
|
||||
else:
|
||||
try:
|
||||
connection = MySQLdb.connect(host=MYSQLHOST, user=MYSQLUSER,
|
||||
db=MYSQLDB, passwd=MYSQLPASSWORD)
|
||||
except MySQLdb.MySQLError, e:
|
||||
print "Database connection error"
|
||||
print e
|
||||
sys.exit(1)
|
||||
|
||||
cursor = connection.cursor()
|
||||
|
||||
#
|
||||
# Main body
|
||||
#
|
||||
NOW = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# read and convert CSV data
|
||||
lista = csv.DictReader(open(args[0]))
|
||||
|
||||
def gen_seed(seed_len, chars):
|
||||
return '$1$'+''.join([random.choice(chars) for _ in xrange(seed_len)])+'$'
|
||||
|
||||
def insert_record(cursor,table,record):
|
||||
columns = record.keys()
|
||||
query = "INSERT INTO " + table + "(" + ','.join(columns) + ") VALUES (" + ','.join(len(columns)*['%s']) + ")"
|
||||
try:
|
||||
cursor.execute(query, record.values())
|
||||
return 0
|
||||
except MySQLdb.MySQLError, e:
|
||||
print "Database insertion error"
|
||||
print e
|
||||
print "Record was:"
|
||||
print record.values()
|
||||
print "Query was:"
|
||||
print query
|
||||
|
||||
# defining default values for tables (mailbox, alias and domain)
|
||||
mailbox = {
|
||||
'created': NOW,
|
||||
'modified': NOW,
|
||||
'active': 1,
|
||||
'quota': quota
|
||||
}
|
||||
aliases = {
|
||||
'created': NOW,
|
||||
'modified': NOW,
|
||||
'active': 1
|
||||
}
|
||||
domain = {
|
||||
'description': "",
|
||||
'aliases': 0,
|
||||
'mailboxes': 0,
|
||||
'quota': 0,
|
||||
'transport': 'virtual',
|
||||
'backupmx': 0,
|
||||
'created': NOW,
|
||||
'modified': NOW,
|
||||
'active': 1
|
||||
}
|
||||
|
||||
# list of default alias
|
||||
def_alias = ['abuse','hostmaster','postmaster','webmaster']
|
||||
|
||||
domain_list = {}
|
||||
chars = string.letters + string.digits
|
||||
|
||||
# loop over the CSV
|
||||
for row in lista:
|
||||
# create domain if it does not exists
|
||||
if domain_list.has_key(row["domain"]):
|
||||
if optval.has_key('-d'):
|
||||
print "Domain " + row["domain"] + "already exixts"
|
||||
else:
|
||||
domain_list[row["domain"]] = 1
|
||||
domain['domain'] = row["domain"]
|
||||
if optval.has_key('-t'):
|
||||
print "Inserting domain"
|
||||
print domain
|
||||
else:
|
||||
insert_record(cursor,'domain',domain)
|
||||
if optval.has_key('-A'):
|
||||
for i in def_alias:
|
||||
aliases['address']= i+'@'+row["domain"]
|
||||
aliases['goto']= aliases['address']
|
||||
aliases['domain'] = row["domain"]
|
||||
if optval.has_key('-t'):
|
||||
print "Inserting alias"
|
||||
print aliases
|
||||
else:
|
||||
insert_record(cursor,'alias',aliases)
|
||||
|
||||
# build query data for mailbox table
|
||||
mailbox['username']=row["user"]+'@'+row["domain"]
|
||||
encpass=crypt(row["password"], gen_seed(seed_len,chars))
|
||||
mailbox['password'] = encpass
|
||||
mailbox['name'] = row["name"]
|
||||
mailbox['maildir'] = row["domain"]+'/'+row["user"]+'/'
|
||||
mailbox['local_part'] =row["user"]
|
||||
mailbox['domain'] = row["domain"]
|
||||
|
||||
# build query data for alias table
|
||||
aliases['address']= mailbox['username']
|
||||
aliases['goto']= mailbox['username']
|
||||
aliases['domain'] = row["domain"]
|
||||
|
||||
# inserting data for mailbox (and relate alias)
|
||||
if optval.has_key('-t'):
|
||||
print "Inserting mailbox"
|
||||
print mailbox
|
||||
print aliases
|
||||
else:
|
||||
insert_record(cursor,'mailbox',mailbox)
|
||||
insert_record(cursor,'alias',aliases)
|
||||
|
||||
|
||||
sys.exit(0)
|
||||
Binary file not shown.
@ -1,38 +0,0 @@
|
||||
Installing the postfixadmin Plugin
|
||||
======================================
|
||||
|
||||
Requirements:
|
||||
=============
|
||||
|
||||
- PHP 5.[234].* with php5-xmlrpc installed (if available; it should be available by default anyway)
|
||||
- http access to a local/remote postfixadmin interface
|
||||
- Zend Framework (1.12.x) - needs adding to the include path within common.php,
|
||||
or installing in a system include path directory (e.g. /usr/share/php)
|
||||
(e.g. from within the directory containing this file ...
|
||||
wget https://packages.zendframework.com/releases/ZendFramework-1.12.3/ZendFramework-1.12.3-minimal.tar.gz
|
||||
tar -zxf ZendFramework-1.12.3-minimal.tar.gz
|
||||
mv ZendFramework-1.12.3-minimal/library/Zend . )
|
||||
NOTE: This plugin is _not compatible_ with Zend Framework version 2.x.
|
||||
|
||||
Installation :
|
||||
==============
|
||||
|
||||
- Copy this code into the Squirrelmail plugins directory - your life will be easiest if it's in a directory called 'postfixadmin'
|
||||
- Install Zend Framework (see above under Requirements for example)
|
||||
- Edit config.php and specify the remote URL for the Postfixadmin XmlRpc service.
|
||||
- Edit common.php and (if you need to) change the include path(s) so they are correct.
|
||||
- Edit the remote Postfixadmin's XmlRpc service config file and ensure 'xmlrpc_enabled' is set to boolean true.
|
||||
- Enable the plugin through 'squirrelmail-configure' or 'config/conf.pl'.
|
||||
Choose option 8 and move the plugin from the "Available Plugins"
|
||||
category to the "Installed Plugins" category. Save and exit.
|
||||
|
||||
Security :
|
||||
==========
|
||||
|
||||
- The XmlRpc client needs to get the user's mailbox password before it will be able to connect to the
|
||||
XmlRpc server (postfixadmin). The plugin prompts the user for their mailbox password, and caches it in their session
|
||||
($_SESSION['password']). This password is then sent once on every page load to the remote XmlRpc server.
|
||||
|
||||
- You should consider doing any of the following :
|
||||
- Using https if the server and client are on seperate servers. This will probably require a signed certificate etc, and may require changes to the Zend_XmlRpc_Client's HttpClient.
|
||||
- Using something like stunnel to encrypt traffic between server(s).
|
||||
@ -1,40 +0,0 @@
|
||||
|
||||
2007/03/29 :
|
||||
Before I (David Goodwin) customised this plugin, it contained the following within all
|
||||
files as a header.
|
||||
|
||||
/****************************************************************************************
|
||||
|
||||
Author ......... Florian Kimmerl
|
||||
Contact ........ info@spacekoeln.de
|
||||
Home Site ...... http://www.spacekoeln.de/
|
||||
Program ........ postfixadmin
|
||||
Purpose ........ Allows you to change your postfixadmin settings within squirrelmail
|
||||
|
||||
*************************************************************************************
|
||||
|
||||
The Original Code is Postfix Admin.
|
||||
The Initial Developer of the Original Code is Mischa Peters .
|
||||
Portions created by Mischa Peters are Copyright (c) 2002, 2003, 2004.
|
||||
All Rights Reserved.
|
||||
Contributor(s):
|
||||
This project includes work by Mischa Peters and others that is:
|
||||
Copyright (c) 2002,2003,2004 Mischa Peters
|
||||
All rights reserved.
|
||||
|
||||
****************************************************************************************/
|
||||
|
||||
|
||||
Contacting the author provided no success, so I took over maintainership.
|
||||
|
||||
Please note:
|
||||
|
||||
1) Changes made by myself (David Goodwin) will be licensed under the GPL
|
||||
2) PostfixAdmin has itself been relicensed under the GPL; however this took place _after_
|
||||
this plugin was written.
|
||||
3) Squirrelmail itself is released under http://squirrelmail.org/wiki/SquirrelMailGPL (GPL)
|
||||
|
||||
|
||||
The GNU public license can be found online at :
|
||||
|
||||
http://www.gnu.org/licenses/gpl.txt
|
||||
@ -1,31 +0,0 @@
|
||||
# Squirrelmail Plugin Postfixadmin
|
||||
|
||||
The Postfixadmin SquirrelMail plugin let users change their virtual alias,
|
||||
vacation status/message and password
|
||||
|
||||
Your users can therefore use this plugin within Squirrelmail to :
|
||||
|
||||
* Turn vacation on/off
|
||||
* Change their email password
|
||||
* Setup forwarding rules
|
||||
|
||||
|
||||
Note, this plugin does not require access to the Postfixadmin database. It communicates with Postfixadmin using the XMLRPC protocol.
|
||||
|
||||
## Notes
|
||||
|
||||
* We now depend upon the Zend Framework (preferably v1.9.x at the time of writing) (Download from http://framework.zend.com/download/latest - the minimal one should be sufficient)
|
||||
* Traffic to the XmlRpc interface needs encrypting (e.g. https) - this is something _you_ need to do
|
||||
* When trying to use the plugin, the user will be prompted to enter their mailbox password - this is necessary to authenticate with the remote XmlRpc? interface
|
||||
|
||||
|
||||
## REQUIREMENTS
|
||||
|
||||
* SquirrelMail 1.4x
|
||||
* PostfixAdmin version 3 or higher.
|
||||
* PHP 5.4+ with XMLRPC support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,51 +0,0 @@
|
||||
<?php
|
||||
// vim:ts=4:sw=4:et
|
||||
ini_set('include_path', get_include_path() . ':' . dirname(__FILE__));
|
||||
|
||||
@include_once('Zend/Version.php');
|
||||
if (!class_exists('Zend_Version', false)) {
|
||||
die("Zend Framework not found. Please check the INSTALL File.");
|
||||
}
|
||||
chdir("..");
|
||||
|
||||
|
||||
if (!defined('SM_PATH')) {
|
||||
define('SM_PATH', '../');
|
||||
}
|
||||
|
||||
$config_file = dirname(__FILE__ ) . '/config.php';
|
||||
$validate_file = dirname(__FILE__) . '/../include/validate.php';
|
||||
|
||||
if (!file_exists($config_file)) {
|
||||
die("$config_file is missing");
|
||||
}
|
||||
|
||||
include_once($config_file);
|
||||
include_once(dirname(__FILE__) . '/functions.inc.php');
|
||||
|
||||
if (file_exists($validate_file)) {
|
||||
include_once($validate_file);
|
||||
} else {
|
||||
$validate_file = SM_PATH . '/src/validate.php';
|
||||
if (file_exists($validate_file)) {
|
||||
include_once($validate_file);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
include_once(SM_PATH . 'functions/page_header.php');
|
||||
include_once(SM_PATH . 'functions/display_messages.php');
|
||||
include_once(SM_PATH . 'functions/imap.php');
|
||||
include_if_exists(SM_PATH . 'functions/array.php');
|
||||
if (file_exists(SM_PATH . 'src/load_prefs.php')) {
|
||||
include_once(SM_PATH . 'src/load_prefs.php');
|
||||
} else {
|
||||
include_if_exists(SM_PATH . 'include/load_prefs.php');
|
||||
}
|
||||
// overwrite squirrelmail's content type to utf8...
|
||||
header("Content-Type: text/html; charset=utf8");
|
||||
|
||||
|
||||
//global $VACCONFMESSAGE;
|
||||
bindtextdomain('postfixadmin', dirname(__FILE__) . '/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
@ -1,22 +0,0 @@
|
||||
<?php
|
||||
|
||||
$CONF = array();
|
||||
$CONF['xmlrpc_url'] = 'http://postfixadmin.local/postfixadmin/xmlrpc.php';
|
||||
|
||||
// Virtual Vacation
|
||||
// If you use virtual vacation for you mailbox users set this to 'true'.
|
||||
// NOTE: Make sure that you install the vacation module!!
|
||||
|
||||
//$AllowVacation = true; // true or false
|
||||
global $AllowVacation;
|
||||
$AllowVacation = true;
|
||||
|
||||
// Change Password
|
||||
// Enables user to change the POP3/IMAP Password.
|
||||
//$AllowChangePass = true; // true or false
|
||||
global $AllowChangePass;
|
||||
$AllowChangePass = true;
|
||||
|
||||
// Minimum password length - set to Zero to not care, otherwise the number of
|
||||
// characters a password must be longer than.
|
||||
$CONF['min_password_length'] = 5;
|
||||
@ -1,20 +0,0 @@
|
||||
Squirrelmail PostfixAdmin Plugin for Debian
|
||||
===========================================
|
||||
|
||||
After installing the package, you will need to :
|
||||
|
||||
1) Edit the config.inc.php file to point to the PostfixAdmin server.
|
||||
|
||||
2) Ensure the xmlrpc interface is available and enabled on the Postfixadmin server
|
||||
|
||||
3) Run the squirrelmail-configure script.
|
||||
|
||||
Where to get help
|
||||
=================
|
||||
|
||||
See http://squirrelmail-postfixadmin.palepurple.co.uk
|
||||
|
||||
Try also : david [at] pale purple dot co dot uk
|
||||
|
||||
Or #postfixadmin on irc.freenode.net might be a good bet.
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
squirrelmail-postfixadmin (2.3.0) stable; urgency=low
|
||||
|
||||
* Using XMLRPC backend (no SQL here)
|
||||
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Mon, 01 Feb 2010 09:56:00 +0000
|
||||
|
||||
squirrelmail-postfixadmin (2.2.0) stable; urgency=low
|
||||
|
||||
* Changed DB backend to use prepared statements
|
||||
* Changed vacation handling to match that of Postfixadmin (vacation.active
|
||||
etc)
|
||||
* Changed vacation page to support UTF8
|
||||
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 20 Aug 2008 15:25:00 +0000
|
||||
|
||||
squirrelmail-postfixadmin (2.1.1-1) stable; urgency=low
|
||||
|
||||
* Add NL language support
|
||||
* Better db error logging (e.g. if wrong mdb2 driver specified etc)
|
||||
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 12 Dec 2007 16:00:00 +0000
|
||||
|
||||
squirrelmail-postfixadmin (2.1.0-1) stable; urgency=low
|
||||
|
||||
* Initial release.
|
||||
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Thu, 8 Nov 2007 20:00:00 +0000
|
||||
@ -1 +0,0 @@
|
||||
/etc/squirrelmail/plugins/postfixadmin-config.php
|
||||
@ -1,19 +0,0 @@
|
||||
Source: squirrelmail-postfixadmin
|
||||
Section: mail
|
||||
Priority: optional
|
||||
Maintainer: David Goodwin <david.goodwin@palepurple.co.uk>
|
||||
Standards-Version: 3.6.1
|
||||
|
||||
Package: squirrelmail-postfixadmin
|
||||
Architecture: all
|
||||
Depends: squirrelmail, php-pear
|
||||
Suggests: postfixadmin
|
||||
Description: Plugin for Squirrelmail to integrate with Postfixadmin
|
||||
Postfixadmin is a web based interface for managing mail domains
|
||||
and users. This package integrates Squirrelmail with it.
|
||||
Users can change their password, forwarding and vacation settings
|
||||
from within Squirrelmail when this package is installed, and
|
||||
enabled through the ./squirrelmail-configure command.
|
||||
.
|
||||
For further information see
|
||||
http://squirrelmail-postfixadmin.palepurple.co.uk
|
||||
@ -1,11 +0,0 @@
|
||||
This package was debianized by David Goodwin <david@palepurple.co.uk>
|
||||
2007/11/08
|
||||
|
||||
It was downloaded from: http://squirremail-postfixadmin.palepurple.co.uk
|
||||
|
||||
Upstream Author(s): n/a
|
||||
|
||||
Copyright:
|
||||
Copyright (C) 2007+ by David Goodwin <david@palepurple.co.uk>
|
||||
|
||||
License: GPL v2+
|
||||
@ -1,4 +0,0 @@
|
||||
LICENSE.txt
|
||||
README
|
||||
INSTALL
|
||||
debian/README.Debian
|
||||
@ -1 +0,0 @@
|
||||
squirrelmail-postfixadmin_2.2.0_all.deb mail optional
|
||||
@ -1,3 +0,0 @@
|
||||
usr/share/squirrelmail/plugins/postfixadmin
|
||||
usr/share/doc/squirrelmail-postfixadmin
|
||||
etc/squirrelmail/plugins
|
||||
@ -1,5 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||
echo "WARNING: You need to read /usr/share/doc/squirrelmail-postfixadmin/README.Debian!"
|
||||
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||
@ -1,56 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
# debian/rules makefile for squirrelmail
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
build: build-stamp
|
||||
build-stamp:
|
||||
dh_testdir
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
$(checkdir)
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_installdirs
|
||||
dh_install
|
||||
mkdir -p debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
||||
cp -a *.php version debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
||||
cp -a locale debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
||||
cp -a po debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
||||
mkdir -p debian/tmp/etc/squirrelmail/plugins/
|
||||
cp -a *.sample debian/tmp/etc/squirrelmail/plugins/postfixadmin-config.php
|
||||
mkdir -p debian/tmp/DEBIAN
|
||||
cp debian/postinst debian/tmp/DEBIAN/postinst
|
||||
chmod 555 debian/tmp/DEBIAN/postinst
|
||||
ln -s /etc/squirrelmail/plugins/postfixadmin-config.php debian/tmp/usr/share/squirrelmail/plugins/postfixadmin/config.php
|
||||
find debian/tmp -name .svn | xargs -r rm -r
|
||||
|
||||
# Build architecture-independent files here.
|
||||
binary-indep: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installdebconf
|
||||
dh_installdocs -X.svn
|
||||
dh_installexamples
|
||||
dh_installman
|
||||
dh_installcron
|
||||
dh_link
|
||||
dh_compress
|
||||
dh_fixperms -X/var
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
|
||||
# Build architecture-dependent files here.
|
||||
binary-arch:
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: build clean binary-indep binary-arch binary install
|
||||
@ -1,96 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfixadmin (http://postfixadmin.sf.net) integration with Squirrelmail.
|
||||
* See http://squirrelmail-postfixadmin.palepurple.co.uk
|
||||
* @author David Goodwin and many others
|
||||
*/
|
||||
|
||||
|
||||
function do_header() {
|
||||
global $color;
|
||||
displayPageHeader($color, 'None');
|
||||
}
|
||||
|
||||
function do_footer() {
|
||||
echo "</body></html>";
|
||||
}
|
||||
|
||||
function _display_password_form() {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
do_header('Postfixadmin Squirrelmail - Login');
|
||||
echo _('The PostfixAdmin plugin needs your current mailbox password');
|
||||
echo "<form action='' method='post'>";
|
||||
echo _('Password for');
|
||||
echo " " . $_SESSION['username'] . " :";
|
||||
echo "<input type='password' name='password' value=''>";
|
||||
echo "<input type='submit' value='" . _('Submit') . "'></form>";
|
||||
do_footer();
|
||||
}
|
||||
|
||||
/**
|
||||
* This returns a Zend_XmlRpc_Client instance - unless we can't log you in...
|
||||
*/
|
||||
function get_xmlrpc() {
|
||||
global $CONF;
|
||||
require_once('Zend/XmlRpc/Client.php');
|
||||
$client = new Zend_XmlRpc_Client($CONF['xmlrpc_url']);
|
||||
$http_client = $client->getHttpClient();
|
||||
$http_client->setCookieJar();
|
||||
|
||||
$login_object = $client->getProxy('login');
|
||||
|
||||
if (empty($_SESSION['password'])) {
|
||||
if (empty($_POST['password'])) {
|
||||
_display_password_form();
|
||||
exit(0);
|
||||
} else {
|
||||
try {
|
||||
$success = $login_object->login($_SESSION['username'], $_POST['password']);
|
||||
} catch (Exception $e) {
|
||||
//var_dump($client->getHttpClient()->getLastResponse()->getBody());
|
||||
error_log("Failed to login to xmlrpc instance - " . $e->getMessage());
|
||||
die('Failed to login to xmlrpc instance');
|
||||
}
|
||||
if ($success) {
|
||||
$_SESSION['password'] = $_POST['password'];
|
||||
// reload the current page as a GET request.
|
||||
header("Location: {$_SERVER['REQUEST_URI']}");
|
||||
exit(0);
|
||||
} else {
|
||||
_display_password_form();
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$success = $login_object->login($_SESSION['username'], $_SESSION['password']);
|
||||
}
|
||||
|
||||
if (!$success) {
|
||||
unset($_SESSION['password']);
|
||||
die("Invalid details cached... refresh this page and re-enter your mailbox password");
|
||||
}
|
||||
return $client;
|
||||
}
|
||||
|
||||
function include_if_exists($filename) {
|
||||
if (file_exists($filename)) {
|
||||
include_once($filename);
|
||||
}
|
||||
return;
|
||||
}
|
||||
global $optmode;
|
||||
$optmode = 'display';
|
||||
|
||||
//
|
||||
// check_email
|
||||
// Action: Checks if email is valid and returns TRUE if this is the case.
|
||||
// Call: check_email (string email)
|
||||
//
|
||||
function check_email($email) {
|
||||
$return = filter_var($email, FILTER_VALIDATE_EMAIL);
|
||||
if ($return === false) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
/****************************************************************************************
|
||||
|
||||
Author ......... Florian Kimmerl
|
||||
Contact ........ info@spacekoeln.de
|
||||
Home Site ...... http://www.spacekoeln.de/
|
||||
Program ........ postfixadmin
|
||||
Version ........ 0.3-1.4
|
||||
Purpose ........ Allows you to change your postfixadmin settings within squirrelmail
|
||||
|
||||
/**
|
||||
* index.php
|
||||
*
|
||||
* Copyright (c) 1999-2003 The SquirrelMail Project Team
|
||||
* Licensed under the GNU GPL. For full terms see the file COPYING.
|
||||
*
|
||||
* This file simply takes any attempt to view source files and sends those
|
||||
* people to the login screen. At this point no attempt is made to see if
|
||||
* the person is logged or not.
|
||||
*
|
||||
*
|
||||
****************************************************************************************/
|
||||
|
||||
header("Location: ../../index.php");
|
||||
@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
for f in $(find . -name postfixadmin.po)
|
||||
do
|
||||
msgfmt -o $(dirname $f)/postfixadmin.mo $f
|
||||
done
|
||||
Binary file not shown.
@ -1,132 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
||||
"PO-Revision-Date: 2007-07-20 20:46+0100\n"
|
||||
"Last-Translator: Michael Heca <michael.heca@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=iso-8859-2\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Pøesmìrování"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Zde mù¾ete vytvoøit a nastavit pøesmìrování"
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Zde mù¾ete nastavit automatickou odpovìd, pokud nebudete k zasti¾ení."
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Zmìnít heslo k Va¹emu e-mailovému úètu"
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "Úèet"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Zmìnit heslo"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Zmìnít heslo k Va¹emu e-mailovému úètu"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr "Editace adresy pro pøesmìrování"
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr "Editace pøesmìrování pro Vá¹ úèet. <br/> Ka¾dá adresa na novém øádku."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Zadaná e-mailová adresa je chybná:"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Neni mo¾né nalézt úèet!"
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Není mo¾né zmìnit úèet!"
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr "Dal¹í aliasy dostanou e-mail jako BBC!"
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr "Pøesmìrování bylo zmìnìno!"
|
||||
|
||||
msgid "To remove an alias, simply delete it's line from the text box."
|
||||
msgstr "Pro odstranení pøesmìrování sma¾te v¹echny øádky v textovém boxu."
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Automatická odpovìï"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Jsem mimo"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Jsem zpìt"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Nastavení"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Mimo kanceláø"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Pøedmìt"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Tìlo mailu"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Va¹e automatická odpovìï byla odstranìna!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Va¹e automatická odpovìï byla nastavena!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "U¾ máte nastavenu automatickou odpovìï!"
|
||||
|
||||
#: postfixadmin_changepass.php:81
|
||||
#: postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "Zadaná hesla nejsou stejná a nebo jsou prázdná!"
|
||||
|
||||
#: postfixadmin_forward.php:70
|
||||
#: postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "Komu"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Není mo¾né zmìnit heslo!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Stávající heslo neodpovídá!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "Va¹e heslo bylo zmìnìno!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Stávající heslo"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Nové heslo"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Nové heslo znovu"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Prosím odhla¹te se a pøihla¹te se s novým heslem!"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Nebudy k zasti¾ení od <date> do <date>. Pro naléhané po¾adavky prosím kontaktujte <contact person>."
|
||||
|
||||
Binary file not shown.
@ -1,127 +0,0 @@
|
||||
# Danish translation for Squirrelmail Plugin Postfixadmin.
|
||||
# Copyright (C) 2004 Florian Kimmerl, 2007 David Goodwin
|
||||
# This file is distributed under the same license as the Squirrelmail Plugin Postfixadmin package.
|
||||
# Jesper R. Meyer <jrm@upthere.dk>, 2007.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 0.4.3\n"
|
||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
||||
"PO-Revision-Date: 2007-11-09 16:07+0100\n"
|
||||
"Last-Translator: JESPER MEYER <jrm@upthere.dk>\n"
|
||||
"Language-Team: DANISH <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Videresending"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Her kan du oprette og ændre email-videresendinger."
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Tilføj en 'ikke tilstede' besked eller et autosvar til din emailadresse."
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Ændre adgangskoden til din postboks"
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "Alias"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Ændre adgangskode"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Ændre din login-adgangskode"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr "Rediger alias"
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr "Rediger et alias* for dit domæne.<br />En modtager pr. linje."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Emailadressen du angav er ugyldig"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Aliaset eksistere ikke!"
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Kunne ikke ændre aliaset!"
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr "*Eksta vidersendingsalias modtager altid meddelelser BCC!"
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr "Alias ændret!"
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Autosvar"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Tager afsted"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Kommer tilbage"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Indstillinger"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Ikke tilstede"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Emne"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Meddelelse"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Autosvar er fjernet!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Autosvar er aktiveret!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Du har allerede et autosvar indstillet!"
|
||||
|
||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "Adgangskoderne er ikke ens!<br />Eller er tomme!"
|
||||
|
||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "Til"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Kan ikke ændre adgangskoden!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Du glemte at skrive din nuværende adgangskode!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "Din adgangskode er ændret!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Nuværende adgangskode"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Ny adgangskode"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Ny adgangskode (igen)"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Log af og log ind igen med din nye adgangskode!"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Jeg er ikke tilstede i perioden <dato> til <dato>. I nødstilfælde kan <kontaktperson> kontaktes."
|
||||
Binary file not shown.
@ -1,127 +0,0 @@
|
||||
# postfixadmin - Plugin for Squirrelmail.
|
||||
# Copyright (C) 2004 FLORIAN KIMMERL
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Florian Kimmerl <info@spacekoeln.de>, 2004.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 0.3-1.4\n"
|
||||
"POT-Creation-Date: 2004-01-28 16:32+0100\n"
|
||||
"PO-Revision-Date: 2004-01-28 16:32+0100\n"
|
||||
"Last-Translator: FLORIAN KIMMERL <info@spacekoeln.de>\n"
|
||||
"Language-Team: GERMAN <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Weiterleitungen"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Hier können Sie E-Mail-Weiterleitungen erstellen und bearbeiten."
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Hier können Sie den Abwesenheits-Assistenten konfigurieren."
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Hier können Sie Passwort ändern. Nach der Änderung müssen Sie sich neu anmelden!"
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "E-Mail"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Ändern Sie Ihr Zugangspasswort für POP3/IMAP"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr "E-Mail Weiterleitungen bearbeiten"
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr "Bearbeiten Sie hier Ihre E-Mail Weiterleitungen*.<br />Ein Eintrag pro Zeile."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Die angegebene E-Mail-Adresse ist ungültig:"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Ihre Weiterleitungen können nicht angefordert werden! Versuchen Sie es später erneut."
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Ihre Weiterleitungen können nicht modifiziert werden! Versuchen Sie es später erneut."
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr "*Zusätzliche Weiterleitungen erhalten alle Nachrichten als Kopie (BCC)!"
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr "Weiterleitungen wurden erfolgreich geändert!"
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Abwesenheits-Assistent"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Ich bin weg"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Ich bin zurück"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Optionen"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Betreff"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Nachrichtentext"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Iher Abwesenheits-Nachricht wurde deaktiviert!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Ihre Abwesenheits-Nachricht wurde aktiviert!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Ihre Abwesenheits-Nachricht ist bereits aktiviert!"
|
||||
|
||||
msgid "back"
|
||||
msgstr "zurück"
|
||||
|
||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "Die beiden neuen Passwörter stimmen nicht überein!<br />Oder die Felder wurden nicht ausgefüllt!"
|
||||
|
||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "An"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Ihr Passwort kann nicht geändert werden!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Ihr aktuelles Passwort wurde nicht angegeben oder ist falsch!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "Ihr Passwort wurde ergolgreich geändert!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Passwort aktuell"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Passwort neu"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Passwort neu nochmal"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Bitte melden Sie sich hier ab und loggen sich mit Ihrem neuen Passwort erneut ein! "
|
||||
Binary file not shown.
@ -1,135 +0,0 @@
|
||||
# postfixadmin - Plugin for Squirrelmail.
|
||||
# Copyright (C) 2004 FLORIAN KIMMERL
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Florian Kimmerl <info@spacekoeln.de>, 2004.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 0.3-1.4\n"
|
||||
"POT-Creation-Date: 2004-01-28 16:32+0100\n"
|
||||
"PO-Revision-Date: 2004-01-28 16:32+0100\n"
|
||||
"Last-Translator: FLORIAN KIMMERL <info@spacekoeln.de>\n"
|
||||
"Language-Team: HUNGARIAN <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-2\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Levéltovábbítás"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Itt tudod létrehozni és szerkeszteni az E-mail továbbításokat."
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Itt lehet beállítani az automatikus válasz levél szövegét, ha az ember távol van."
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Itt tudod megváltoztatni a belépéshez szükséges jelszót."
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "E-mail"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Jelszó megváltoztatása"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Bejelentkezési jelszó megváltoztatása"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Forward"
|
||||
msgstr "Levéltovábbítás szerkesztése"
|
||||
|
||||
msgid "Edit Alias"
|
||||
msgstr "Levéltovábbítás szerkesztése"
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Az E-mail cím amit beírtál hibás:"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Hiba az e-mail címmel."
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "A módosítás sikertelen!"
|
||||
|
||||
msgid "Alias successfully changed!"
|
||||
msgstr "A módosítás sikeres!"
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Automatikus válasz"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Házonkívül vagyok"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Visszajöttem"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Opciók"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Házonkívül"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Tárgy"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Levéltörzs"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Az automatikus válasz törölve lett!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Az automatikus válasz be lett állítva!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Már létezik egy automatikus válasz!"
|
||||
|
||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "A jelszavak nem egyeznek!<br />Vagy üresen hagytad a mezõket!"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "A jelszó megváltoztatása sikertelen!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Az aktuális jelszó nem megfelelõ!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "A jelszó változtatása sikeres volt!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Aktuális jelszó"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Új jelszó"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Új jelszó mégegyszer"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Kérjük, jelentkezzen ki, majd újra be az új jelszavával!"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Házonkívül leszek <date> és <date> között. Sürgõs esetben értesítendõ: <contact person>."
|
||||
|
||||
msgid "One copy always goes to"
|
||||
msgstr "Egy másolat mindig ide"
|
||||
|
||||
msgid "Another copy also goes to"
|
||||
msgstr "További másolatok ide"
|
||||
|
||||
msgid "Enter an email address (or addresses) where you would like an additional copy of messages addressed to you sent.<br> Enter only one address per line."
|
||||
msgstr "Sorolja fel azokat az e-mail címeket, amelyekre az Önhöz érkezõ leveleket továbbítani szeretné.<br>Soronként csak egy címet adjon meg!"
|
||||
|
||||
msgid "A copy of each message will go to both your mailbox and the forwarded address(es)."
|
||||
msgstr "Minden Önnek címzett levél meg fog érkezni a saját postafiókjába és a továbbított e-mail címekre is."
|
||||
|
||||
msgid "To remove a Forward, simply delete its line from the text box."
|
||||
msgstr "Ahhoz, hogy töröljön egy továbbítást, ki kell törölnie az adott sort a felsorolásból."
|
||||
@ -1,129 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
||||
"PO-Revision-Date: 2010-02-19 11:30+0100\n"
|
||||
"Last-Translator: valentina <ruggiolona@tiscali.it>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Inoltro E-MAIL"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Qui puoi creare e modificare l'inoltro dell' E-MAIL."
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Imposta un messaggio OUT OF OFFICE / ASSENTE o un risponditore automatico per la tua mail."
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Modifica la tua password di accesso alla mail"
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "Alias"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Modifica password"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Modifica la tua password di accesso"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr "Modifica Alias"
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr "Modifica un Alias per il tuo dominio.<br />Un record per linea."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "L'indirizzo email che hai inserito non è corretto:"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Impossibile trovare l'alias!"
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Impossibile modificare l'alias!"
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr "* L'inoltro ad un alias aggiuntivo comporta l'invio del messaggio in BCC!"
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr "Alias modificato correttamente!"
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Risponditore automatico"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Going Away"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Coming Back"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Opzioni"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Out of Office/Assente"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Oggetto"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Messaggio"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Il risponditore automatico è stato disattivato!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Il risponditore automatico è stato configurato!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Hai gia configurato il risponditore automatico !"
|
||||
|
||||
#: postfixadmin_changepass.php:81
|
||||
#: postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "Le password inserite non coincidono!<br />O i campi sono vuoti!"
|
||||
|
||||
#: postfixadmin_forward.php:70
|
||||
#: postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Impossibile modificare la password"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Non hai indicato la password attuale!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "La tua password è stata modificata!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Password attuale"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Nuova password"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Insierisci nuovamente la nuova password"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Per favore fai log out e riaccedi alla tua mail con la nuova password!"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Mi dispiace sarò assente dal <date> al <date>. Per richieste urgenti vi prego di contattare <nome e indirizzo email>. I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
|
||||
Binary file not shown.
@ -1,131 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: postfixadmin-squirrelmail 2.1.0\n"
|
||||
"POT-Creation-Date: 2007-11-16 17:35+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Johan <johan@double-l.nl>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=iso-8859-2\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Doorsturen"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Hier kunt u uw doorstuur adres bewerken"
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Configureer hier uw automatisch beantwoorden"
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Verander uw wachtwoord"
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "Alias"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Verander wachtwoord"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Verander uw login wachtwoord"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Forwards"
|
||||
msgstr "Bewerk aliassen"
|
||||
|
||||
msgid "Edit an alias* for your email address.<br />One entry per line."
|
||||
msgstr "Bewerk uw alias(sen) voor uw emailadres.<br />1 alias per regel."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Het ingevoerde adres is geen geldig adres"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Niet in staat opgeven alias te vinden!"
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Niet in staat de alias aan te passen"
|
||||
|
||||
msgid "*Additional forward-aliases always receive messages BBC!"
|
||||
msgstr "Aliassen ontvangen altijd per BCC! "
|
||||
|
||||
msgid "To remove an alias, simply delete its line from the text box."
|
||||
msgstr "Verwijder de regel om de alias(sen) te verwijderen."
|
||||
|
||||
msgid "Alias successfully changed!"
|
||||
msgstr "Alias succesvol aangepast"
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Automatisch beantwoorden"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Ik ben weg, schakel Out of Office IN"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Ik ben terug, schakel Out of Office UIT"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Opties"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Out of office"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Onderwerp"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Tekst"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Uw automatisch beantwoorden is verwijderd!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Uw automatisch beantwoorden is geactiveerd!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Automatisch beantwoorden is al geconfigureerd!"
|
||||
|
||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "De wachtwoorden komen niet overeen!<br />Of er is geen wachtwoord opgegeven!"
|
||||
|
||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "Aan"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Niet in staat uw wachtwoord te wijzigen!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "U moet uw huidige wachtwoord opgeven!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "Uw wachtwoord is gewijzigd!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Huidig wachtwoord"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Nieuw wachtwoord"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Nieuw wachtwoord nogmaals"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Log uit en opnieuw in met het nieuwe wachtwoord"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Ik ben niet aanwezig van <datum> tot <datum>. Voor dringende zaken kunt u contact opnemen met <Contact persoon>."
|
||||
|
||||
Binary file not shown.
@ -1,132 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
||||
"PO-Revision-Date: 2007-07-20 20:46+0100\n"
|
||||
"Last-Translator: Krzysztof Laska <krzysiek@dip.pl>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=iso-8859-2\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Przekazywanie"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Tutaj mo¿esz ustawiæ i edytowaæ opcje przekazywania wiadomo¶ci"
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Ustaw wiadomo¶æ wysy³an± nadawcom podczas Twojej nieobecno¶ci (Vacation)"
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Zmieñ has³o do swojego konta pocztowego"
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr "Konto"
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Zmieñ has³o"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Zmieñ has³o do swojego konta pocztowego"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr "Edytuj adresy do przekazywania"
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr "Edytuj forward* dla swojego konta. <br/> Ka¿dy adres w nowym wierszu."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Adres e-mail jaki poda³e¶ jest niepoprawny:"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Nie mo¿na zlokalizowaæ aliasu!"
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Nie mo¿na zmodyfikowaæ aliasu!"
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr "*Wszystkie dodatkowe adresy zawsze odbieraj± wiadomo¶ci przesy³ane jako BCC! Ca³a poczta jest przekazywana i nie jest przechowywana na koncie podstawowym!"
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr "Zmiana zachowana!"
|
||||
|
||||
msgid "To remove an alias, simply delete it's line from the text box."
|
||||
msgstr "¯eby wy³±czyæ forward na dane konto po prostu usuñ liniê z adresem na który nie chcesz ju¿ przekazywaæ poczty."
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Autoodpowied¼"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "W³±cz autoodpowied¼"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Wy³±cz autoodpowied¼"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Opcje"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Autoodpowied¼"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Temat"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Tre¶æ"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Twoja autoodpowied¼ zosta³a wy³±czona!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Twoja autoodpowied¼ zosta³a w³±czona!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Masz ju¿ skonfigurowan± autoodpowied¼!"
|
||||
|
||||
#: postfixadmin_changepass.php:81
|
||||
#: postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "Has³a które poda³e¶ nie pasuj± lub s± puste!"
|
||||
|
||||
#: postfixadmin_forward.php:70
|
||||
#: postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "Do"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Nie mo¿na zmieniæ has³a!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Nie poda³e¶ aktualnego has³a!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "Twoje has³o zosta³o zmienione!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "Bie¿±ce has³o"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Nowe has³o"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Powtórz nowe has³o"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Wyloguj siê i zaloguj z nowym has³em!"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Nie bêdê odbieraæ poczty pomiêdzy <data> a <data>. W sprawach pilnych proszê kontaktowaæ siê z <osoba kontaktowa>"
|
||||
|
||||
Binary file not shown.
@ -1,127 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
||||
"PO-Revision-Date: 2008-10-16 20:30+3\n"
|
||||
"Last-Translator: Julio Covolato <julio@psi.com.br>\n"
|
||||
"Language-Team: BRAZILIAN PORTUGUESE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr "Encaminhar"
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr "Aqui Você pode criar e editar alias."
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr "Configurar mensagem de férias para seu email."
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr "Troque a senha de seu email."
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr ""
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr "Mudar Senha"
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr "Mude sua senha de login"
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr "Editar Alias"
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr "Editar um alias* para seu domínio.<br /> Uma entrada por linha."
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr "Este endereço de email informado não é válido:"
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr "Alias não encontrado!"
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr "Impossível modificar o alias!"
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr "*Alias adicionais sempre recebem mensagens em BCC"
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr "Alias alterado com sucesso!"
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr "Auto resposta"
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr "Ativar"
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr "Desativar"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Opções"
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr "Fora do escritório"
|
||||
|
||||
msgid "Subject"
|
||||
msgstr "Assunto"
|
||||
|
||||
msgid "Body"
|
||||
msgstr "Mensagem"
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr "Sua auto resporta foi removida!"
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr "Sua auto resposta foi ativada!"
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr "Você ainda tem uma auto resposta ativa"
|
||||
|
||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr "A senha digitada não confere!<br />Ou está vazia"
|
||||
|
||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr "Para"
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr "Impossível alterar a sua senha!"
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr "Você não forneceu a sua senha atual!"
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr "Sua senha foi alterada com sucesso!"
|
||||
|
||||
msgid "Password current"
|
||||
msgstr "senha atual"
|
||||
|
||||
msgid "Password new"
|
||||
msgstr "Nova senha"
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr "Confirme a nova senha"
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr "Por favor, saia e entre novamente no webmail com a nova senha"
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr "Estarei fora do escritório entre os dias <data> e <data> do mês de <mês>.<br /> Qualquer mensagem urgente, favor enviar para o email <email>."
|
||||
@ -1,127 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: setup.php
|
||||
msgid "Forwarding"
|
||||
msgstr ""
|
||||
|
||||
msgid "Here you can create and edit E-Mail forwards."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
||||
msgstr ""
|
||||
|
||||
msgid "Change your mailbox password."
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_changepass.php
|
||||
msgid "Alias"
|
||||
msgstr ""
|
||||
|
||||
msgid "Change Password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Change your login password"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_forward.php
|
||||
msgid "Edit Alias"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
||||
msgstr ""
|
||||
|
||||
msgid "The email address that you have entered is not valid:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to locate alias!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to modify the alias!"
|
||||
msgstr ""
|
||||
|
||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Alias successfully changend!"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_vacation.php
|
||||
msgid "Auto Response"
|
||||
msgstr ""
|
||||
|
||||
msgid "Going Away"
|
||||
msgstr ""
|
||||
|
||||
msgid "Coming Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Out of Office"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subject"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your auto response has been removed!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your auto response has been set!"
|
||||
msgstr ""
|
||||
|
||||
msgid "You already have an auto response configured!"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
||||
msgid "To"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_changepass.php:101
|
||||
msgid "Unable to change your password!"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_changepass.php:75
|
||||
msgid "You didn't supply your current password!"
|
||||
msgstr ""
|
||||
|
||||
#: postfixadmin_changepass.php:96
|
||||
msgid "Your password has been changed!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password current"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password new"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password new again"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please sign out and log back again with your new password!"
|
||||
msgstr ""
|
||||
|
||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
||||
msgstr ""
|
||||
@ -1,125 +0,0 @@
|
||||
<?php
|
||||
require_once(dirname(__FILE__) . '/common.php');
|
||||
|
||||
$xmlrpc = get_xmlrpc();
|
||||
$user = $xmlrpc->getProxy('user');
|
||||
|
||||
global $username;
|
||||
|
||||
do_header();
|
||||
|
||||
$USERID_USERNAME = $username;
|
||||
$tmp = preg_split('/@/', $USERID_USERNAME);
|
||||
$USERID_DOMAIN = $tmp[1];
|
||||
|
||||
|
||||
$stMessage = '';
|
||||
$tMessage = '';
|
||||
$pPassword_admin_text = '';
|
||||
$pPassword_password_current_text = '';
|
||||
$pPassword_password_text = '';
|
||||
$error = 0;
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST") {
|
||||
//$pPassword_password_text = _("pPassword_password_text");
|
||||
$fPassword_current = $_POST['fPassword_current'];
|
||||
$fPassword = $_POST['fPassword'];
|
||||
$fPassword2 = $_POST['fPassword2'];
|
||||
$username = $USERID_USERNAME;
|
||||
|
||||
if (!$user->login($_SESSION['username'], $_POST['fPassword_current'])) {
|
||||
$error = 1;
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$pPassword_password_current_text = _("You didn't supply your current password!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
$min_length = 0;
|
||||
if (isset($CONF['min_password_length'])) {
|
||||
$min_length = $CONF['min_password_length'];
|
||||
}
|
||||
if (empty($fPassword) or ($fPassword != $fPassword2) or ($min_length > 0 && strlen($fPassword) < $min_length)) {
|
||||
$error = 1;
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
if (empty($fPassword)) {
|
||||
$pPassword_password_text .= _("The passwords that you supplied are empty!");
|
||||
}
|
||||
if ($fPassword != $fPassword2) {
|
||||
$pPassword_password_text .= _("The passwords that you supplied don't match!");
|
||||
}
|
||||
if ($min_length > 0 && strlen($fPassword) < $min_length) {
|
||||
$pPassword_password_text .= _("The password you supplied is too short!");
|
||||
}
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
|
||||
if ($error != 1) {
|
||||
$success = $user->changePassword($fPassword_current, $fPassword);
|
||||
|
||||
if ($success) {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("Your password has been changed!");
|
||||
$stMessage = _("Please sign out and log back again with your new password!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
} else {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("Unable to change your password!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
}
|
||||
}
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "<table bgcolor=\"$color[0]\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
|
||||
<tr>
|
||||
<td align=\"center\"><b>". _("Options") ." - ". _("Change Password")." </b>
|
||||
<table align=\"center\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">
|
||||
<tr><td bgcolor=\"$color[4]\" align=\"center\"><br>
|
||||
<table align=\"center\" width=\"95%\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\"><tr>
|
||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>" ._("Change your login password") ."\n
|
||||
</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td bgcolor=\"$color[0]\" align=\"center\"><form name=\"mailbox\" method=\"post\">
|
||||
<b>$tMessage<b><font color=red><br>
|
||||
<a href=\"../../src/signout.php\" target=\"_top\">$stMessage</a>
|
||||
".$pPassword_admin_text."\n
|
||||
".$pPassword_password_current_text."\n
|
||||
".$pPassword_password_text."\n
|
||||
</b><table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">
|
||||
<tr>
|
||||
<td width=\"37%\"><b>". _("Alias") . ":\n</td>
|
||||
<td width=\"63%\">{$_SESSION['username']}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>". _("Password current"). ":\n</td>
|
||||
<td><input type=\"password\" name=\"fPassword_current\" size=\"30\" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>". _("Password new"). ":\n</td>
|
||||
<td><input type=\"password\" name=\"fPassword\" size=\"30\" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>". _("Password new again"). ":\n</td>
|
||||
<td><input type=\"password\" name=\"fPassword2\" size=\"30\" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><input type=\"submit\" name=\"submit\" value=\"" ._("Change Password") . "\" /></td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</table>
|
||||
<TT></TT></FORM></td>
|
||||
</tr><tr><td bgcolor=\"$color[4]\" align=\"left\"> </td>
|
||||
</tr></table><BR>
|
||||
</td>
|
||||
</tr></table></td></tr></table>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
@ -1,159 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . '/common.php');
|
||||
|
||||
|
||||
|
||||
$USERID_USERNAME = $username;
|
||||
$tmp = preg_split('/@/', $USERID_USERNAME);
|
||||
$USERID_LOCALPART = $tmp[0];
|
||||
$USERID_DOMAIN = $tmp[1];
|
||||
|
||||
$xmlrpc = get_xmlrpc();
|
||||
$alias = $xmlrpc->getProxy('alias');
|
||||
do_header();
|
||||
// Normal page request (GET)
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET") {
|
||||
$row = $alias->get();
|
||||
if ($row === false) {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("Unable to locate alias!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST") {
|
||||
$pEdit_alias_goto = _("To");
|
||||
|
||||
$fGoto = $_POST['fGoto'];
|
||||
|
||||
// reform string into a list...
|
||||
$goto = preg_replace('/\r\n/', ',', $fGoto);
|
||||
$goto = preg_replace('/[\s]+/i', '', $goto);
|
||||
$goto = preg_replace('/\,*$/', '', $goto);
|
||||
$array = preg_split('/,/', $goto);
|
||||
$error = 0;
|
||||
// check that we have valid addresses in the list
|
||||
|
||||
foreach ($array as $key => $email_address) {
|
||||
if (empty($email_address)) {
|
||||
unset($array[$key]);
|
||||
continue;
|
||||
}
|
||||
if (check_email($email_address) != "") {
|
||||
$error = 1;
|
||||
$tGoto = $goto;
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("The email address that you have entered is not valid:") . " $email_address</font>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
}
|
||||
if ($error != 1) {
|
||||
$flag = 'forward_and_store'; // goto = $USERID_USERNAME;
|
||||
$success = $alias->update($array, $flag);
|
||||
if (!$success) {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("Unable to modify the alias!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
} else {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "<p align=center><b>". _("Alias successfully changed!"). "\n</b></p>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
echo "<p align=center><a href=\"javascript:history.go(-1)\">". _("Click here to go back") ."</a></p>";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
|
||||
if (!isset($tMessage)) {
|
||||
$tMessage = '';
|
||||
}
|
||||
echo "<table bgcolor=\"$color[0]\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
|
||||
<tr>
|
||||
<td align=\"center\" bgcolor=\"$color[0]\" colspan=\"2\">
|
||||
<b>". _("Options") ." - ". _("Edit Alias"). " </b>
|
||||
<table align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">
|
||||
<tr>
|
||||
<td bgcolor=\"$color[4]\" align=\"center\">
|
||||
<table align=\"center\" width=\"100%\">
|
||||
<tr>
|
||||
<td align=\"left\">". _("Edit an alias* for your email address.<br />One entry per line."). " </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=\"left\">". _("*Additional forward-aliases always receive messages BCC!"). "\n
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=\"left\">" . _("To remove an alias, simply delete its line from the text box.") . "</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table align=\"center\" width\"95%\" cellpadding=\"5\" cellspacing=\"1\">
|
||||
<form name=\"mailbox\" method=\"post\">
|
||||
<tr>
|
||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>". _("Edit Forwards"). "</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td bgcolor=\"$color[5]\" align=\"center\">$tMessage
|
||||
<table cellpadding=\"5\" cellspacing=\"1\">
|
||||
<tr>
|
||||
<th align=\"left\">". _("Alias"). ":\n
|
||||
</th>
|
||||
<td align=\"left\">" . $_SESSION['username'] . "</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align=\"left\" valign=\"top\">". _("To"). ":\n</th>
|
||||
<td>
|
||||
<textarea rows=\"8\" cols=\"50\" name=\"fGoto\">";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
$aliases = $alias->get();
|
||||
foreach ($aliases as $address) {
|
||||
if ($address == "" || $address == null) {
|
||||
continue;
|
||||
}
|
||||
print "$address\n";
|
||||
}
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "
|
||||
</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<td align=\"left\"colspan=\"2\">
|
||||
<input type=\"submit\" name=\"submit\" value=\"" . _("Edit Alias") . "\">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
@ -1,141 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . '/common.php');
|
||||
|
||||
$xmlrpc = get_xmlrpc();
|
||||
$vacation = $xmlrpc->getProxy('vacation');
|
||||
|
||||
$VACCONFTXT = _("I will be away from <date> until <date>. For urgent matters you can contact <contact person>.");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
$VACCONF = <<<EOM
|
||||
$VACCONFTXT
|
||||
EOM;
|
||||
|
||||
do_header();
|
||||
|
||||
$USERID_USERNAME = $username;
|
||||
$tmp = preg_split('/@/', $USERID_USERNAME);
|
||||
$USERID_DOMAIN = $tmp[1];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET") {
|
||||
$details = $vacation->getDetails();
|
||||
if ($vacation->checkVacation()) {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("You already have an auto response configured!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "<table bgcolor=\"#b8cbdc\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\"><tr>
|
||||
<td align=\"center\"><b>". _("Options") ." - ". _("Auto Response") ."</b>
|
||||
<table align=\"center\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">
|
||||
<tr><td bgcolor=\"$color[4]\" align=\"center\"><br>
|
||||
<table align=\"center\" width=\"70%\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\"><tr>
|
||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>". _("Auto Response") ."\n
|
||||
</b></td></tr><tr>
|
||||
<td bgcolor=\"$color[0]\" align=\"center\"><form name=\"vacation\" method=\"post\">
|
||||
<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">
|
||||
<tr>
|
||||
<td><center>$tMessage<p></center></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <div align=\"center\">
|
||||
<input type=\"submit\" name=\"fBack\" value=\"" . _("Coming Back"). "\" />
|
||||
</div></td>
|
||||
</tr>
|
||||
</table>
|
||||
<TT></TT></FORM>
|
||||
</td>
|
||||
</tr><tr><td bgcolor=\"$color[4]\" align=\"left\"> </td>
|
||||
</tr></table><BR></td></tr></table></td></tr></table>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
} else {
|
||||
$tSubject = "Out of Office";
|
||||
$tSubject = $details['subject'];
|
||||
$VACCONF = $details['body'];
|
||||
|
||||
$tMessage = '';
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "<table bgcolor=\"$color[0]\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
|
||||
<tr>
|
||||
<td align=\"center\"><b>". _("Options") ." - ". _("Auto Response") ." </b>
|
||||
<table align=\"center\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">
|
||||
<tr><td bgcolor=\"$color[4]\" align=\"center\"><br>
|
||||
<table align=\"center\" width=\"70%\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\"><tr>
|
||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>" . _("Auto Response") ."\n
|
||||
</b></td></tr><tr>
|
||||
<td bgcolor=\"$color[0]\" align=\"center\"><form name=\"vacation\" method=\"post\">$tMessage
|
||||
<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr>
|
||||
<td width=\"23%\">". _("Subject") .":\n</td>
|
||||
<td width=\"2%\"> </td>
|
||||
<td width=\"69%\"><input type=\"text\" name=\"fSubject\" value=\"" . $tSubject . "\" /></td>
|
||||
<td width=\"2%\"> </td>
|
||||
<td width=\"4%\"> </td>
|
||||
</tr><tr>
|
||||
<td>". _("Body") .":\n</td>
|
||||
<td> </td>
|
||||
<td><textarea rows=\"10\" cols=\"80\" name=\"fBody\">$VACCONF\n
|
||||
</textarea></td><td> </td><td> </td></tr><tr><td> </td><td> </td>
|
||||
<td><input type=\"submit\" name=\"fAway\" value=\"" . _("Going Away") . "\" /></td>
|
||||
<td> </td><td> </td></tr>
|
||||
</table><TT></TT></FORM></td>
|
||||
</tr><tr><td bgcolor=\"$color[4]\" align=\"left\"> </td>
|
||||
</tr></table><BR></td></tr></table></td></tr></table>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST") {
|
||||
$fBack = null;
|
||||
$fAway = null;
|
||||
foreach (array('fBack', 'fAway', 'fSubject', 'fBody') as $key) {
|
||||
$$key = null;
|
||||
if (isset($_POST[$key])) {
|
||||
$$key = $_POST[$key];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($fBack)) {
|
||||
$success = $vacation->remove();
|
||||
|
||||
if (!$success) {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("Unable to update your auto response settings!");
|
||||
echo "<p>This may signify an error; please contact support (1)</p>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
} else {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "<p align=center><b>". _("Your auto response has been removed!") ."</b></p>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($fAway)) {
|
||||
// add record into vacation
|
||||
$success = $vacation->setAway($fSubject, $fBody);
|
||||
|
||||
if (!$success) {
|
||||
$error = 1;
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$tMessage = _("Unable to update your auto response settings!");
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
} else {
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
echo "<p align=center><b>". _("Your auto response has been set!") ."</b></p>";
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,62 +0,0 @@
|
||||
<?php
|
||||
// vim:ts=4:sw=4:et
|
||||
if (!defined('SM_PATH')) {
|
||||
die("Invalid internal state (don't access file directly)");
|
||||
}
|
||||
include_once(SM_PATH . 'functions/i18n.php');
|
||||
|
||||
function squirrelmail_plugin_init_postfixadmin() {
|
||||
include(dirname(__FILE__) . '/config.php');
|
||||
global $squirrelmail_plugin_hooks;
|
||||
|
||||
$squirrelmail_plugin_hooks['optpage_register_block']['postfixadmin'] = 'postfixadmin_optpage_register_block';
|
||||
}
|
||||
|
||||
function postfixadmin_version() {
|
||||
return '2.3.0';
|
||||
}
|
||||
|
||||
function postfixadmin_optpage_register_block() {
|
||||
// Gets added to the user's OPTIONS page.
|
||||
global $optpage_blocks;
|
||||
global $AllowVacation;
|
||||
global $AllowChangePass;
|
||||
|
||||
// if ( !soupNazi() ) {
|
||||
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
$optpage_blocks[] = array(
|
||||
'name' => _("Forwarding"),
|
||||
'url' => '../plugins/postfixadmin/postfixadmin_forward.php',
|
||||
'desc' => _("Here you can create and edit E-Mail forwards."),
|
||||
'js' => false
|
||||
);
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
if ($AllowVacation) {
|
||||
$optpage_blocks[] = array(
|
||||
'name' => _("Auto Response"),
|
||||
'url' => '../plugins/postfixadmin/postfixadmin_vacation.php',
|
||||
'desc' => _("Set an OUT OF OFFICE message or auto responder for your mail."),
|
||||
'js' => false
|
||||
);
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
||||
textdomain('postfixadmin');
|
||||
if ($AllowChangePass) {
|
||||
$optpage_blocks[] = array(
|
||||
'name' => _("Change Password"),
|
||||
'url' => '../plugins/postfixadmin/postfixadmin_changepass.php',
|
||||
'desc' => _("Change your mailbox password."),
|
||||
'js' => false
|
||||
);
|
||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
||||
textdomain('squirrelmail');
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
postfixadmin
|
||||
2.3.0
|
||||
@ -1,193 +1,185 @@
|
||||
<?php
|
||||
/*
|
||||
Virtual Mail Delete
|
||||
by George Vieira <george at citadelcomputer dot com dot au>
|
||||
|
||||
You can run this from your crontab with something like
|
||||
|
||||
0 4 * * * * vmail php -q virtualmaildel.php >/dev/null
|
||||
|
||||
Changes:
|
||||
2017.08.31 updated to use PHP mysqli extension.
|
||||
2018.02.23 removing Sieve filters if exists.
|
||||
Tadas Ustinavičius <tadas at ring dot lt> ( https://github.com/postfixadmin/postfixadmin/pull/70 )
|
||||
|
||||
*/
|
||||
|
||||
$CONF = [];
|
||||
|
||||
// Either, uncomment this (and change to work)
|
||||
//require_once('/path/to/postfixadmin/config.inc.php');
|
||||
|
||||
// OR uncomment this.
|
||||
/*
|
||||
$CONF = [
|
||||
'database_host' => 'localhost',
|
||||
'database_user' => 'someone',
|
||||
'database_password' => 'something',
|
||||
'database_name' => 'mydb'
|
||||
];
|
||||
*/
|
||||
|
||||
|
||||
$MAKE_CHANGES = false; // change to true when you're happy this isn't going to trash your server.
|
||||
|
||||
if (empty($CONF)) {
|
||||
die("\nPlease configure me\n\n");
|
||||
}
|
||||
|
||||
// Where's the homedir accounts stored. (GET THIS RIGHT OTHERWISE IT THINK NONE EXIST AND DELETES ALL)
|
||||
$homedir = '/home/virtual';
|
||||
|
||||
if (! is_dir($homedir)) {
|
||||
die("Cannot find home directory for virtual mailboxes in $homedir\n");
|
||||
}
|
||||
|
||||
//
|
||||
// Recursive Delete Function
|
||||
//
|
||||
function deldir($dir) {
|
||||
$current_dir = opendir($dir);
|
||||
while ($entryname = readdir($current_dir)) {
|
||||
if (is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")) {
|
||||
deldir("{$dir}/{$entryname}");
|
||||
} elseif ($entryname != "." and $entryname!="..") {
|
||||
unlink("{$dir}/{$entryname}");
|
||||
}
|
||||
}
|
||||
closedir($current_dir);
|
||||
@rmdir($dir);
|
||||
}
|
||||
// Virtual Mail Delete
|
||||
// by George Vieira <george at citadelcomputer dot com dot au>
|
||||
//
|
||||
// You can run this from your crontab with something like
|
||||
//
|
||||
// 0 4 * * * * vmail php -q virtualmaildel.php >/dev/null
|
||||
|
||||
//
|
||||
// Setup location of postfixadmin config files. Needed to login to mysql
|
||||
//
|
||||
$conf = '/home/httpd/mail/admin/config.inc.php';
|
||||
|
||||
//
|
||||
// Where's the homedir accounts stored. (GET THIS RIGHT OTHERWISE IT THINK NONE EXIST AND DELETES ALL)
|
||||
//
|
||||
$homedir = '/home/virtual';
|
||||
|
||||
//
|
||||
// Make sure everything is everything before continuing
|
||||
//
|
||||
if ( ! file_exists( $conf ) )
|
||||
die( "Cannot find config file $conf\n" );
|
||||
|
||||
if ( ! is_dir( $homedir ) )
|
||||
die( "Cannot find home directory for virtual mailboxes in $homedir\n" );
|
||||
|
||||
//
|
||||
// Load mysql authentication from postfixadmin
|
||||
//
|
||||
include( $conf );
|
||||
|
||||
//
|
||||
// Recursive Delete Function
|
||||
//
|
||||
function deldir($dir)
|
||||
{
|
||||
$current_dir = opendir($dir);
|
||||
while($entryname = readdir($current_dir))
|
||||
{
|
||||
if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!=".."))
|
||||
{
|
||||
deldir("${dir}/${entryname}");
|
||||
}
|
||||
elseif($entryname != "." and $entryname!="..")
|
||||
{
|
||||
unlink("${dir}/${entryname}");
|
||||
}
|
||||
}
|
||||
closedir($current_dir);
|
||||
@rmdir(${dir});
|
||||
}
|
||||
|
||||
// --- Main Start ---
|
||||
|
||||
$dir = [];
|
||||
|
||||
//
|
||||
// Get list of directories
|
||||
//
|
||||
$fr = opendir($homedir);
|
||||
|
||||
// TODO: Would glob($homedir . '/**/*/new') be somewhat quicker/shorter/less effort?
|
||||
|
||||
while (($domain = readdir($fr)) !== false) {
|
||||
//
|
||||
// Check if it's a dir
|
||||
//
|
||||
if ($domain == "." || $domain == ".." || filetype($homedir .'/'. $domain) != "dir") {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
// Open the (assumed) DOMAIN directory
|
||||
//
|
||||
$ff = opendir($homedir .'/'. $domain);
|
||||
while (($user = readdir($ff)) !== false) {
|
||||
//
|
||||
// Check for directories assuming it's a user account
|
||||
//
|
||||
if ($user == "." || $user == ".." || filetype($homedir .'/'. $domain .'/'. $user) != "dir") {
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// if the dir 'new' exists inside then it's an account
|
||||
//
|
||||
if (file_exists($homedir .'/'. $domain .'/'. $user .'/'. "new")) {
|
||||
$dir[$domain][$user] = "";
|
||||
} else {
|
||||
//
|
||||
// Alert that the dir doesn't have a 'new' dir, possibly not an account. Leave it.
|
||||
//
|
||||
echo "UNKNOWN : " . $homedir ."/". $domain ."/". $user ."/new NOT FOUND. Possibly not an account. Leaving untouched\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// OK, got an array of accounts from the dir, Now connect to the DB and check them
|
||||
//
|
||||
$conx = mysqli_connect($CONF['database_host'], $CONF['database_user'], $CONF['database_password'], $CONF['database_name']);
|
||||
//
|
||||
// Is there a problem connecting?
|
||||
//
|
||||
if (! $conx || mysqli_connect_errno()) {
|
||||
echo "DB connection failed." . mysqli_connect_error() . "\n";
|
||||
die("Problem connecting to the database. ");
|
||||
}
|
||||
|
||||
//
|
||||
// Select all mailboxes to verify against dirs listed in array
|
||||
//
|
||||
$query = "SELECT * FROM mailbox";
|
||||
$result = mysqli_query($conx, $query);
|
||||
|
||||
//
|
||||
// Query the mailbox table
|
||||
//
|
||||
if (! $result) {
|
||||
die("Failed to query mailbox table.");
|
||||
}
|
||||
|
||||
//
|
||||
// Fetch the list of results
|
||||
//
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
//
|
||||
// Pull apart the maildir field, needed to figure out the directory structure to compare
|
||||
//
|
||||
$strip = explode("/", $row['maildir']);
|
||||
//
|
||||
// Unset the array if it exists. This stops it being erased later.
|
||||
//
|
||||
unset($dir[ $strip[0] ][ $strip[1] ]);
|
||||
}
|
||||
//
|
||||
// If there are results. unset the domain too.
|
||||
//
|
||||
if (count($dir[$strip[0]])==0 and mysqli_num_rows($result)>0) {
|
||||
unset($dir[$strip[0]]);
|
||||
}
|
||||
|
||||
//
|
||||
// OK, time to clean up. All known users/domains have been removed from the list.
|
||||
//
|
||||
|
||||
//
|
||||
// If the array still exists (incase nothing there)
|
||||
//
|
||||
if (is_array($dir)) {
|
||||
//
|
||||
// Go through each dir
|
||||
//
|
||||
foreach ($dir as $key => $value) {
|
||||
//
|
||||
// Is this a user array?
|
||||
//
|
||||
if (!is_array($value)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Go through and nuke the folders
|
||||
//
|
||||
foreach ($value as $user => $value2) {
|
||||
// Nuke.. need any more explanations?
|
||||
$path = $homedir . '/' . $key . '/' . $user;
|
||||
$sieve_path = $homedir . '/.sieve/' . $key . '/' . $user;
|
||||
$sieve_exists = file_exists($sieve_path);
|
||||
// check if user has Sieve filters created
|
||||
if ($MAKE_CHANGES) {
|
||||
deldir($path);
|
||||
if ($sieve_exists) {
|
||||
deldir($sieve_path);
|
||||
}
|
||||
} else {
|
||||
echo " - Would recursively delete : $path \n";
|
||||
if ($sieve_exists) {
|
||||
echo " - Would recursively delete Sieve filters : $sieve_path \n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo "Cleanup process completed\n";
|
||||
//
|
||||
// Get list of directories
|
||||
//
|
||||
$fr = opendir( $homedir );
|
||||
while ( ($domain = readdir($fr)) !== false)
|
||||
{
|
||||
//
|
||||
// Check if it's a dir
|
||||
//
|
||||
if ( $domain != "." and $domain != ".." and filetype($homedir .'/'. $domain) == "dir" )
|
||||
{
|
||||
//
|
||||
// Open the (assumed) DOMAIN directory
|
||||
//
|
||||
$ff = opendir( $homedir .'/'. $domain );
|
||||
while ( ($user = readdir($ff)) !== false)
|
||||
{
|
||||
//
|
||||
// Check for directories assuming it's a user account
|
||||
//
|
||||
if ( $user!="." and $user!=".." and filetype($homedir .'/'. $domain .'/'. $user) == "dir" )
|
||||
{
|
||||
//
|
||||
// if the dir 'new' exists inside then it's an account
|
||||
//
|
||||
if ( file_exists($homedir .'/'. $domain .'/'. $user .'/'. "new") )
|
||||
{
|
||||
$dir[$domain][$user] = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Alert that the dir doesn't have a 'new' dir, possibly not an account. Leave it.
|
||||
//
|
||||
echo "UNKNOWN : " . $homedir ."/". $domain ."/". $user ."/new NOT FOUND. Possibly not an account. Leaving untouched\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// OK, got an array of accounts from the dir, Now connect to the DB and check them
|
||||
//
|
||||
$conx = mysql_connect( $CONF['database_host'],$CONF['database_user'],$CONF['database_password'] );
|
||||
//
|
||||
// Is there a problem connecting?
|
||||
//
|
||||
if ( $conx != false )
|
||||
{
|
||||
//
|
||||
// Select the database
|
||||
//
|
||||
mysql_select_db( $CONF['database_name'] , $conx) or die ("Can't access database postfix : " . mysql_error());
|
||||
|
||||
//
|
||||
// Select all mailboxes to verify against dirs listed in array
|
||||
//
|
||||
$query = "SELECT * FROM mailbox";
|
||||
$result = mysql_query( $query );
|
||||
|
||||
//
|
||||
// Query the mailbox table
|
||||
//
|
||||
if ( $result != false )
|
||||
{
|
||||
//
|
||||
// Fetch the list of results
|
||||
//
|
||||
while ( $row = mysql_fetch_assoc( $result ) )
|
||||
{
|
||||
//
|
||||
// Pull apart the maildir field, needed to figure out the directory structure to compare
|
||||
//
|
||||
$strip = explode("/",$row['maildir']);
|
||||
//
|
||||
// Unset the array if it exists. This stops it being erased later.
|
||||
//
|
||||
unset( $dir[ $strip[0] ][ $strip[1] ] );
|
||||
}
|
||||
//
|
||||
// If there are results. unset the domain too.
|
||||
//
|
||||
if ( count($dir[$strip[0]])==0 and mysql_num_rows($result)>0 )
|
||||
unset( $dir[$strip[0]] );
|
||||
}
|
||||
else
|
||||
die( "Failed SELECT in mailboxes\n" );
|
||||
}
|
||||
else
|
||||
die( 'Cannot connect to the database!\n' );
|
||||
|
||||
//
|
||||
// OK, time to clean up. All known users/domains have been removed from the list.
|
||||
//
|
||||
|
||||
//
|
||||
// If the array still exists (incase nothing there)
|
||||
//
|
||||
if ( is_array($dir) )
|
||||
{
|
||||
//
|
||||
// Go through each dir
|
||||
//
|
||||
foreach ( $dir as $key => $value )
|
||||
{
|
||||
//
|
||||
// Is this a user array?
|
||||
//
|
||||
if ( is_array( $value) )
|
||||
{
|
||||
//
|
||||
// Go through and nuke the folders
|
||||
//
|
||||
foreach ( $value as $user => $value2 )
|
||||
{
|
||||
//
|
||||
// Nuke.. need any more explanations?
|
||||
//
|
||||
echo "REMOVING : " . $homedir."/".$key."/".$user."\n" ;
|
||||
deldir( $homedir."/".$key."/".$user ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// And we are outta here....
|
||||
//
|
||||
echo "Cleanup process completed\n";
|
||||
?>
|
||||
|
||||
@ -1,221 +0,0 @@
|
||||
# Example configuration
|
||||
|
||||
The below covers some default(ish) configuration things for using Postfix, Dovecot with PostgreSQL.
|
||||
|
||||
# Postfix
|
||||
|
||||
Assumptions :
|
||||
|
||||
* Mail is delivered into /var/mail/vmail/foo@example.com/
|
||||
* The user with id 8 is used for ownership of mail files.
|
||||
* PostgreSQL is running on the local server
|
||||
* Dovecot is running on the local server, and SASL is used to allow authenticated clients to mail out.
|
||||
|
||||
|
||||
## /etc/postfix/main.cf
|
||||
|
||||
The proxy: bits are optional, you may need to install an additional postfix package on your server to enable them.
|
||||
|
||||
i.e. proxy:pgsql:/path/to/file is equivalent to pgsql:/path/to/file. Use of 'proxy:' may lead to a small performance boost.
|
||||
|
||||
|
||||
```
|
||||
relay_domains = $mydestination, proxy:pgsql:/etc/postfix/pgsql/relay_domains.cf
|
||||
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf
|
||||
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql/virtual_domains_maps.cf
|
||||
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf
|
||||
virtual_mailbox_base = /var/mail/vmail
|
||||
virtual_mailbox_limit = 512000000
|
||||
virtual_minimum_uid = 8
|
||||
virtual_transport = virtual
|
||||
virtual_uid_maps = static:8
|
||||
virtual_gid_maps = static:8
|
||||
local_transport = virtual
|
||||
local_recipient_maps = $virtual_mailbox_maps
|
||||
```
|
||||
|
||||
and for Postfix SASL support :
|
||||
|
||||
```
|
||||
# SASL Auth for SMTP relaying
|
||||
smtpd_sasl_type = dovecot
|
||||
smtpd_sasl_path = private/auth
|
||||
smtpd_sasl_authenticated_header = yes
|
||||
smtpd_sasl_auth_enable = yes
|
||||
smtpd_sasl_security_options = noanonymous
|
||||
broken_sasl_auth_clients = yes
|
||||
```
|
||||
|
||||
## /etc/postfix/pgsql/relay_domains.cf
|
||||
|
||||
```
|
||||
user = postfix
|
||||
password = whatever
|
||||
hosts = localhost
|
||||
dbname = postfix
|
||||
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = true
|
||||
```
|
||||
|
||||
## /etc/postfix/pgsql/virtual_alias_maps.cf
|
||||
|
||||
```
|
||||
user = postfix
|
||||
password = whatever
|
||||
hosts = localhost
|
||||
dbname = postfix
|
||||
query = SELECT goto FROM alias WHERE address='%s' AND active = true
|
||||
```
|
||||
|
||||
## /etc/postfix/pgsql/virtual_domains_maps.cf
|
||||
|
||||
```
|
||||
user = postfix
|
||||
password = whatever
|
||||
hosts = localhost
|
||||
dbname = postfix
|
||||
#query = SELECT domain FROM domain WHERE domain='%s'
|
||||
#optional query to use when relaying for backup MX
|
||||
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = false and active = true
|
||||
```
|
||||
|
||||
## /etc/postfix/pgsql/virtual_mailbox_limits.cf
|
||||
|
||||
```
|
||||
# Used for quota
|
||||
user = postfix
|
||||
password = whatever
|
||||
hosts = localhost
|
||||
dbname = postfix
|
||||
query = SELECT quota FROM mailbox WHERE username='%s'
|
||||
```
|
||||
|
||||
## /etc/postfix/pgsql/virtual_mailbox_maps.cf
|
||||
|
||||
```
|
||||
user = postfix
|
||||
password = whatever
|
||||
hosts = localhost
|
||||
dbname = postfix
|
||||
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = true
|
||||
```
|
||||
|
||||
|
||||
# Dovecot
|
||||
|
||||
(This is from version 2.2.27, Debian Stretch)
|
||||
|
||||
|
||||
## /etc/dovecot/dovecot.conf
|
||||
```
|
||||
mail_location = maildir:/var/mail/vmail/%u/
|
||||
|
||||
namespace inbox {
|
||||
type = private
|
||||
inbox = yes
|
||||
location =
|
||||
mailbox Drafts {
|
||||
special_use = \Drafts
|
||||
}
|
||||
mailbox Junk {
|
||||
special_use = \Junk
|
||||
}
|
||||
mailbox Sent {
|
||||
special_use = \Sent
|
||||
}
|
||||
mailbox "Sent Messages" {
|
||||
special_use = \Sent
|
||||
}
|
||||
mailbox Trash {
|
||||
special_use = \Trash
|
||||
}
|
||||
prefix =
|
||||
}
|
||||
|
||||
protocols = "imap pop3"
|
||||
|
||||
# Requires certificates ...
|
||||
#ssl = yes
|
||||
#ssl_cert = </etc/dovecot/private/something.pem
|
||||
#ssl_key = </etc/letsencrypt/certs/something.key
|
||||
|
||||
login_greeting = My Mail Server
|
||||
# http://wiki2.dovecot.org/Authentication/Mechanisms
|
||||
# login is for outlook express ...
|
||||
auth_mechanisms = plain login
|
||||
#auth_debug = yes
|
||||
#auth_debug_passwords=yes
|
||||
|
||||
# Postfix - Sasl auth support.
|
||||
service auth {
|
||||
# Postfix smtp-auth
|
||||
unix_listener /var/spool/postfix/private/auth {
|
||||
mode = 0660
|
||||
user = postfix
|
||||
group = postfix
|
||||
}
|
||||
# Auth process is run as this user.
|
||||
user = postfix
|
||||
group = postfix
|
||||
}
|
||||
|
||||
service imap {
|
||||
executable = imap
|
||||
}
|
||||
|
||||
userdb {
|
||||
driver = sql
|
||||
args = /etc/dovecot/dovecot-sql.conf
|
||||
}
|
||||
|
||||
passdb {
|
||||
driver = sql
|
||||
args = /etc/dovecot/dovecot-sql.conf
|
||||
}
|
||||
|
||||
# Needs to match Postfix virtual_uid_maps
|
||||
first_valid_uid = 8
|
||||
|
||||
# disallow or allow plaintext auth.
|
||||
disable_plaintext_auth = yes
|
||||
|
||||
mail_plugins = $mail_plugins zlib
|
||||
|
||||
plugin {
|
||||
zlib_save_level = 6
|
||||
zlib_save = gz
|
||||
}
|
||||
protocol imap {
|
||||
mail_plugins = $mail_plugins imap_zlib
|
||||
}
|
||||
|
||||
mail_max_userip_connections = 50
|
||||
log_path = /var/log/dovecot.log
|
||||
|
||||
```
|
||||
|
||||
|
||||
## /etc/dovecot/dovecot-sql.conf
|
||||
|
||||
Ideally dovecot has a different read only database user.
|
||||
|
||||
|
||||
```
|
||||
connect = host=localhost dbname=postfix user=dovecot password=whatever
|
||||
|
||||
driver = pgsql
|
||||
|
||||
# Default password scheme - change to match your Postfixadmin setting.
|
||||
# depends on your $CONF['encrypt'] setting:
|
||||
# md5crypt -> MD5-CRYPT
|
||||
# md5 -> PLAIN-MD5
|
||||
# cleartext -> PLAIN
|
||||
default_pass_scheme = MD5-CRYPT
|
||||
|
||||
# Query to retrieve password. user can be used to retrieve username in other
|
||||
# formats also.
|
||||
|
||||
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
|
||||
|
||||
# Query to retrieve user information, note uid matches dovecot.conf AND Postfix virtual_uid_maps parameter.
|
||||
user_query = SELECT '/var/vmail/mail/' || maildir AS home, 8 as uid, 8 as gid FROM mailbox WHERE username = '%u' AND active = '1'
|
||||
```
|
||||
@ -1,48 +0,0 @@
|
||||
*Description
|
||||
|
||||
This extension adds support for password expiration.
|
||||
It is designed to have expiration on users passwords. An email is sent when the password is expiring in 30 days, then 14 days, then 7 days.
|
||||
It is strongly inspired by https://abridge2devnull.com/posts/2014/09/29/dovecot-user-password-expiration-notifications-updated-4122015/, and adapted to fit with Postfix Admin & Roundcube's password plugin
|
||||
Expiration unit is day
|
||||
Expiration value for domain is set through Postfix Admin GUI
|
||||
|
||||
*Installation
|
||||
|
||||
Perform the following changes:
|
||||
|
||||
**Changes in MySQL/MariaDB mailbox table (as defined in $CONF['database_tables'] from config.inc.php):
|
||||
|
||||
You are invited to backup your DB first, and ensure the table name is correct.
|
||||
|
||||
Execute the attached SQL script (password_expiration.sql) that will add the required columns. The expiration value for existing users will be set to 90 days. If you want a different value, edit line 2 in the script and replace 90 by the required value.
|
||||
|
||||
**Changes in Postfix Admin :
|
||||
|
||||
To enable password expiration, add the following to your config.inc.php file:
|
||||
$CONF['password_expiration'] = 'YES';
|
||||
|
||||
All my tests are performed using $CONF['encrypt'] = 'md5crypt';
|
||||
|
||||
**If you are using Roundcube's password plugin, you should also adapt the $config['password_query'] value.
|
||||
|
||||
I recommend to use:
|
||||
|
||||
$config['password_query'] = 'UPDATE mailbox SET password=%c, modified = now(), password_expiry = now() + interval 90 day';
|
||||
|
||||
of cource you may adapt to the expected expiration value
|
||||
|
||||
All my tests are performed using $config['password_algorithm'] = 'md5-crypt';
|
||||
|
||||
**Changes in Dovecot (adapt if you use another LDA)
|
||||
|
||||
Edit dovecot-mysql.conf file, and replace the user_query (and only this one) by this query:
|
||||
|
||||
password_query = SELECT username as user, password, concat('/var/vmail/', maildir) as userdb_var, concat('maildir:/var/vmail/', maildir) as userdb_mail, 20001 as userdb_uid, 20001 as userdb_gid, m.domain FROM mailbox m, domain d where d.domain = m.domain and m.username = '%u' AND m.active = '1' AND (m.password_expiry > now() or d.password_expiry = 0)
|
||||
|
||||
Of course you may require to adapt the uid, gid, maildir and table to your setup
|
||||
|
||||
**Changes in system
|
||||
|
||||
You need to have a script running on a daily basis to check password expiration and send emails 30, 14 and 7 days before password expiration (script attached: check_mailpass_expiration.sh).
|
||||
Edit the script to adapt the variables to your setup.
|
||||
This script is using postfixadmin.my.cnf to read credentials. Edit this file to enter a DB user that is allowed to access (read-write) your database. This file should be protected from any user (chmod 400).
|
||||
@ -1,41 +0,0 @@
|
||||

|
||||
[](https://gitter.im/postfixadmin/Lobby)
|
||||
[](https://coveralls.io/github/postfixadmin/postfixadmin?branch=master)
|
||||

|
||||
[](https://kiwiirc.com/nextclient/irc.freenode.net/#postfixadmin)
|
||||
|
||||
# PostfixAdmin
|
||||
|
||||
An open source, web based interface for managing domains/mailboxes/aliases etc on a Postfix based mail server.
|
||||
|
||||
Integrates with :
|
||||
|
||||
- Postfix
|
||||
- IMAP/POP3 server (e.g. Dovecot or Courier)
|
||||
- Database backend (choose one of: sqlite, mysql, postgresql)
|
||||
- Fetchmail (optional)
|
||||
|
||||
## Features
|
||||
|
||||
- Unlimited domains/aliases/mailboxes
|
||||
- Optional storage quota support
|
||||
- Optional password expiry (beta)
|
||||
- Multiple password hashing formats
|
||||
- Supports PostgreSQL, MySQL, MariaDB, SQLite database backends (choose one)
|
||||
- Supports retrieval of mail from a remote POP3 server (via fetchmail)
|
||||
- Vacation / Autoresponder / Out Of Office support
|
||||
- Users have the ability to login, change their password or vacation (out of office) status.
|
||||
- Integration with Squirrelmail / Roundcube (via plugins)
|
||||
- Optional XMLRPC based API
|
||||
- Supports PHP5.6+
|
||||
|
||||
## Useful Links
|
||||
|
||||
- [Probably all you need to read (pdf)](http://blog.cboltz.de/uploads/postfixadmin-30-english.pdf)
|
||||
- http://postfixadmin.sf.net - the current homepage for the project
|
||||
- [Docker Images](https://github.com/postfixadmin/docker)
|
||||
- [What is it? (txt)](/DOCUMENTS/POSTFIXADMIN.txt)
|
||||
- [Installation instructions](/INSTALL.TXT)
|
||||
- [Wiki](https://sourceforge.net/p/postfixadmin/wiki/)
|
||||
- [Mailing list](https://sourceforge.net/p/postfixadmin/discussion/676076)
|
||||
- [IRC channel](irc://irc.freenode.net/postfixadmin) (#postfixadmin on irc.freenode.net).
|
||||
@ -1,93 +0,0 @@
|
||||
This file is not exhaustive.
|
||||
|
||||
Please feel free to add yourself and a summary of changes to this file at the bottom if creating a pull request.
|
||||
|
||||
|
||||
Postfixadmin was originally written by Mischa Peters <mischa at high5 dot net>
|
||||
|
||||
Copyright (c) 2002 - 2005 High5!
|
||||
Licensed under GPL for more info check GPL-LICENSE.TXT
|
||||
|
||||
|
||||
|
||||
Additional authors:
|
||||
|
||||
2004/07/13 David Osborn <ossdev at daocon.com>
|
||||
strict, processes domain level aliases, more
|
||||
subroutines, send reply from original to address
|
||||
|
||||
2004/11/09 David Osborn <ossdev at daocon.com>
|
||||
Added syslog support
|
||||
Slightly better logging which includes messageid
|
||||
Avoid infinite loops with domain aliases
|
||||
|
||||
2005-01-19 Troels Arvin <troels at arvin.dk>
|
||||
PostgreSQL-version.
|
||||
Normalized DB schema from one vacation table ("vacation")
|
||||
to two ("vacation", "vacation_notification"). Uses
|
||||
referential integrity CASCADE action to simplify cleanup
|
||||
when a user is no longer on vacation.
|
||||
Inserting variables into queries stricly by prepare()
|
||||
to try to avoid SQL injection.
|
||||
International characters are now handled well.
|
||||
|
||||
2005-01-21 Troels Arvin <troels at arvin.dk>
|
||||
Uses the Email::Valid package to avoid sending notices
|
||||
to obviously invalid addresses.
|
||||
|
||||
2007-08-15 David Goodwin <david at palepurple.co.uk>
|
||||
Use the Perl Mail::Sendmail module for sending mail
|
||||
Check for headers that start with blank lines (patch from forum)
|
||||
|
||||
2007-08-20 Martin Ambroz <amsys at trustica.cz>
|
||||
Added initial Unicode support
|
||||
|
||||
2008-05-09 Fabio Bonelli <fabiobonelli at libero.it>
|
||||
Properly handle failed queries to vacation_notification.
|
||||
Fixed log reporting.
|
||||
|
||||
2008-07-29 Patch from Luxten to add repeat notification after timeout. See:
|
||||
https://sourceforge.net/tracker/index.php?func=detail&aid=2031631&group_id=191583&atid=937966
|
||||
|
||||
2008-08-01 Luigi Iotti <luigi at iotti dot biz>
|
||||
Use envelope sender/recipient instead of using
|
||||
From: and To: header fields;
|
||||
Support to good vacation behavior as in
|
||||
http://www.irbs.net/internet/postfix/0707/0954.html
|
||||
(needs to be tested);
|
||||
|
||||
2008-08-04 David Goodwin <david at palepurple dot co dot uk>
|
||||
Use Log4Perl
|
||||
Added better testing (and -t option)
|
||||
|
||||
2009-06-29 Stevan Bajic <stevan at bajic.ch>
|
||||
Add Mail::Sender for SMTP auth + more flexibility
|
||||
|
||||
2009-07-07 Stevan Bajic <stevan at bajic.ch>
|
||||
Add better alias lookups
|
||||
Check for more heades from Anti-Virus/Anti-Spam solutions
|
||||
|
||||
2009-08-10 Sebastian <reg9009 at yahoo dot de>
|
||||
Adjust SQL query for vacation timeframe. It is now possible to set from/until date for vacation message.
|
||||
|
||||
2012-04-1 Nikolaos Topp <info at ichier.de>
|
||||
Add configuration parameter $smtp_client in order to get mails through
|
||||
postfix helo-checks, using check_helo_access whitelist without permitting 'localhost' default style stuff
|
||||
|
||||
2012-04-19 Jan Kruis <jan at crossreference dot nl>
|
||||
change SQL query for vacation into function.
|
||||
Add sub get_interval()
|
||||
Gives the user the option to set the interval time ( 0 = one reply, 1 = autoreply, > 1 = Delay reply )
|
||||
See https://sourceforge.net/tracker/?func=detail&aid=3508083&group_id=191583&atid=937966
|
||||
|
||||
2012-06-18 Christoph Lechleitner <christoph.lechleitner@iteg.at>
|
||||
Add capability to include the subject of the original mail in the subject of the vacation message.
|
||||
A good vacation subject could be: 'Re: $SUBJECT'
|
||||
Also corrected log entry about "Already informed ..." to show the $orig_from, not $email
|
||||
|
||||
2017-07-14 Thomas Kempf <tkempf@hueper.de>
|
||||
Replacing deprecated Mail::Sender by Email::Sender
|
||||
Add configuration parameter $no_vacation_pattern in order to exlude specific alias-recipients from
|
||||
sending vacation mails, even if one or multiple of the recipients the alias points to has vacation
|
||||
currently active.
|
||||
|
||||
@ -0,0 +1,150 @@
|
||||
##################################################
|
||||
# Virtual Vacation for Postfix Admin Release 2.x #
|
||||
##################################################
|
||||
#
|
||||
# Postfix Admin (Virtual Vacation)
|
||||
# by Mischa Peters <mischa at high5 dot net>
|
||||
# Copyright (c) 2002 - 2005 High5!
|
||||
# Licensed under GPL for more info check GPL-LICENSE.TXT
|
||||
#
|
||||
# Modified by: Nicholas Paufler <npaufler at incentre dot net> (12/06/2004)
|
||||
#
|
||||
|
||||
REQUIRED!
|
||||
---------
|
||||
There are a bunch of Perl modules which need installing, depending on your
|
||||
distribution these may be available through your package management tool, or
|
||||
will need installing through CPAN.
|
||||
|
||||
A full list of required modules can be found in the source of vacation.pl.
|
||||
|
||||
It obviously relies on Perl
|
||||
|
||||
|
||||
About Virtual Vacation
|
||||
----------------------
|
||||
Virtual Vacation is today done with a local shell account that can receive
|
||||
email. The email is then handled by a Perl script which sends the Vacation
|
||||
message back to the sender.
|
||||
|
||||
|
||||
Install Virtual Vacation
|
||||
------------------------
|
||||
|
||||
1. Create a local account
|
||||
-------------------------
|
||||
Create a dedicated local user account called "vacation".
|
||||
This user handles all potentially dangerous mail content - that is why it
|
||||
should be a separate account.
|
||||
|
||||
Do not use "nobody", and most certainly do not use "root" or "postfix". The
|
||||
user will never log in, and can be given a "*" password and non-existent
|
||||
shell and home directory.
|
||||
|
||||
This should look like this:
|
||||
|
||||
#/etc/passwd
|
||||
vacation:*:65501:65501::0:0:Virtual Vacation:/nonexistent:/sbin/nologin
|
||||
|
||||
#/etc/group
|
||||
vacation:*:65501:
|
||||
|
||||
2. Create a directory
|
||||
---------------------
|
||||
Create a directory, for example /var/spool/vacation, that is accessible
|
||||
only to the "vacation" user. This is where the vacation script is supposed
|
||||
to store its temporary files.
|
||||
|
||||
|
||||
3. Copy the files
|
||||
-----------------
|
||||
|
||||
Copy the vacation.pl file to the directory you created above:
|
||||
|
||||
$ cp vacation.pl <HOME>/vacation.pl
|
||||
$ chown -R vacation:vacation <HOME>
|
||||
|
||||
Which will then look something like:
|
||||
|
||||
-rwx------ 1 vacation vacation 3356 Dec 21 00:00 vacation.pl*
|
||||
|
||||
4. Setup the transport type
|
||||
--------------------
|
||||
Define the transport type in the Postfix master file:
|
||||
|
||||
#/etc/postfix/master.cf:
|
||||
vacation unix - n n - - pipe
|
||||
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
|
||||
|
||||
Tell Postfix to use a transport maps file, so add the following to your
|
||||
Postfix main.cf:
|
||||
|
||||
#/etc/postfix/main.cf:
|
||||
transport_maps = hash:/etc/postfix/transport
|
||||
|
||||
Then add the transport definition to the newly created transport file.
|
||||
Obviously, change yourdomain.com to your own domain. This can be any
|
||||
arbitrary domain, and it is easiest if you just choose one that will be used
|
||||
for all your domains.
|
||||
|
||||
#/etc/postfix/transport
|
||||
autoreply.yourdomain.com vacation:
|
||||
|
||||
(You may need to create an entry in /etc/hosts for your non-existant domain)
|
||||
|
||||
Execute "postmap /etc/postfix/transport" to build the hashed database.
|
||||
|
||||
Execute "postfix reload" to complete the change.
|
||||
|
||||
|
||||
5. Create the table
|
||||
-------------------
|
||||
|
||||
The database table should have already been created for you, by running
|
||||
the 'upgrade.php' script when installing Postfixadmin.
|
||||
|
||||
If security is an issue for you, read ../DOCUMENTS/Security.txt
|
||||
|
||||
6. Edit vacation.pl
|
||||
-----------------
|
||||
|
||||
The perl vacation.pl script needs minor modification to know which database
|
||||
you are using, and also how to connect to the database.
|
||||
|
||||
Namely :
|
||||
|
||||
Change any variables starting with '$db_' and '$db_type' to either 'mysql' or 'pgsql'.
|
||||
|
||||
Change the $vacation_domain variable to match what you entered in your /etc/postfix/transport
|
||||
file.
|
||||
|
||||
What do these files do?
|
||||
-----------------------
|
||||
When a user enables a vacation message on their account, the alias
|
||||
definition is changed so that in addition to delivering to their own
|
||||
mailbox, it also delivers to a dummy alias which calls the vacation.pl
|
||||
program. In other words, if joeuser@domain.com enables their vacation, the
|
||||
entry in the alias database table will deliver mail to
|
||||
joeuser@something.com, as well as
|
||||
joeuser#something.com@autoreply.yourdomain.com
|
||||
|
||||
vacation.pl then checks the database to see wether a user is on holiday and
|
||||
what message to send back. Make sure that vacation.pl is able to communicate
|
||||
to your database. In the first couple of lines you have to specify the
|
||||
database, username and password for it.
|
||||
NOTE: Make sure that the path to perl is correct.
|
||||
|
||||
|
||||
I'm in trouble!
|
||||
---------------
|
||||
When something is not working there are a couple of files that you can have
|
||||
a look at. The most important one is your maillog (usually in /var/log/).
|
||||
|
||||
Vacation.pl also has some debugging and logging capabilties. Check the top
|
||||
of vacation.pl.
|
||||
|
||||
|
||||
Done!
|
||||
-----
|
||||
When this is all in place you need to have a look at the Postfix Admin
|
||||
config.inc.php. Here you need to enable Virtual Vacation for the site.
|
||||
@ -1,245 +0,0 @@
|
||||
# About Virtual Vacation
|
||||
|
||||
AKA 'An out of office' automated email response.
|
||||
|
||||
The vacation script runs as service within Postfix's master.cf configuration file.
|
||||
Mail is sent to the vacation service via a transport table mapping.
|
||||
When users mark themselves as away on vacation, an alias is added to their account
|
||||
sending a copy of all mail to them to the vacation service.
|
||||
|
||||
e.g. mail to billy@goat.com will be delivered to
|
||||
|
||||
* billy@goat.com AND
|
||||
* billy#goat.com@autoreply.goat.com
|
||||
|
||||
Mail to @autoreply.goat.com is caught by the vacation.pl script and a reply
|
||||
will be sent based on various settings. By default a reply is only sent once.
|
||||
|
||||
# Dependencies / Requirements
|
||||
|
||||
There are a bunch of Perl modules which need installing, depending on your
|
||||
distribution these may be available through your package management tool, or
|
||||
will need installing through CPAN.
|
||||
|
||||
```
|
||||
Email::Valid
|
||||
Email::Sender
|
||||
Email::Simple
|
||||
Email::Valid
|
||||
Try::Tiny
|
||||
MIME::Charset
|
||||
MIME::EncWords
|
||||
Log::Log4perl
|
||||
Log::Dispatch
|
||||
GetOpt::Std
|
||||
Net::DNS;
|
||||
```
|
||||
|
||||
You may install these via CPAN, or through your package tool.
|
||||
|
||||
CPAN: 'perl -MCPAN -e shell', then 'install Module::Whatever'
|
||||
|
||||
|
||||
## Debian Systems
|
||||
|
||||
|
||||
```bash
|
||||
apt-get install libemail-sender-perl libemail-simple-perl libemail-valid-perl libtry-tiny-perl libdbd-pg-perl libemail-mime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl libnet-dns-perl
|
||||
```
|
||||
|
||||
and one of :
|
||||
```bash
|
||||
libdbd-pg-perl or libdbd-mysql-perl
|
||||
```
|
||||
|
||||
|
||||
# Installing Virtual Vacation
|
||||
|
||||
## 1. Create a local account
|
||||
|
||||
Create a dedicated local user account called "vacation".
|
||||
This user handles all potentially dangerous mail content - that is why it
|
||||
should be a separate account.
|
||||
|
||||
Do not use "nobody", and most certainly do not use "root" or "postfix". The
|
||||
user will never log in, and can be given a "*" password and non-existent
|
||||
shell and home directory.
|
||||
|
||||
Also create a separate "vacation" group.
|
||||
|
||||
This should look like this:
|
||||
|
||||
```raw
|
||||
#/etc/passwd
|
||||
vacation:*:65501:65501:Virtual Vacation:/nonexistent:/sbin/nologin
|
||||
```
|
||||
|
||||
```raw
|
||||
#/etc/group
|
||||
vacation:*:65501:
|
||||
```
|
||||
|
||||
## 2. Create a log directory or log file
|
||||
|
||||
If you want to log to a file ($log\_to\_file), create a log directory or an
|
||||
empty log file.
|
||||
|
||||
This file or directory needs to be writeable for the "vacation" user.
|
||||
|
||||
Note: If you are logging to syslog, you can skip this step.
|
||||
|
||||
|
||||
## 3. Install vacation.pl
|
||||
|
||||
Create a directory /usr/lib/postfixadmin/ and copy the vacation.pl file to it:
|
||||
|
||||
```bash
|
||||
mkdir /usr/lib/postfixadmin
|
||||
cp vacation.pl /usr/lib/postfixadmin/vacation.pl
|
||||
chown -R root:vacation /usr/lib/postfixadmin
|
||||
chmod 750 /usr/lib/postfixadmin/ /usr/lib/postfixadmin/vacation.pl
|
||||
```
|
||||
|
||||
Which will then look something like:
|
||||
|
||||
```raw
|
||||
-rwxr-x--- 1 root vacation 3356 Dec 21 00:00 vacation.pl*
|
||||
```
|
||||
|
||||
|
||||
## 4. Setup the transport type
|
||||
|
||||
Define the transport type in the Postfix master file:
|
||||
|
||||
```raw
|
||||
#/etc/postfix/master.cf:
|
||||
vacation unix - n n - - pipe
|
||||
flags=Rq user=vacation argv=/usr/lib/postfixadmin/vacation.pl -f ${sender} -- ${recipient}
|
||||
```
|
||||
|
||||
## 5. Setup the transport maps file
|
||||
|
||||
Tell Postfix to use a transport maps file, so add the following to your
|
||||
Postfix main.cf:
|
||||
|
||||
```raw
|
||||
#/etc/postfix/main.cf:
|
||||
transport_maps = hash:/etc/postfix/transport
|
||||
```
|
||||
|
||||
Then add the transport definition to the newly created transport file.
|
||||
Obviously, change yourdomain.com to your own domain. This can be any
|
||||
arbitrary domain, and it is easiest if you just choose one that will be used
|
||||
for all your domains.
|
||||
|
||||
```raw
|
||||
#/etc/postfix/transport
|
||||
autoreply.yourdomain.com vacation:
|
||||
```
|
||||
|
||||
|
||||
(You may need to create an entry in /etc/hosts for your non-existant domain)
|
||||
|
||||
Execute
|
||||
```bash
|
||||
postmap /etc/postfix/transport
|
||||
```
|
||||
|
||||
Execute
|
||||
```bash
|
||||
postfix reload
|
||||
```
|
||||
to complete the change.
|
||||
|
||||
|
||||
## 6. Configure vacation.pl
|
||||
|
||||
The perl vacation.pl script needs to know which database you are using, and also
|
||||
how to connect to the database.
|
||||
|
||||
Namely :
|
||||
|
||||
Change any variables starting with '$db\_' and '$db\_type' to either 'mysql' or 'pgsql'.
|
||||
|
||||
Change the $vacation\_domain variable to match what you entered in your /etc/postfix/transport
|
||||
file.
|
||||
|
||||
You can do this in two ways:
|
||||
|
||||
a) edit vacation.pl directly (not recommended!)
|
||||
|
||||
b) create /etc/postfixadmin/vacation.conf and enter your settings there
|
||||
|
||||
Just use perl syntax there to fill the config variables listed in vacation.pl
|
||||
(without the "our" keyword). Example:
|
||||
```perl
|
||||
$db_username = 'mail';
|
||||
1; # required final line - keeps perl happy.
|
||||
```
|
||||
|
||||
To make sure nobody except vacation.pl can read your vacation.conf (including the
|
||||
database password), run
|
||||
|
||||
```bash
|
||||
chown root:vacation /etc/postfixadmin/vacation.conf
|
||||
chmod 640 /etc/postfixadmin/vacation.conf
|
||||
```
|
||||
|
||||
|
||||
## 7. Check the alias expansion
|
||||
|
||||
Depending on your setup, you may have multiple 'smtpd' service definitions within
|
||||
your postfix master.cf file. This is especially the case if you are also using AMAVIS or
|
||||
another content filtering system when mail is re-injected into Postfix using the smtpd daemon.
|
||||
|
||||
If you are, it's likely that alias expansion may happen more than once, in which case you
|
||||
may see vacation-style responses duplicated. To suppress this behaviour, you need to add:
|
||||
|
||||
```raw
|
||||
-o receive_override_options=no_address_mappings
|
||||
```
|
||||
|
||||
|
||||
For example :
|
||||
|
||||
```raw
|
||||
smtp inet n - - - 12 smtpd
|
||||
-o content_filter=amavis:[127.0.0.50]:10024
|
||||
-o receive_override_options=no_address_mappings
|
||||
|
||||
127.0.0.1:10025 inet n - - - - smtpd
|
||||
-o smtpd_autorized_xforward_hosts=127.0.0.0/8
|
||||
-o smtpd_client_restrictions=
|
||||
-o smtpd_helo_restrictions=
|
||||
-o smtpd_sender_restrictions=
|
||||
-o smtpd_recipient_restrictions=permit_mynetworks,reject
|
||||
-o mynetworks=127.0.0.0/8
|
||||
-o receive_override_options=no_header_body_checks
|
||||
|
||||
```
|
||||
|
||||
^^^ Alias expansion occurs here, so we don't want it to happen again for the
|
||||
first smtpd daemon (above). If you have per-user settings in amavis,
|
||||
you might want to have no_address_mappings in the smtpd on port 10025
|
||||
instead.
|
||||
|
||||
|
||||
## 8. Security
|
||||
|
||||
If security is an issue for you, read ../DOCUMENTS/Security.txt
|
||||
|
||||
# Postfixadmin
|
||||
|
||||
When this is all in place you need to have a look at the Postfix Admin
|
||||
config.inc.php. Here you need to enable Virtual Vacation for the site.
|
||||
|
||||
|
||||
# Help ! It's not working
|
||||
|
||||
When something is not working there are a couple of files that you can have
|
||||
a look at. The most important one is your maillog (usually in /var/log/).
|
||||
|
||||
Vacation.pl also has some debugging and logging capabilties. Check the top
|
||||
of vacation.pl.
|
||||
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
//
|
||||
// Postfix Admin
|
||||
// by Mischa Peters <mischa at high5 dot net>
|
||||
// Copyright (c) 2002 - 2005 High5!
|
||||
// Licensed under GPL for more info check GPL-LICENSE.TXT
|
||||
//
|
||||
// File: index.php
|
||||
//
|
||||
// Template File: -none-
|
||||
//
|
||||
// Template Variables:
|
||||
//
|
||||
// -none-
|
||||
//
|
||||
// Form POST \ GET Variables:
|
||||
//
|
||||
// -none-
|
||||
//
|
||||
header ("Location: ../login.php");
|
||||
exit;
|
||||
?>
|
||||
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
header ("Location: ../login.php");
|
||||
exit(0);
|
||||
?>
|
||||
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: backup.php
|
||||
* Used to save all settings - but only works for MySQL databases.
|
||||
* Template File: -none-
|
||||
*
|
||||
* Template Variables: -none-
|
||||
*
|
||||
* Form POST \ GET Variables: -none-
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
(($CONF['backup'] == 'NO') ? header("Location: " . $CONF['postfix_admin_url'] . "/main.php") && exit : '1');
|
||||
|
||||
// TODO: make backup supported for postgres
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
print '<p>Sorry: Backup is currently not supported for your DBMS.</p>';
|
||||
}
|
||||
/*
|
||||
SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,adsrc
|
||||
AS def FROM pg_attribute,pg_class,pg_type,pg_attrdef
|
||||
WHERE pg_class.oid=attrelid AND pg_type.oid=atttypid
|
||||
AND attnum>0 AND pg_class.oid=adrelid AND adnum=attnum AND atthasdef='t' AND lower(relname)='admin'
|
||||
UNION SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,''
|
||||
AS def FROM pg_attribute,pg_class,pg_type
|
||||
WHERE pg_class.oid=attrelid
|
||||
AND pg_type.oid=atttypid
|
||||
AND attnum>0
|
||||
AND atthasdef='f'
|
||||
AND lower(relname)='admin'
|
||||
$db = $_GET['db'];
|
||||
$cmd = "pg_dump -c -D -f /tix/miner/miner.sql -F p -N -U postgres $db";
|
||||
$res = `$cmd`;
|
||||
// Alternate: $res = shell_exec($cmd);
|
||||
echo $res;
|
||||
*/
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
umask (077);
|
||||
$path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp/';
|
||||
$filename = "postfixadmin-" . date ("Ymd") . "-" . getmypid() . ".sql";
|
||||
$backup = $path . $filename;
|
||||
|
||||
$header = "#\n# Postfix Admin $version\n# Date: " . date ("D M j G:i:s T Y") . "\n#\n";
|
||||
|
||||
if (!$fh = fopen ($backup, 'w'))
|
||||
{
|
||||
$tMessage = "<div class=\"error_msg\">Cannot open file ($backup)</div>";
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/message.php");
|
||||
include ("templates/footer.php");
|
||||
}
|
||||
else
|
||||
{
|
||||
fwrite ($fh, $header);
|
||||
|
||||
$tables = array(
|
||||
'admin',
|
||||
'alias',
|
||||
'alias_domain',
|
||||
'config',
|
||||
'domain',
|
||||
'domain_admins',
|
||||
'fetchmail',
|
||||
'log',
|
||||
'mailbox',
|
||||
'vacation',
|
||||
'vacation_notification'
|
||||
);
|
||||
|
||||
for ($i = 0 ; $i < sizeof ($tables) ; ++$i)
|
||||
{
|
||||
$result = db_query ("SHOW CREATE TABLE " . table_by_key($tables[$i]));
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
fwrite ($fh, "$row[1];\n\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 0 ; $i < sizeof ($tables) ; ++$i)
|
||||
{
|
||||
$result = db_query ("SELECT * FROM " . table_by_key($tables[$i]));
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
while ($row = db_assoc ($result['result']))
|
||||
{
|
||||
foreach ($row as $key=>$val)
|
||||
{
|
||||
$fields[] = $key;
|
||||
$values[] = $val;
|
||||
}
|
||||
|
||||
fwrite ($fh, "INSERT INTO ". $tables[$i] . " (". implode (',',$fields) . ") VALUES ('" . implode ('\',\'',$values) . "');\n");
|
||||
$fields = "";
|
||||
$values = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
header ("Content-Type: text/plain");
|
||||
header ("Content-Disposition: attachment; filename=\"$filename\"");
|
||||
header ("Content-Transfer-Encoding: binary");
|
||||
header ("Content-Length: " . filesize("$backup"));
|
||||
header ("Content-Description: Postfix Admin");
|
||||
$download_backup = fopen ("$backup", "r");
|
||||
unlink ("$backup");
|
||||
fpassthru ($download_backup);
|
||||
}
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: broadcast-message.php
|
||||
* Used to send a message to _ALL_ users with mailboxes on this server.
|
||||
*
|
||||
* Template File: broadcast-message.php
|
||||
*
|
||||
* Template Variables: -none-
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* name
|
||||
* subject
|
||||
* message
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
if ($CONF['sendmail'] != 'YES') {
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/main.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
if (empty($_POST['subject']) || empty($_POST['message']) || empty($_POST['name']))
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$q = 'select username from mailbox union '.
|
||||
'select goto from alias '.
|
||||
'where goto not in (select username from mailbox)';
|
||||
|
||||
$result = db_query ($q);
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
$b_name = mb_encode_mimeheader( $_POST['name'], 'UTF-8', 'Q');
|
||||
$b_subject = mb_encode_mimeheader( $_POST['subject'], 'UTF-8', 'Q');
|
||||
$b_message = base64_encode($_POST['message']);
|
||||
|
||||
$i = 0;
|
||||
while ($row = db_array ($result['result'])) {
|
||||
$fTo = $row[0];
|
||||
$fHeaders = 'To: ' . $fTo . "\n";
|
||||
$fHeaders .= 'From: ' . $b_name . ' <' . $CONF['admin_email'] . ">\n";
|
||||
$fHeaders .= 'Subject: ' . $b_subject . "\n";
|
||||
$fHeaders .= 'MIME-Version: 1.0' . "\n";
|
||||
$fHeaders .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
|
||||
$fHeaders .= 'Content-Transfer-Encoding: base64' . "\n";
|
||||
|
||||
$fHeaders .= $b_message;
|
||||
|
||||
if (!smtp_mail ($fTo, $CONF['admin_email'], $fHeaders))
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
echo '<p>'.$PALANG['pBroadcast_success'].'</p>';
|
||||
include ("templates/footer.php");
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET" || $error == 1)
|
||||
{
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/broadcast-message.php");
|
||||
include ("templates/footer.php");
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
@ -1,20 +0,0 @@
|
||||
#!/bin/bash
|
||||
#Adapt to your setup
|
||||
|
||||
POSTFIX_DB="postfix_test"
|
||||
MYSQL_CREDENTIALS_FILE="postfixadmin.my.cnf"
|
||||
|
||||
REPLY_ADDRESS=noreply@example.com
|
||||
|
||||
# Change this list to change notification times and when ...
|
||||
for INTERVAL in 30 14 7
|
||||
do
|
||||
LOWER=$(( $INTERVAL - 1 ))
|
||||
|
||||
QUERY="SELECT username,password_expiry FROM mailbox WHERE password_expiry > now() + interval $LOWER DAY AND password_expiry < NOW() + interval $INTERVAL DAY"
|
||||
|
||||
mysql --defaults-extra-file="$MYSQL_CREDENTIALS_FILE" "$POSTFIX_DB" -B -e "$QUERY" | while read -a RESULT ; do
|
||||
echo -e "Dear User, \n Your password will expire on ${RESULT[1]}" | mail -s "Password 30 days before expiration notication" -r $REPLY_ADDRESS ${RESULT[0]}
|
||||
done
|
||||
|
||||
done
|
||||
@ -1,101 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at http://postfixadmin.sf.net
|
||||
*
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: common.php
|
||||
* All pages should include this file - which itself sets up the necessary
|
||||
* environment and ensures other functions are loaded.
|
||||
*/
|
||||
|
||||
if (!defined('POSTFIXADMIN')) { # already defined if called from setup.php
|
||||
define('POSTFIXADMIN', 1); # checked in included files
|
||||
|
||||
if (!defined('POSTFIXADMIN_CLI')) {
|
||||
// this is the default; see also https://sourceforge.net/p/postfixadmin/bugs/347/
|
||||
session_cache_limiter('nocache');
|
||||
session_name('postfixadmin_session');
|
||||
session_start();
|
||||
|
||||
if (empty($_SESSION['flash'])) {
|
||||
$_SESSION['flash'] = array();
|
||||
if(!defined('POSTFIXADMIN')) {
|
||||
session_start();
|
||||
}
|
||||
define('POSTFIXADMIN', 1); # checked in included files
|
||||
|
||||
function incorrect_setup() {
|
||||
global $incpath;
|
||||
# we ask the user to delete setup.php, which makes a blind redirect a bad idea
|
||||
if(!is_file("$incpath/setup.php")) {
|
||||
die ("config.inc.php does not exist or is not configured correctly. Please re-install setup.php and create/fix your config.");
|
||||
} else {
|
||||
# common.php is indirectly included in setup.php (via upgrade.php) - avoid endless redirect loop
|
||||
if (!preg_match('/setup\.php$/', $_SERVER['SCRIPT_NAME'])) {
|
||||
header("Location: setup.php");
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$incpath = dirname(__FILE__);
|
||||
(ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_runtime', '0') : '1');
|
||||
(ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_sybase', '0') : '1');
|
||||
|
||||
/**
|
||||
* @param string $class
|
||||
* __autoload implementation, for use with spl_autoload_register().
|
||||
*/
|
||||
function postfixadmin_autoload($class) {
|
||||
$PATH = dirname(__FILE__) . '/model/' . $class . '.php';
|
||||
|
||||
if (is_file($PATH)) {
|
||||
require_once($PATH);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
if(ini_get('register_globals')) {
|
||||
die("Please turn off register_globals; edit your php.ini");
|
||||
}
|
||||
spl_autoload_register('postfixadmin_autoload');
|
||||
require_once("$incpath/variables.inc.php");
|
||||
|
||||
if (!is_file("$incpath/config.inc.php")) {
|
||||
die("config.inc.php is missing!");
|
||||
if(!is_file("$incpath/config.inc.php")) {
|
||||
// incorrectly setup...
|
||||
incorrect_setup();
|
||||
}
|
||||
|
||||
global $CONF;
|
||||
|
||||
|
||||
require_once("$incpath/config.inc.php");
|
||||
|
||||
|
||||
if (isset($CONF['configured']) && !defined('PHPUNIT_TEST')) {
|
||||
if ($CONF['configured'] == false) {
|
||||
die("Please edit config.local.php - change \$CONF['configured'] to true after specifying appropriate local settings (database_type etc)");
|
||||
if(isset($CONF['configured'])) {
|
||||
if($CONF['configured'] == FALSE) {
|
||||
incorrect_setup();
|
||||
}
|
||||
}
|
||||
|
||||
Config::write($CONF);
|
||||
|
||||
$PALANG = [];
|
||||
require_once("$incpath/languages/language.php");
|
||||
require_once("$incpath/functions.inc.php");
|
||||
if (extension_loaded('Phar') && ( version_compare(PHP_VERSION, '7.0.0') < 0)) {
|
||||
require_once("$incpath/lib/random_compat.phar");
|
||||
}
|
||||
|
||||
if (defined('POSTFIXADMIN_CLI')) {
|
||||
$language = 'en'; # TODO: make configurable or autodetect from locale settings
|
||||
} else {
|
||||
$language = check_language(); # TODO: storing the language only at login instead of calling check_language() on every page would save some processor cycles ;-)
|
||||
$_SESSION['lang'] = $language;
|
||||
}
|
||||
if (!empty($language)) {
|
||||
require_once("$incpath/languages/" . $language . ".lang");
|
||||
}
|
||||
require_once("$incpath/languages/" . check_language () . ".lang");
|
||||
|
||||
if (!empty($CONF['language_hook']) && function_exists($CONF['language_hook'])) {
|
||||
$hook_func = $CONF['language_hook'];
|
||||
$PALANG = $hook_func($PALANG, $language);
|
||||
}
|
||||
|
||||
Config::write('__LANG', $PALANG);
|
||||
|
||||
unset($incpath);
|
||||
|
||||
if (!defined('POSTFIXADMIN_CLI')) {
|
||||
if (!is_file(dirname(__FILE__) . "/lib/smarty.inc.php")) {
|
||||
die("smarty.inc.php is missing! Something is wrong...");
|
||||
}
|
||||
require_once(dirname(__FILE__) . "/lib/smarty.inc.php");
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
{
|
||||
"name": "postfixadmin/postfixadmin",
|
||||
"description": "web based administration interface for Postfix mail servers",
|
||||
"type": "project",
|
||||
"license": "GPL-2.0",
|
||||
"scripts": {
|
||||
"build" : [
|
||||
"@check-format",
|
||||
"@lint",
|
||||
"@test-fixup",
|
||||
"@psalm",
|
||||
"@test"
|
||||
],
|
||||
"check-format": "php-cs-fixer fix --ansi --dry-run --diff",
|
||||
"format": "php-cs-fixer fix --ansi",
|
||||
"lint": "@php ./vendor/bin/parallel-lint --exclude vendor/ --exclude lib/block_random_int.php --exclude lib/array_column.php .",
|
||||
"test": "DATABASE=sqlite ./vendor/bin/phpunit --coverage-clover ./clover.xml tests/",
|
||||
"test-fixup": "mkdir -p templates_c ; test -f config.local.php || touch config.local.php",
|
||||
"psalm": "@php ./vendor/bin/psalm --show-info=false "
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-mysqli": "*",
|
||||
"ext-sqlite3": "*",
|
||||
"friendsofphp/php-cs-fixer": "*",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.0",
|
||||
"php": ">7.2.0",
|
||||
"cedx/coveralls": "^11.0",
|
||||
"phpunit/phpunit": "8.*",
|
||||
"vimeo/psalm":"^3.0",
|
||||
"shardj/zf1-future" : "^1.12"
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"config.inc.php",
|
||||
"functions.inc.php",
|
||||
"lib/smarty/libs/bootstrap.php"
|
||||
]
|
||||
},
|
||||
"support": {
|
||||
"irc": "irc://irc.freenode.org/postfixadmin",
|
||||
"issues": "https://github.com/postfixadmin/postfixadmin/issues",
|
||||
"chat": "https://gitter.im/postfixadmin/Lobby"
|
||||
}
|
||||
}
|
||||
@ -1,45 +0,0 @@
|
||||
url_main = main.php
|
||||
url_editactive = editactive.php?table=
|
||||
# list_admin
|
||||
url_list_admin = list.php?table=admin
|
||||
url_create_admin = edit.php?table=admin
|
||||
# list-domain
|
||||
url_list_domain = list.php?table=domain
|
||||
url_edit_domain = edit.php?table=domain
|
||||
# list-virtual
|
||||
url_list_virtual = list-virtual.php
|
||||
url_create_mailbox = edit.php?table=mailbox
|
||||
url_create_alias = edit.php?table=alias
|
||||
url_create_alias_domain = edit.php?table=aliasdomain
|
||||
# fetchmail
|
||||
url_fetchmail = list.php?table=fetchmail
|
||||
url_fetchmail_new_entry = edit.php?table=fetchmail
|
||||
# sendmail
|
||||
url_sendmail = sendmail.php
|
||||
url_broadcast_message = broadcast-message.php
|
||||
# password
|
||||
url_password = edit.php?table=adminpassword
|
||||
# backup
|
||||
url_backup = backup.php
|
||||
# viewlog
|
||||
url_viewlog = viewlog.php
|
||||
# logout
|
||||
url_logout = login.php
|
||||
|
||||
# user-menu
|
||||
url_user_main = main.php
|
||||
url_user_edit_alias = edit-alias.php
|
||||
url_user_vacation = vacation.php
|
||||
url_user_password = password.php
|
||||
url_user_logout = login.php
|
||||
|
||||
|
||||
tr_header = <tr class="header">
|
||||
tr_hilightoff = <tr class="hilightoff" onmouseover="className='hilighton';" onmouseout="className='hilightoff';">
|
||||
|
||||
url_delete = delete.php
|
||||
url_search = list-virtual.php
|
||||
form_search = <form name="search" method="post" action="list-virtual.php"><input class="form-control" name="search[_]" size="10" /></form>
|
||||
|
||||
[adminlistadmin]
|
||||
url_edit_admin = edit.php?table=admin
|
||||
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: create-admin.php
|
||||
* Used to create new administrators.
|
||||
* Template File: admin_create-admin.php
|
||||
*
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tMessage
|
||||
* tUsername
|
||||
* tDomains
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fUsername
|
||||
* fPassword
|
||||
* fPassword2
|
||||
* fDomains
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
$list_domains = list_domains ();
|
||||
$tDomains = array();
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
$pAdminCreate_admin_username_text = $PALANG['pAdminCreate_admin_username_text'];
|
||||
$tDomains = array ();
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
if (isset ($_POST['fUsername'])) $fUsername = escape_string ($_POST['fUsername']);
|
||||
if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
|
||||
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||
$fDomains = array();
|
||||
if (!empty ($_POST['fDomains'])) $fDomains = $_POST['fDomains'];
|
||||
|
||||
list ($error, $tMessage, $pAdminCreate_admin_username_text, $pAdminCreate_admin_password_text) = create_admin($fUsername, $fPassword, $fPassword2, $fDomains);
|
||||
|
||||
if ($error != 0) {
|
||||
if (isset ($_POST['fUsername'])) $tUsername = escape_string ($_POST['fUsername']);
|
||||
if (isset ($_POST['fDomains'])) $tDomains = $_POST['fDomains'];
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_create-admin.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* File: create-alias-domain.php
|
||||
* Template File: create-alias-domain.php
|
||||
* Responsible for allowing for the creation of alias domains.
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tMessage
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fAliasDomain
|
||||
* fTargetDomain
|
||||
* fActive
|
||||
*
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('admin');
|
||||
|
||||
if (!boolconf('alias_domain')) {
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/main.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$username = authentication_get_username();
|
||||
$SESSID_USERNAME = $username;
|
||||
if(authentication_has_role('global-admin')) {
|
||||
$list_domains = list_domains ();
|
||||
}
|
||||
else {
|
||||
$list_domains = list_domains_for_admin ($username);
|
||||
}
|
||||
|
||||
# read alias_domain table to see which domains in $list_domains
|
||||
# are still available as an alias- or target-domain
|
||||
$list_aliases = Array();
|
||||
$result = db_query ("SELECT alias_domain, target_domain FROM $table_alias_domain");
|
||||
if ($result['rows'] > 0) {
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
$list_aliases[ $row['alias_domain'] ] = $row['target_domain'];
|
||||
}
|
||||
}
|
||||
|
||||
# filter available alias domains
|
||||
$alias_domains = array();
|
||||
foreach ($list_domains as $dom) {
|
||||
if (isset($list_aliases[$dom]) || in_array($dom,$list_aliases)) continue;
|
||||
$alias_domains[] = $dom;
|
||||
}
|
||||
if (count($alias_domains) == 0) {
|
||||
$error = 1;
|
||||
$tMessage = $PALANG['pCreate_alias_domain_error4'];
|
||||
}
|
||||
|
||||
# filter available target domains
|
||||
foreach ($list_domains as $dom) {
|
||||
if (isset($list_aliases[$dom])) continue;
|
||||
$target_domains[] = $dom;
|
||||
}
|
||||
|
||||
|
||||
if (isset ($_REQUEST['alias_domain'])) {
|
||||
$fAliasDomain = escape_string ($_REQUEST['alias_domain']);
|
||||
$fAliasDomain = strtolower ($fAliasDomain);
|
||||
}
|
||||
if (isset ($_REQUEST['target_domain'])) {
|
||||
$fTargetDomain = escape_string ($_REQUEST['target_domain']);
|
||||
$fTargetDomain = strtolower ($fTargetDomain);
|
||||
}
|
||||
if (isset ($_REQUEST['active'])) {
|
||||
$fActive = (bool)$_REQUEST['active'];
|
||||
} else {
|
||||
$fActive = true;
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
if(!authentication_has_role ('global-admin') &&
|
||||
!(check_owner ($SESSID_USERNAME, $fAliasDomain) &&
|
||||
check_owner ($SESSID_USERNAME, $fTargetDomain)))
|
||||
{
|
||||
$error = 1;
|
||||
$tMessage = $PALANG['pCreate_alias_domain_error1'];
|
||||
}
|
||||
|
||||
if (isset($list_aliases[$fAliasDomain]) || // alias_domain is unique (primary key, a domain can't be an alias for multiple others)
|
||||
in_array($fAliasDomain,$list_aliases) || // an alias_domain can't be a target_domain for a third domain.
|
||||
isset($list_aliases[$fTargetDomain]) || // same as above, other way around
|
||||
($fAliasDomain == $fTargetDomain) || // i really don't have to
|
||||
empty($fAliasDomain) || empty($fTargetDomain)) // explain this, do i?
|
||||
{
|
||||
$error = 1;
|
||||
$tMessage = $PALANG['pCreate_alias_domain_error2'];
|
||||
}
|
||||
|
||||
$sqlActive = db_get_boolean($fActive);
|
||||
|
||||
if ($error != 1) {
|
||||
$result = db_query ("INSERT INTO $table_alias_domain (alias_domain,target_domain,created,modified,active) VALUES ('$fAliasDomain','$fTargetDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1) {
|
||||
$error = 1;
|
||||
$tMessage = $PALANG['pCreate_alias_domain_error3'];
|
||||
}
|
||||
else {
|
||||
db_log ($SESSID_USERNAME, $fAliasDomain, 'create_alias_domain', "$fAliasDomain -> $fTargetDomain");
|
||||
|
||||
flash_info($PALANG['pCreate_alias_domain_success']);
|
||||
# we would have to update the list of domains available for aliasing. Doing a redirect is easier.
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/create-alias-domain.php");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$tMessage .= "<br />($fAliasDomain -> $fTargetDomain)<br />\n";
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/create-alias-domain.php");
|
||||
include ("templates/footer.php");
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* File: create-alias.php
|
||||
* Template File: create-alias.php
|
||||
* Responsible for allowing for the creation of mail aliases.
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tMessage
|
||||
* tAddress
|
||||
* tGoto
|
||||
* tDomain
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fAddress
|
||||
* fGoto
|
||||
* fDomain
|
||||
*
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('admin');
|
||||
$username = authentication_get_username();
|
||||
$SESSID_USERNAME = $username;
|
||||
if(authentication_has_role('global-admin')) {
|
||||
$list_domains = list_domains ();
|
||||
}
|
||||
else {
|
||||
$list_domains = list_domains_for_admin ($username);
|
||||
}
|
||||
|
||||
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
if (isset ($_GET['domain'])) {
|
||||
$tDomain = escape_string ($_GET['domain']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
if (isset ($_POST['fAddress']) && isset ($_POST['fDomain'])) {
|
||||
$fAddress = escape_string($_POST['fAddress']) . "@" . escape_string ($_POST['fDomain']);
|
||||
$fAddress = strtolower ($fAddress);
|
||||
}
|
||||
|
||||
if (isset ($_POST['fGoto'])) {
|
||||
$fGoto = escape_string ($_POST['fGoto']);
|
||||
$fGoto = strtolower ($fGoto);
|
||||
}
|
||||
if(isset($_POST['fActive'])) {
|
||||
$fActive = escape_string ($_POST['fActive']);
|
||||
}
|
||||
else {
|
||||
$fActive = "1";
|
||||
}
|
||||
|
||||
if(isset($_POST['fDomain'])) {
|
||||
$fDomain = escape_string ($_POST['fDomain']);
|
||||
}
|
||||
|
||||
if(!preg_match ('/@/',$fGoto)) {
|
||||
$fGoto = $fGoto . "@" . escape_string ($_POST['fDomain']);
|
||||
}
|
||||
|
||||
if(!(authentication_has_role('global-admin') ||
|
||||
check_owner ($SESSID_USERNAME, $fDomain) ))
|
||||
{
|
||||
$error = 1;
|
||||
$tAddress = escape_string ($_POST['fAddress']);
|
||||
$tGoto = $fGoto;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
|
||||
}
|
||||
|
||||
if(!check_alias($fDomain)) {
|
||||
$error = 1;
|
||||
$tAddress = escape_string ($_POST['fAddress']);
|
||||
$tGoto = $fGoto;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error3'];
|
||||
}
|
||||
|
||||
if(empty ($fAddress) || !check_email ($fAddress)) {
|
||||
$error = 1;
|
||||
$tAddress = escape_string ($_POST['fAddress']);
|
||||
$tGoto = $fGoto;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
|
||||
}
|
||||
|
||||
if (empty($fGoto) || !check_email ($fGoto)) {
|
||||
$error = 1;
|
||||
$tAddress = escape_string ($_POST['fAddress']);
|
||||
$tGoto = $fGoto;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text_error'];
|
||||
}
|
||||
|
||||
if (escape_string($_POST['fAddress']) == "*") {
|
||||
$fAddress = "@" . escape_string ($_POST['fDomain']);
|
||||
}
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fAddress'");
|
||||
if ($result['rows'] == 1) {
|
||||
$error = 1;
|
||||
$tAddress = escape_string ($_POST['fAddress']);
|
||||
$tGoto = $fGoto;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
|
||||
}
|
||||
|
||||
if ($fActive == "on") {
|
||||
$sqlActive = db_get_boolean(True);
|
||||
}
|
||||
else {
|
||||
$sqlActive = db_get_boolean(False);
|
||||
}
|
||||
|
||||
if ($error != 1) {
|
||||
if (preg_match('/^\*@(.*)$/', $fGoto, $match)) {
|
||||
$fGoto = "@" . $match[1];
|
||||
}
|
||||
|
||||
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1) {
|
||||
$tDomain = $fDomain;
|
||||
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />\n";
|
||||
}
|
||||
else {
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'create_alias', "$fAddress -> $fGoto");
|
||||
|
||||
$tDomain = $fDomain;
|
||||
$tMessage = $PALANG['pCreate_alias_result_success'] . "<br />($fAddress -> $fGoto)<br />\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/create-alias.php");
|
||||
include ("templates/footer.php");
|
||||
?>
|
||||
@ -0,0 +1,152 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: create-domain.php
|
||||
* Allows administrators to create new domains.
|
||||
* Template File: admin_create-domain.php
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tMessage
|
||||
* tDomain
|
||||
* tDescription
|
||||
* tAliases
|
||||
* tMailboxes
|
||||
* tMaxquota
|
||||
* tDefaultaliases
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fDomain
|
||||
* fDescription
|
||||
* fAliases
|
||||
* fMailboxes
|
||||
* fMaxquota
|
||||
* fDefaultaliases
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
|
||||
$form_fields = array(
|
||||
'fDomain' => array('type' => 'str', 'default' => null),
|
||||
'fDescription' => array('type' => 'str', 'default' =>''),
|
||||
'fAliases' => array('type' => 'int', 'default' => $CONF['aliases']),
|
||||
'fMailboxes' => array('type' => 'int', 'default' => $CONF['mailboxes']),
|
||||
'fMaxquota' => array('type' => 'int', 'default' => $CONF['maxquota']),
|
||||
'fTransport' => array('type' => 'str', 'default' => $CONF['transport_default'], 'options' => $CONF['transport_options']),
|
||||
'fDefaultaliases' => array('type' => 'str', 'default' => 'off', 'options' => array('on', 'off')),
|
||||
'fBackupmx' => array('type' => 'str', 'default' => 'off', 'options' => array('on', 'off'))
|
||||
);
|
||||
|
||||
foreach($form_fields as $key => $default) {
|
||||
if(isset($_POST[$key]) && (!empty($_POST[$key]))) {
|
||||
$$key = escape_string($_POST[$key]);
|
||||
}
|
||||
else {
|
||||
$$key = $default['default'];
|
||||
}
|
||||
if($default['type'] == 'int') {
|
||||
$$key = intval($$key);
|
||||
}
|
||||
if($default['type'] == 'str') {
|
||||
$$key = strip_tags($$key); /* should we even bother? */
|
||||
}
|
||||
if(isset($default['options'])) {
|
||||
if(!in_array($$key, $default['options'])) {
|
||||
die("Invalid parameter given for $key");
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
/* default values as set above */
|
||||
$tTransport = $fTransport;
|
||||
$tAliases = $fAliases;
|
||||
$tMaxquota = $fMaxquota;
|
||||
$tMailboxes = $fMailboxes;
|
||||
$tDefaultAliases = $fDefaultaliases;
|
||||
$tBackupmx = $fBackupmx;
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
if ($fDomain == null or domain_exist($fDomain) or !check_domain($fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tDomain = $fDomain;
|
||||
$tDescription = $fDescription;
|
||||
$tAliases = $fAliases;
|
||||
$tMailboxes = $fMailboxes;
|
||||
if (isset ($_POST['fMaxquota'])) $tMaxquota = $fMaxquota;
|
||||
if (isset ($_POST['fTransport'])) $tTransport = $fTransport;
|
||||
if (isset ($_POST['fDefaultaliases'])) $tDefaultaliases = $fDefaultaliases;
|
||||
if (isset ($_POST['fBackupmx'])) $tBackupmx = $fBackupmx;
|
||||
$pAdminCreate_domain_domain_text = $PALANG['pAdminCreate_domain_domain_text_error2'];
|
||||
if (domain_exist ($fDomain)) $pAdminCreate_domain_domain_text = $PALANG['pAdminCreate_domain_domain_text_error'];
|
||||
}
|
||||
|
||||
if ($error != 1)
|
||||
{
|
||||
$tAliases = $CONF['aliases'];
|
||||
$tMailboxes = $CONF['mailboxes'];
|
||||
$tMaxquota = $CONF['maxquota'];
|
||||
|
||||
if ($fBackupmx == "on")
|
||||
{
|
||||
$fAliases = -1;
|
||||
$fMailboxes = -1;
|
||||
$fMaxquota = -1;
|
||||
$fBackupmx = 1;
|
||||
$sqlBackupmx = db_get_boolean(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$fBackupmx = 0;
|
||||
$sqlBackupmx = db_get_boolean(false);
|
||||
}
|
||||
$sql_query = "INSERT INTO $table_domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,created,modified) VALUES ('$fDomain','$fDescription',$fAliases,$fMailboxes,$fMaxquota,'$fTransport',$sqlBackupmx,NOW(),NOW())";
|
||||
$result = db_query($sql_query);
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tMessage = $PALANG['pAdminCreate_domain_result_error'] . "<br />($fDomain)<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($fDefaultaliases == "on")
|
||||
{
|
||||
foreach ($CONF['default_aliases'] as $address=>$goto)
|
||||
{
|
||||
$address = $address . "@" . $fDomain;
|
||||
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified) VALUES ('$address','$goto','$fDomain',NOW(),NOW())");
|
||||
}
|
||||
}
|
||||
$tMessage = $PALANG['pAdminCreate_domain_result_success'] . "<br />($fDomain)</br />";
|
||||
}
|
||||
if (!domain_postcreation($fDomain))
|
||||
{
|
||||
$tMessage = $PALANG['pAdminCreate_domain_error'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_create-domain.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
@ -0,0 +1,332 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* File: create-mailbox.php
|
||||
* Responsible for allowing for the creation of mail boxes
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tMessage
|
||||
* tUsername
|
||||
* tName
|
||||
* tQuota
|
||||
* tDomain
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fUsername
|
||||
* fPassword
|
||||
* fPassword2
|
||||
* fName
|
||||
* fQuota
|
||||
* fDomain
|
||||
* fActive
|
||||
* fMail
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('admin');
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
if(authentication_has_role('global-admin')) {
|
||||
$list_domains = list_domains ();
|
||||
}
|
||||
else {
|
||||
$list_domains = list_domains_for_admin($SESSID_USERNAME);
|
||||
}
|
||||
|
||||
|
||||
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
|
||||
$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text'];
|
||||
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
$fDomain = $list_domains[0];
|
||||
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
|
||||
if(!in_array($fDomain, $list_domains)) {
|
||||
die("Invalid domain name selected, or you tried to select a domain you are not an admin for");
|
||||
}
|
||||
$tDomain = $fDomain;
|
||||
$result = db_query ("SELECT * FROM $table_domain WHERE domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$tQuota = $row['maxquota'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
|
||||
if (isset ($_POST['fUsername']) && isset ($_POST['fDomain'])) $fUsername = escape_string ($_POST['fUsername']) . "@" . escape_string ($_POST['fDomain']);
|
||||
$fUsername = strtolower ($fUsername);
|
||||
if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
|
||||
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||
isset ($_POST['fName']) ? $fName = escape_string ($_POST['fName']) : $fName = "";
|
||||
if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
|
||||
isset ($_POST['fQuota']) ? $fQuota = intval($_POST['fQuota']) : $fQuota = 0;
|
||||
isset ($_POST['fActive']) ? $fActive = escape_string ($_POST['fActive']) : $fActive = "1";
|
||||
if (isset ($_POST['fMail'])) $fMail = escape_string ($_POST['fMail']);
|
||||
|
||||
|
||||
if ( (!check_owner ($SESSID_USERNAME, $fDomain)) && (!authentication_has_role('global-admin')) )
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||
}
|
||||
|
||||
if (!check_mailbox ($fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error3'];
|
||||
}
|
||||
|
||||
if (empty ($fUsername) or !check_email ($fUsername))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||
}
|
||||
|
||||
$tPassGenerated = 0;
|
||||
if (empty ($fPassword) or empty ($fPassword2) or ($fPassword != $fPassword2))
|
||||
{
|
||||
if (empty ($fPassword) and empty ($fPassword2) and $CONF['generate_password'] == "YES")
|
||||
{
|
||||
$fPassword = generate_password ();
|
||||
$tPassGenerated = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($CONF['quota'] == "YES")
|
||||
{
|
||||
if (!check_quota ($fQuota, $fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
|
||||
}
|
||||
}
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error2'];
|
||||
}
|
||||
|
||||
if ($error != 1)
|
||||
{
|
||||
$password = pacrypt ($fPassword);
|
||||
|
||||
if ($CONF['domain_path'] == "YES")
|
||||
{
|
||||
if ($CONF['domain_in_mailbox'] == "YES")
|
||||
{
|
||||
$maildir = $fDomain . "/" . $fUsername . "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
$maildir = $fDomain . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$maildir = $fUsername . "/";
|
||||
}
|
||||
|
||||
if (!empty ($fQuota))
|
||||
{
|
||||
$quota = multiply_quota ($fQuota);
|
||||
}
|
||||
else
|
||||
{
|
||||
$quota = 0;
|
||||
}
|
||||
|
||||
if ($fActive == "on")
|
||||
{
|
||||
$sqlActive = db_get_boolean(True);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sqlActive = db_get_boolean(False);
|
||||
}
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
db_query('BEGIN');
|
||||
}
|
||||
|
||||
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
|
||||
}
|
||||
|
||||
/*
|
||||
# TODO: The following code segment is from admin/create-mailbox.php. To be compared/merged with the code from /create-mailbox.php.
|
||||
Lines starting with /* were inserted to keep this section in commented mode.
|
||||
|
||||
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
$error=TRUE; // Being pessimistic
|
||||
if (mailbox_postcreation($fUsername,$fDomain,$maildir))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$result=db_query("COMMIT");
|
||||
|
||||
/* should really not be possible: */
|
||||
/*
|
||||
if (!$result) die('COMMIT-query failed.');
|
||||
}
|
||||
$error=FALSE;
|
||||
} else {
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$result=db_query("ROLLBACK");
|
||||
|
||||
/* should really not be possible: */
|
||||
/*
|
||||
if (!$result) die('ROLLBACK-query failed.');
|
||||
} else {
|
||||
/*
|
||||
When we cannot count on transactions, we need to move forward, despite
|
||||
the problems.
|
||||
*/
|
||||
/*
|
||||
$error=FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!$error)
|
||||
{
|
||||
db_log ($CONF['admin_email'], $fDomain, 'create_mailbox', $fUsername);
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
TODO: this is the start of /create-mailbox code segment that was originally used in /create-mailbox.php instead
|
||||
of the above from admin/create-mailbox.php.
|
||||
To be compared / merged.
|
||||
*/
|
||||
|
||||
// apparently uppercase usernames really confuse some IMAP clients.
|
||||
$fUsername = strtolower($fUsername);
|
||||
$local_part = '';
|
||||
if(preg_match('/^(.*)@/', $fUsername, $matches)) {
|
||||
$local_part = $matches[1];
|
||||
}
|
||||
$result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1 || !mailbox_postcreation($fUsername,$fDomain,$maildir, $quota))
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||
db_query('ROLLBACK');
|
||||
}
|
||||
else
|
||||
{
|
||||
db_query('COMMIT');
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'create_mailbox', "$fUsername");
|
||||
/*
|
||||
TODO: this is the end of /create-mailbox.php code segment
|
||||
*/
|
||||
$tDomain = $fDomain;
|
||||
|
||||
$tQuota = $CONF['maxquota'];
|
||||
|
||||
if ($fMail == "on")
|
||||
{
|
||||
$fTo = $fUsername;
|
||||
$fFrom = $SESSID_USERNAME;
|
||||
$fHeaders = "To: " . $fTo . "\n";
|
||||
$fHeaders .= "From: " . $fFrom . "\n";
|
||||
|
||||
$fHeaders .= "Subject: " . encode_header ($PALANG['pSendmail_subject_text']) . "\n";
|
||||
$fHeaders .= "MIME-Version: 1.0\n";
|
||||
$fHeaders .= "Content-Type: text/plain; charset=utf-8\n";
|
||||
$fHeaders .= "Content-Transfer-Encoding: 8bit\n";
|
||||
|
||||
$fHeaders .= $CONF['welcome_text'];
|
||||
|
||||
if (!smtp_mail ($fTo, $fFrom, $fHeaders))
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||
}
|
||||
}
|
||||
|
||||
$tShowpass = "";
|
||||
if ( $tPassGenerated == 1 || $CONF['show_password'] == "YES") $tShowpass = " / $fPassword";
|
||||
|
||||
if (create_mailbox_subfolders($fUsername,$fPassword))
|
||||
{
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_success'] . "<br />($fUsername$tShowpass)";
|
||||
} else {
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_succes_nosubfolders'] . "<br />($fUsername$tShowpass)";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/create-mailbox.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
@ -1,22 +1,30 @@
|
||||
PostfixAdmin for Debian
|
||||
=======================
|
||||
|
||||
After installing the package, you should find that :
|
||||
|
||||
http://youserver/postfixadmin/setup.php works. This should
|
||||
guide you through the appropriate process.
|
||||
|
||||
You will need to create a database (either MySQL or PostgreSQL)
|
||||
and know the username and password for it. The Database does not need
|
||||
to be on the same server as the Postfixadmin install.
|
||||
|
||||
|
||||
|
||||
Recommended and Suggested Packages
|
||||
==================================
|
||||
|
||||
- Postfix
|
||||
- MySQL or PostgreSQL
|
||||
- Courier or Dovecot
|
||||
|
||||
|
||||
Where to get help
|
||||
=================
|
||||
|
||||
The first stop would be the Postfixadmin Website, Forum or IRC channel.
|
||||
|
||||
See :
|
||||
- http://postfixadmin.sf.net
|
||||
- #postfixadmin on irc.freenode.net
|
||||
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
This package is using the quilt framework.
|
||||
All patches are located in debian/patches.
|
||||
|
||||
Adding a new patch: quilt new <date-patch_name>
|
||||
This will create a new file debian/patches/patch/date-patch_name.
|
||||
Please use the current date (e.g. 20100221 - YYYYMMDD) as prefix!
|
||||
|
||||
Editing a file to include it into the patch: quilt edit <filename>
|
||||
This will open your $EDITOR.
|
||||
|
||||
To write your changes into the new patchfile: quilt refresh.
|
||||
|
||||
quilt push:
|
||||
Apply patch(es) from the series file. Without options, the next
|
||||
patch in the series file is applied. When a number is specified,
|
||||
apply the specified number of patches. When a patch name is
|
||||
specified, apply all patches up to and including the specified patch.
|
||||
Patch names may include the patches/ prefix, which means that
|
||||
filename completion can be used.
|
||||
|
||||
quilt pop:
|
||||
Remove patch(es) from the stack of applied patches. Without options,
|
||||
the topmost patch is removed. When a number is specified, remove the
|
||||
specified number of patches. When a patch name is specified, remove
|
||||
patches until the specified patch end up on top of the stack.
|
||||
Patch names may include the patches/ prefix, which means that
|
||||
filename completion can be used.
|
||||
@ -1,21 +0,0 @@
|
||||
Random instructions for help:
|
||||
|
||||
This 'debian' directory is used by dpkg-buildpackage when creating a .deb.
|
||||
|
||||
You'll need to install :
|
||||
|
||||
apt-get install dpkg-dev quilt debhelper
|
||||
|
||||
Then from within the trunk directory (or whatever forms the root of the
|
||||
postfixadmin project), do the following :
|
||||
|
||||
1. Update debian/changelog; include your email address in the last change
|
||||
(this is used to determine a gpg key to use)
|
||||
|
||||
2. debian/rules prep
|
||||
|
||||
3. dpkg-buildpackage -rfakeroot
|
||||
|
||||
4. Look in ../ at the shiny .deb / .tar.gz
|
||||
|
||||
5. Profit.
|
||||
@ -1,3 +0,0 @@
|
||||
* DebTags
|
||||
* dbconfig: DOCUMENTS/SECURITY.txt
|
||||
* include postfix configuration templates
|
||||
@ -0,0 +1,6 @@
|
||||
# BEGIN FOR POSTFIXADMIN
|
||||
|
||||
Alias /postfixadmin /usr/share/postfixadmin
|
||||
|
||||
|
||||
# END FOR POSTFIXADMIN
|
||||
@ -1,5 +0,0 @@
|
||||
# BEGIN FOR POSTFIXADMIN
|
||||
|
||||
Alias /postfixadmin /usr/share/postfixadmin/public
|
||||
|
||||
# END FOR POSTFIXADMIN
|
||||
@ -1,77 +1,88 @@
|
||||
postfixadmin (3.2-1) unstable; urgency=low
|
||||
postfixadmin (2.3beta) unstable; urgency=low
|
||||
|
||||
* New upstream release - PostfixAdmin v3.2
|
||||
* Subversion revision 539
|
||||
* Fixes for MySQL upgrade issues
|
||||
* Improved vacation.pl (renotification options, use SMTP headers, better
|
||||
logging, optional external config file)
|
||||
* Improved fetchmail.pl
|
||||
* Domain aliases - new implementation should reduce backscatter etc.
|
||||
* translation updates
|
||||
* Added domain-postcreation script support
|
||||
* Enhanced mailbox table to make it easier for people to customise where mailboxes live
|
||||
* and much more
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Wed, 02 May 2018 21:36:01 +0100
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Tue, 20 Jan 2009 20:50:00 +0000
|
||||
|
||||
postfixadmin (3.1-1) unstable; urgency=low
|
||||
postfixadmin (2.2.1.1) unstable; urgency=low
|
||||
|
||||
* New upstream release
|
||||
* Subversion revision 412 (from branches/postfixadmin-2.2.1)
|
||||
* THIS IS EFFECTIVELY THE SAME AS 2.2.1 (which should probably be ignored)
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Sun, 25 Jun 2017 16:27:01 +0000
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 23 Jul 2008 12:37:00 +0000
|
||||
|
||||
postfixadmin (3.0.2-1) unstable; urgency=low
|
||||
postfixadmin (2.2.1) unstable; urgency=low
|
||||
|
||||
* Security fix (don't delete protected aliases, CVE-2017-5930)
|
||||
* Fix MySQL vacation.cache column (regression fix)
|
||||
* Various bug fixes (MySQL charset issue(s))
|
||||
* Updated translations (pl, bg, ru, nb, tw etc)
|
||||
* added quota parameter to mailbox_postcreation hook
|
||||
* new hook to update the quota after editing a mailbox
|
||||
($CONF['mailbox_postedit_script'])
|
||||
* fixed subfolder creation order and timing
|
||||
* allow smtp server to be specified in vacation.pl
|
||||
* fixed MySQL charset issues
|
||||
* several small bugfixes
|
||||
* Norwegian (bokmal) translation added
|
||||
* Updated translations (pl, bg, ru, nb, tw etc)
|
||||
* Subversion revision 408
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Wed, 08 Feb 2017 19:30:00 +0000
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Mon, 21 Jul 2008 22:44:00 +0000
|
||||
postfixadmin (2.2.0) unstable; urgency=low
|
||||
|
||||
postfixadmin (3.0.1-2) unstable; urgency=low
|
||||
* 2.2.0 Released.
|
||||
* Fix fetchmail script to work with PostgreSQL
|
||||
* Fix fetchmail table creation in MySQL and PostgreSQL
|
||||
* Documentation fixups
|
||||
* Subversion revision 356
|
||||
|
||||
* Try and make dependencies less strict (and perhaps work for Ubuntu Precise as well)
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Thu, 29 Apr 2008 15:47:00 +0000
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Mon, 10 Oct 2016 20:00:00 +0100
|
||||
postfixadmin (2.2.0-rc5) unstable; urgency=low
|
||||
|
||||
postfixadmin (3.0.1-1) unstable; urgency=low
|
||||
* Fix MySQL installation issues (schema not being created!)
|
||||
* Fix MySQL vacation_notification timestamp issue
|
||||
* SVN revision: 340
|
||||
|
||||
* Fix packaging issues (missing: smarty/ and configs/)
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 23 Apr 2008 16:27:00 +0000
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Mon, 19 Sep 2016 10:08:00 +0100
|
||||
postfixadmin (2.2.0-1rc4) unstable; urgency=low
|
||||
|
||||
postfixadmin (3.0-1) unstable; urgency=low
|
||||
* Removal of standalone database schema files (see upgrade.php)
|
||||
* Various bug fixes
|
||||
* Better/Move documentation on installation
|
||||
* setup.php/upgrade.php works for PostgreSQL and MySQL
|
||||
* MySQL Unicode problems fixed
|
||||
* I think this is effectively v2.2.0
|
||||
* SVN revision: 336
|
||||
|
||||
* New upstream release
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Sun, 20 Apr 2008 20:19:00 +0000
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Sun, 11 Sep 2016 18:42:00 +0100
|
||||
postfixadmin (2.2.0-1rc3) unstable; urgency=low
|
||||
|
||||
postfixadmin (2.93-2) unstable; urgency=low
|
||||
* Various bug fixes
|
||||
|
||||
* Replace debian/ using Debian v2.3.7-2. See Debian's #821643
|
||||
* This adds : PHP7 and Apache 2.4 support.
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Thu, 28 Feb 2008 12:00:00 +0000
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Sun, 22 May 2016 19:41:01 +0100
|
||||
postfixadmin (2.2.0-1rc2) unstable; urgency=low
|
||||
|
||||
postfixadmin (2.93-1) unstable; urgency=low
|
||||
* Improved CSS
|
||||
* Improved upgrade procedure (should work for PGSQL) (see upgrade.php)
|
||||
* Various bug fixes
|
||||
|
||||
* New upstream release (effectively beta3 for v3.0)
|
||||
* update dependencies to allow mariadb as database
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Sat, 29 Dec 2007 21:14:00 +0000
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Sat, 26 Sep 2015 15:05:00 +0100
|
||||
postfixadmin (2.2.0-1rc1) unstable; urgency=low
|
||||
|
||||
postfixadmin (2.92-1) unstable; urgency=low
|
||||
* Initial Release (via dpkg)
|
||||
|
||||
* New upstream release (effectively beta2 for v3.0)
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Wed, 28 Oct 2014 21:02:00 +0100
|
||||
|
||||
postfixadmin (2.91-1) unstable; urgency=low
|
||||
|
||||
* New upstream release (effectively beta for v3.0)
|
||||
|
||||
-- David Goodwin <david@palepurple.co.uk> Tue, 06 May 2014 21:36:00 +0100
|
||||
|
||||
postfixadmin (2.3.5-2) unstable; urgency=low
|
||||
|
||||
* Added .po translation files (Closes: 667951, #667962, #668202, #668288)
|
||||
* Closes: #668298, #668301, #668405, #668635
|
||||
* Updated standards version to 3.9.3 without changes.
|
||||
|
||||
-- Norman Messtorff <normes@normes.org> Thu, 26 Apr 2012 20:55:57 +0200
|
||||
|
||||
postfixadmin (2.3.5-1) unstable; urgency=low
|
||||
|
||||
* Initial Debian release (Closes: #247225)
|
||||
|
||||
-- Norman Messtorff <normes@normes.org> Sun, 15 Jan 2012 12:27:28 +0100
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Sun, 04 Nov 2007 15:36:00 +0000
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
7
|
||||
5
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
/etc/apache2/conf.d/postfixadmin
|
||||
/etc/postfixadmin/config.inc.php
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue