ubuntuusers.de

Postfixadmin und fetchmail

Status: Gelöst | Ubuntu-Version: Server 14.04 (Trusty Tahr)
Antworten |

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: Zähle...

Wohnort: Eifel

Hallo zusammen, ich hab mich an zwei Anleitungen zur Implementierung der fetchmail Funktion in Postfixadmin gehalten.

Ich hab nach Anleitung die fetchmail.pl im Postfixadmin Verzeichnis bearbeitet. Postfixadmin nutzt als Datenbackend eine MySQL Datenbank.

Einen entsprechenden fetchmail Auftrag habe ich über Postfixadmin hinterlegt. Dieser ist auch in der Datenbank gespeichert. Ob diese Einstellungen richtig sind weiß ich leider nicht, da ich keine logs bekomme und momentan keine E-Mails des zu abrufenden E-Mail Postfachs empfange.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# database settings

# database backend - uncomment one of these
#our $db_type = 'Pg';
#my $db_type = 'mysql';
our $db_type = 'mysql';

# host name
our $db_host="127.0.0.1";
# database name
our $db_name="EDIT";
# database username
our $db_username="EDIT";
# database password
our $db_password="EDIT";

fetchmail als Dienst habe ich in der default Datei deaktiviert

1
START_DAEMON=no

Crontab hab ich auch hinterlegt.

1
*/5 * * * * sudo -H -u vmail /var/www/postfixadmin/ADDITIONS/fetchmail.pl > /dev/null 2&>1

Die Dateiberechtigung auf die fetchmail.pl angepasst.

1
-rwxr-xr-x  1 vmail    mail     4096 Sep 16 11:20 fetchmail.pl

Ich weiß nicht warum das mit fetchmail nicht funktioniert. Ich kann auch nirgends logs von fetchmail finden. Laut Anleitung 2. Müsste er nach /var/log/fetchmail protokollieren. Die ist allerdings leer. Im Orginalzustand finde ich auch keine logs.

Die Berechtigung der fetchmail Datei unter /var/log habe ich auch angepasst.

1
-rw-rw-rw-  1 vmail    mail          0 Sep 16 11:09 fetchmail

Die ein zigsten Logs die ich habe, sind die von Cron in der Syslog.

1
Sep 16 11:54:01 s18451079 CRON[20118]: (root) CMD (sudo -H -u vmail /var/www/postfixadmin/ADDITIONS/fetchmail.pl > /dev/null 2&>1 )

Hat jemand eine Idee wo der Fehler liegen könnte? Ohne logs ist man voll aufgeschmissen.

Gruß Volker

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Hast du schonmal den Befehl

sudo -H -u vmail /var/www/postfixadmin/ADDITIONS/fetchmail.pl

Selbst als root ausgefuehrt?

Ausserdem, was steht in dem Perlskript?

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Nein, bisher nicht nicht. Ich bekomme unter vmail folgenden Fehler.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
root@www1:~# sudo -H -u vmail /var/www/postfixadmin/ADDITIONS/fetchmail.pl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_PAPER = "de_DE.UTF-8",
	LC_ADDRESS = "de_DE.UTF-8",
	LC_MONETARY = "de_DE.UTF-8",
	LC_NUMERIC = "de_DE.UTF-8",
	LC_TELEPHONE = "de_DE.UTF-8",
	LC_IDENTIFICATION = "de_DE.UTF-8",
	LC_MEASUREMENT = "de_DE.UTF-8",
	LC_CTYPE = "en_US",
	LC_TIME = "de_DE.UTF-8",
	LC_NAME = "de_DE.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Can't locate LockFile/Simple.pm:   Permission denied at /var/www/postfixadmin/ADDITIONS/fetchmail.pl line 9.
BEGIN failed--compilation aborted at /var/www/postfixadmin/ADDITIONS/fetchmail.pl line 9.

Unter root kommt fast der gleicher Fehler.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
root@www1:~# sudo -H -u root /var/www/postfixadmin/ADDITIONS/fetchmail.pl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_PAPER = "de_DE.UTF-8",
	LC_ADDRESS = "de_DE.UTF-8",
	LC_MONETARY = "de_DE.UTF-8",
	LC_NUMERIC = "de_DE.UTF-8",
	LC_TELEPHONE = "de_DE.UTF-8",
	LC_IDENTIFICATION = "de_DE.UTF-8",
	LC_MEASUREMENT = "de_DE.UTF-8",
	LC_CTYPE = "en_US",
	LC_TIME = "de_DE.UTF-8",
	LC_NAME = "de_DE.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Can't locate LockFile/Simple.pm in @INC (you may need to install the LockFile::Simple module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at /var/www/postfixadmin/ADDITIONS/fetchmail.pl line 9.
BEGIN failed--compilation aborted at /var/www/postfixadmin/ADDITIONS/fetchmail.pl line 9.
root@www1:~# 

Die besagten Zeilen um Zeile 9

1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

use DBI;
use MIME::Base64;
# use Data::Dumper;
use File::Temp qw/ mkstemp /;
use Sys::Syslog;
# require liblockfile-simple-perl
use LockFile::Simple qw(lock trylock unlock);

Anscheinend fehlt das LockFile::Simple Modul. Falls jemand auch weiß wie ich die Sprache festlegen kann wäre ich auch dankbar. Gibt keine GUI.

Gruß Volker

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Dir fehlt das Paket liblockfile-simple-perl.

Zum locale Problem gibt's massenhaft Threads, wenn man nach der Fehlermeldung sucht:

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Danke sehr, hat mir geholfen.

Das Problem mit der Sprache hab ich auch behoben.

Woher wusstest du jetzt das es an dem Paket liegt was mir fehlte?

Gruß Volker

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

VolkerRaschek schrieb:

Danke sehr, hat mir geholfen.

Super ☺

Woher wusstest du jetzt das es an dem Paket liegt was mir fehlte?

apt-file find LockFile/Simple.pm

apt-file muss natuerlich installiert sein.

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

sebix schrieb:

apt-file find LockFile/Simple.pm

apt-file muss natuerlich installiert sein.

Ahaaa, das ist seht gut. So was kann ich gut gebrauchen. 😀

Nun nur noch eine Kleinigkeit.

Leider kann ich immer noch nicht überprüfen, ob fetchmail richtig arbeitet. Ich bekomme zwar in der syslog etwas angezeigt

Sep 24 16:32:01 s18451079 fetchmail-all 27534: fetch volker.raschek for vraschek@..

jedoch bekomme ich keine E-Mails aus dem anderen Postfach. Ich habe die SMTP Einstellungen aus Thunderbird übernommen soweit es ging.

Das Postfach was abgerufen werden soll liegt bei web.de. Einstellungen.

Protokoll: IMAP
SMTP: imap.web.de
Benutzer: benutzername (mit @web.de oder ohne?)
Passwort: passwort
SSL Aktiv: JA (ich weiß leider nicht ob SSL oder TLS bzw den Port den er benutzen soll. Das gibt die Einstellung in Postfixadmin nicht her.)

Leider kann ich nicht sehen, wenn der Fehler hat, ob er und wohin er Protokolliert. Hast du vielleicht eine Ahnung wie ich an die Protokolle komme oder was an den Einstellungen falsch sein soll?

Gruß Volker

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Das kann ich dir mangels des Skripts auch nicht sagen. Welchen Output bekommst du denn nun, wenn du es wie oben besprochen ausfuehrst?

Das Skript beinhaltet ja einen fetchmail-Aufruf. Wie sieht dieser aus und kannst du den manuell starten? Werden hier eventl. Fehlermeldungen unterdrueckt?

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Das fetchmail.pl Script sieht so aus. Dort habe ich nur den Zugang zur MySQL Datenbank eingegeben und versucht an der Stelle, die in der Anleitung beschrieben ist, den Code für die Protokollierung zu ändern.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/usr/bin/perl

use DBI;
use MIME::Base64;
# use Data::Dumper;
use File::Temp qw/ mkstemp /;
use Sys::Syslog;
# require liblockfile-simple-perl
use LockFile::Simple qw(lock trylock unlock);

######################################################################
########## Change the following variables to fit your needs ##########

# database settings

# database backend - uncomment one of these
#our $db_type = 'Pg';
#my $db_type = 'mysql';
our $db_type = 'mysql';

# host name
our $db_host="127.0.0.1";
# database name
our $db_name="DBNAME";
# database username
our $db_username="USERNAME";
# database password
our $db_password="PASSWORT";

# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf
# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example:
# $db_username = 'mail';
if (-f "/etc/mail/postfixadmin/fetchmail.conf") {
	require "/etc/mail/postfixadmin/fetchmail.conf";
}


#################### Don't change anything below! ####################
######################################################################

openlog("fetchmail-all", "pid", "mail");

sub log_and_die {
	my($message) = @_;
  syslog("err", $message);
  die $message;
}

# read options and arguments

$configfile = "/etc/fetchmail-all/config";

@ARGS1 = @ARGV;

while ($_ = shift @ARGS1) {
    if (/^-/) {
        if (/^--config$/) {
            $configfile = shift @ARGS1
        }
    }
}

$run_dir="/var/run/fetchmail";

# use specified config file
if (-e $configfile) {
    do $configfile;
}

if($db_type eq "Pg" || $db_type eq "mysql") {
	$dsn = "DBI:$db_type:database=$db_name;host=$db_host";
} else {
	log_and_die "unsupported db_type $db_type";
}

$lock_file=$run_dir . "/fetchmail-all.lock";

$lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1);
$lockmgr->lock($lock_file) || log_and_die "can't lock ${lock_file}";

# database connect
$dbh = DBI->connect($dsn, $db_username, $db_password) || log_and_die "cannot connect the database";

if($db_type eq "Pg") {
	$sql_cond = "date_part('epoch',now())-date_part('epoch',date)";
} elsif($db_type eq "mysql") {
	$sql_cond = "unix_timestamp(now())-unix_timestamp(date)";
}

$sql = "
	SELECT id,mailbox,src_server,src_auth,src_user,src_password,src_folder,fetchall,keep,protocol,mda,extra_options,usessl, sslcertck, sslcertpath, sslfingerprint
	FROM fetchmail
	WHERE $sql_cond  > poll_time*60
	";

my (%config);
map{
	my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl,$sslcertck,$sslcertpath,$sslfingerprint)=@$_;

	syslog("info","fetch ${src_user}@${src_server} for ${mailbox}");

	$cmd="user '${src_user}' there with password '".decode_base64($src_password)."'";
	$cmd.=" folder '${src_folder}'" if ($src_folder);
	$cmd.=" mda ".$mda if ($mda);

#	$cmd.=" mda \"/usr/local/libexec/dovecot/deliver -m ${mailbox}\"";
	$cmd.=" is '${mailbox}' here";

	$cmd.=" keep" if ($keep);
	$cmd.=" fetchall" if ($fetchall);
	$cmd.=" ssl" if ($usessl);
	$cmd.=" sslcertck" if($sslcertck);
	$cmd.=" sslcertpath $sslcertpath" if ($sslcertck && $sslcertpath);
	$cmd.=" sslfingerprint \"$sslfingerprint\"" if ($sslfingerprint);
	$cmd.=" ".$extra_options if ($extra_options);

	$text=<<TXT;
set postmaster "postmaster"
set nobouncemail
set no spambounce
set properties ""
set syslog

poll ${src_server} with proto ${protocol}
	$cmd

TXT

  ($file_handler, $filename) = mkstemp( "/tmp/fetchmail-all-XXXXX" ) or log_and_die "cannot open/create fetchmail temp file";
  print $file_handler $text;
  close $file_handler;

# Ausführliche Protokollierung
  $ret=`/usr/bin/fetchmail -v >>/var/log/fetchmail`; 
  
# Normale Protokollierung
# $ret=`/usr/bin/fetchmail -L /var/log/fetchmail`; 

# Orginal Zustand
#  $ret=`/usr/bin/fetchmail -f $filename -i $run_dir/fetchmail.pid`;

  unlink $filename;

  $sql="UPDATE fetchmail SET returned_text=".$dbh->quote($ret).", date=now() WHERE id=".$id;
  $dbh->do($sql);
}@{$dbh->selectall_arrayref($sql)};

$lockmgr->unlock($lock_file);
closelog();

Wenn ich den Befehl so absetze kommt nichts.

1
2
root@www1:~# sudo -H -u vmail /var/www/postfixadmin/ADDITIONS/fetchmail.pl > /dev/null 2&>1
root@www1:~# 

Ich hab gerade mal in der Datenbank nach geschaut. Dort sind Spalten leer. Die habe ich bisher nicht bemerkt, da die GUI mir die Optionen nicht angeboten hat. Folgende Spalten in meinem Eintrag sind leer.

sslcertck, sslcertpath, sslfingerprint, extra_options, returned_text, mda

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

VolkerRaschek schrieb:

Wenn ich den Befehl so absetze kommt nichts.

1
2
root@www1:~# sudo -H -u vmail /var/www/postfixadmin/ADDITIONS/fetchmail.pl > /dev/null 2&>1
root@www1:~# 

Wie ich oben schon geschrieben habe, sollst du zum Testen die Umleitungen weggeben. Sonst kommt da per definitionem nichts raus.

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Also ich weiß jetzt nicht was ich gemacht habe, aber auf einmal geht es. Ich kann mir noch nicht erklären wieso.

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Ahaa ich hab es gefunden. In der Anleitung steht, dass man als Entfernten Ordner nichts angeben soll. Also leer lassen. Ich hab dort eben im Unterbewusstsein INBOX angegeben.

Trotzdem vielen dank für deine Hilfe sebix.

Gruß Volker

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Hey sebix, hast du vielleicht eine Ahnung warum er mir das Verzeichnis

/var/run/fetchmail

nach einem Neustart mit Dateiinhalt löscht?

Gruß Volker

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

VolkerRaschek schrieb:

hast du vielleicht eine Ahnung warum er mir das Verzeichnis

/var/run/fetchmail

nach einem Neustart mit Dateiinhalt löscht?

Weil das Verzeichnis /var/run per Definition bei Neustart geleert wird. Die Files dort sind nur zur Laufzeit (runtime) relevant, also zb pids und sockets.

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Danke sebix, das hab ich auch heraus gefunden (:

Ich hab das run Verzeichnis einfach wo anders hin gelegt. Jetzt funktioniert es.

Gruß Volker

Antworten |