[PHP]oder[PERL] suche script, das mails abholt uns anhänge speichert

wolf

Lieutenant
Registriert
Nov. 2002
Beiträge
675
servus leute,
also was ich suche ist ein script, das mails von einem pop3-server abholen kann und die anhänge automatisch speichert.
gibt es sowas schon, muss ich das selber schreiben?
wenn ja, welches mail-programm kann man unter linux von der kommandozeile so steuern, dass es mir die anhänge rausrückt?

danke schonmal!
 
wie du die anhänge entsprechend ausgiebst etc, weiss ich ned wirklich, aber in PERL kannst du etwa folgendes versuchen:



Code:
#!E:/Perl/bin/perl -w
use CGI;
use strict 'refs';
use lib '..';
use CGI qw(:standard);
use CGI::Carp qw/fatalsToBrowser/;
use CGI::Cookie;
use Net::POP3;
use Net::SMTP;
#-----
$host='pcw.homeip.net';
$username=param('user');
$password=param('pass');
$ip= remote_addr;
#-----

%user = cookie('pcwmail');

if($username)
{
  $user{'user'}=$username;
  $user{'pass'}=$password;
  $user{'ip'}=$ip;
}
$the_cookie = cookie(-name=>'pcwmail',
		     -value=>\%user,
		     -expires=>"+1h");
#-----
print header(-cookie=>$the_cookie);
print "<html>\n<head>\n<title>Webmail</title>\n";
print '<style media="screen" type="text/css"><!--
a:link{font-family:Tahoma,Arial;color:#e0e000;text-decoration:none;font-weight:bold;}
a:hover{font-family:Tahoma,Arial;color:#FFc000;text-decoration:none;font-weight:bold;}
a:active{font-family:Tahoma,Arial;color:#ADF3FB;text-decoration:none;font-weight:bold;}
a:visited{font-family:Tahoma,Arial;color:#00dcf0;text-decoration:none;font-weight:bold;}
input.txt { background-color: #000c34; font-family: Verdana, Helvetica, Arial; font-size: 9pt; color: #8Dd3eB; border-style:solid; border-width:1px; }
textarea { background-color: #000c34; font-family: Verdana, Helvetica, Arial; font-size: 9pt; color: #8Dd3eB; border-style:solid; border-width:1px; }
input.btn { background-color: #101c54; font-family: Verdana, Helvetica, Arial; font-size: 9pt; color: #8Dd3eB; text-align:center; border-style:solid; border-width:1px; }
td{font-family:Tahoma,Arial;font-Size:11px;}
tr.0{background-color:#002030;}
tr.1{background-color:#000000;}
table {border-width:1px;
  border-style:solid;
  border-color:#00dcf0;
  padding:1cm;
  text-align:justify; }
--></style>';
print "</head>\n<body style=\"font-family:arial,verdana,helvetica,tahoma;font-size:12px;background-color:#000000;color:#00dcf0;\">\n";

if(param('atn')eq 'pop')
{
  if(param('get') ne '')
  {
    &popget();
  }else
  {
    &poplist();
  }
}elsif(param('atn')eq 'login')
{
 &logintest();
}elsif(param('atn')eq 'smtp')
{
 &senden();
 &poplist();
}
else
{
 &loginform();
}

print "</body>\n</html>";
#-----

sub loginform()
{
$pop = Net::POP3->new($host, Timeout => 60);    
if (($pop->login($username, $password)))
{
 &poplist();
}
else
{  
  print "<form action=\"index.cgi\" method=\"post\">\n<table>\n";
  print "<input type=\"hidden\" name=\"atn\" value=\"login\">\n";
  print "<tr><td>E-Mail </td><td><input type=\"text\" name=\"user\"></td></tr>\n";
  print "<tr><td>Passwort </td><td><input type=\"password\" name=\"pass\"></td></tr>\n";
  print "<tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\"Login\"></td></tr>\n</table>\n";
}
}

sub logintest()
{
$pop = Net::POP3->new($host, Timeout => 60);    
if (($pop->login($username, $password)))
{
 $pop->quit;
 &poplist();
}
else
{
 print "Mit den angegebenen Daten Konnte keine Verbindung zum Mailserver hergestellt werden!<br>\n";
 &loginform();
}
}

sub poplist()
{
$pop = Net::POP3->new($host, Timeout => 60);    
if (($pop->login($user{'user'}, $user{'pass'})))
#$pop->user($username);
#$i=$pop->pass($password);

#print $i; 
{
  my $msgnums = $pop->list; # hashref of msgnum => size
  print "Du hast <b>".%$msgnums."</b> neue Nachrichten!<br><a href=\"index.cgi?atn=pop\" target=\"_self\">Aktualisieren</a>\n",hr(),"<table width=\"95%\" align=\"center\" style=\"font-size:12px;\">";
   print "<tr style=\"background-color:#005070;color:#00dcf0\"><th align=\"center\">Von</th><th align=\"center\">Betreff</th><th align=\"center\">Datum</th><th align=\"center\">Löschen</th></tr>";
  foreach my $msgnum (keys %$msgnums) 
  {
   if($c!=1)
   {
    $c=1;
   }
   else
   {
    $c=0;
   }
    my $msg = $pop->top($msgnum);
    for($i=0;$i<$#$msg;$i++)
    {
      if(index(uc($$msg[$i]),uc('From:'))==0)
      {
        $from=substr($$msg[$i],6);
        $from =~ s/</&lt;/gs;
        $from =~ s/>/&gt;/gs;
      }elsif(index(uc($$msg[$i]),uc('Date:'))==0)
      {
        $date=substr($$msg[$i],6);
      }elsif(index(uc($$msg[$i]),uc('Subject:'))==0)
      {
        $subject=substr($$msg[$i],9);
      }
    }
   print "<tr class=\"".$c."\"><td><a href=\"index.cgi?atn=pop&get=".$msgnum."\" target=\"_blank\">$from</a></td><td align=\"center\"><a href=\"index.cgi?atn=pop&get=".$msgnum."\" target=\"_blank\">$subject</a></td><td width=\"190\" align=\"right\">$date</td><td width=\"60\" align=\"right\"><a href=\"index.cgi?atn=pop&get=".$msgnum."&del=1\" target=\"_self\">Löschen</a></td></tr>";
  }
  print "</table>\n",hr,"\n";
  print "<form action=\"index.cgi\" method=\"post\">\n<table align=\"center\">\n";
  print "<input type=\"hidden\" name=\"atn\" value=\"smtp\">\n";
  print "<tr><td>An: </td><td align=\"center\"><input class=\"txt\" type=\"text\" name=\"to\" size=\"50\"></td></tr>\n";
  print "<tr><td colspan=\"2\">Nachricht:</td></tr>\n<tr><td colspan=\"2\"><textarea cols=\"80\" rows=\"15\" name=\"msg\"></textarea></td></tr>\n";
  print "<tr><td colspan=\"2\" align=\"center\"><input class=\"btn\" type=\"submit\" value=\"Senden\"></td></tr>\n</table>\n";
}
else
{
  print "Verbindung zum Server fehlgeschlagen\n";
}
$pop->quit;
}


sub popget()
{
 $pop = Net::POP3->new($host, Timeout => 60);
   
 if (($pop->login($user{'user'}, $user{'pass'})))
 {
   if(param('del')==1)
   {
      $pop->delete(param('get'));
      &poplist();
   }
   else
   {
      print "Nachricht:<br>\n";
      my $msg = $pop->get(param('get'));
      print "<pre>";
      print @$msg;
      print "</pre>";
   }   
 }
 $pop->quit;
}    
#-----
sub senden()
{
$smtp = Net::SMTP->new('pcw.homeip.net');
if($smtp->verify(param('to')))
{ 
  if($smtp->auth($user{'user'},$user{'pass'}))
  {
    $smtp->to(param('to'));
    $smtp->data();
    print $smtp->banner ();
    $smtp->datasend(param('msg'));
    $smtp->dataend();
    $smtp->mail(param('to'));
    $smtp->quit;
    print "Nachricht gesendet<br>\n";
  }else
  {
    print "Auth fehlgeschlagen!<br>\n";
  }
}else
{
  print "Ungültige Zieladresse!<br>\n";
}
}

^^Das Ding hatte ich mal irgendwann testweise geschrieben, aber im SMTP stekcen bestimtm noch einige Fehler. ich glaub das hat nie wirklich funktioniert. POP jedoch schon...
 
danke schonmal, ich werds so schnell wie möglich ausprobieren!
smtp brauch ich ja aber auch nicht, von daher ist das nicht so schlimm!


[edit]
hab bis jetzt bei www.perl.org bei der dokumentaion von NET::pOP3 nix über attachments gesehen!
mist!

muss ich vielleicht doch ein uploadscript nehmen.
[/edit]
 
Zuletzt bearbeitet:
du bekommst den anhang ja direkt mitgeliefert.

meine empfehlung wäre: die ganze email ungeparst als *.eml oder so speichern und zum Download anbieten ;)

Dann kannste mit nem normalen eMail-Client wie OutlookExpress die File öffnen (wenn es ned schon der IE macht) und die Anhänge rausspeichern...
 
jo, das wär ne möglichkeit, aber das sollen auch noobs blicken!
das soll son klassenpage-ding werden, weil eine aus unserer klasse is jetzt ne weile krank (wirbelsäulenoperation) und die soll eben alle hausaufgaben und arbeitsblätter bekommen, die sollen dann gleich automatisch auf die page, weil ich ja sonst die mords arbeit damit hab. :cool_alt:
und ich hab mir gedacht: nur "computeridioten" in der klasse und als lehrer (wegen den arbeitsblättern), aber mails schicken können sie alle, und das wär halt die einfachste lösung.

was meint ihr, blicken die das, wenn sie das zeug auf der hp mit nem wunderschönen uploadscript hochladen sollen?
 
ich hab mal so nen Script zusammengepfuscht, wo du Files hochladen, umbenennen und löschen kannst.
Vllt hilft dir das weiter.

Den Cookie (der mit IE irgendwie rumspinnt), hab ich abgeschaltet und wenn du löschen oder umbenennen abschalten willst oder so, kansnte ja einfach die ensprechenden Buttons entfernen oder so.

Ich hoff mal, das Hilft dir bei deinem Prob etwas weiter :)

Code:
#!F:/perl/bin/perl
use CGI;
use strict 'refs';
use lib '..';
use CGI qw(:standard);
use CGI::Carp qw/fatalsToBrowser/;
use File::Copy;
#---War mal für n Anmeldeformular
$nick = 'user';
$pass = 'user';
$ip= remote_addr;

  $user{'nick'}=$nick;
  $user{'pass'}=$pass;
  $user{'ip'}=$ip;
#---Einstelungen---
$pfad="./../../temp/"; #lokaler pfad, wohin die datei hochgeladen wird mit / am Ende
$url="http://pcw.homeip.net/temp/"; #url zum verzeichnis, auf das $pfad zeigt mit / am ende
$script='http://pcw.homeip.net/pcw/cgi-bin/filecontrol2.cgi'; #url von sich selbst (wie $_SERVER[PHP_SELF])
$default_name = $ip;

$the_cookie = cookie(-name=>'pcwuser',
		     -value=>\%user,
		     -expires=>"+1h");
#-----------Creating a New query----------------------
#-----------Print HTML-Header-------------------------

print header(-cookie=>$the_cookie);

print '<html xmlns="http://www.w3.org/1999/xhtml" lang="de-DE">
<head>
<title>HTTP-Kontrollzentrum</title>
<link rev="made" href="mailto:pcw@pcw.homeip.net" />
<meta name="keywords" content="Upload" />
<meta name="copyright" content="pcw" />
<style media="screen" type="text/css"><!--
a:link{font-family:Tahoma,Arial;color:#ADF3FB;text-decoration:none}
a:visited{font-family:Tahoma,Arial;color:#ADF3FB;text-decoration:none}
a:hover{font-family:Tahoma,Arial;color:#ADF3FB;text-decoration:none}
a:active{font-family:Tahoma,Arial;color:#ADF3FB;text-decoration:none}
th{font-family:Tahoma,Arial;font-Size:14px;color:#ADF3FB;}
td{font-family:Tahoma,Arial;font-Size:11px;color:#ADF3FB;}
td.h{font-family:Tahoma,Arial;font-Size:14px;color:#ADF3FB;}
table {border-width:1px;
  border-style:solid;
  border-color:#c0dcdc;
  padding:1cm;
  text-align:justify; }
--></style>
</head>
<body bgcolor="#000c34" text="#619AB8">','<font face="Tahoma">';
print small(strong("Version "),$CGI::VERSION);
print "<center>",h2("HTTP-Kontrollzentrum"),
    strong("Dieses Feature arbeitet erst ab Netscape 2.0, IE 4.0 oder neueren Versionen."),
    p;

# Start a multipart form.
	print start_multipart_form(),
	    "<table><tr><th colspan=\"2\">$url</th></tr><tr><td class=\"h\">Dateiname: </td>\n<td>",
	    textfield('savefile',$default_name,30),reset,"</td>\n</tr><tr>\n<td class=\"h\">Datei: </td>\n<td>",
	    filefield('filename','',30),"</td>\n</tr><tr>\n",
# 	    "<td>Name:</td>\n",
# 		"<td><input name=\"nick\" value=\"\" size=\"15\"></td></tr>\n",
# 		"<tr><td>Passwort:</td>\n",
#		"<td><input type=\"password\" name=\"pass\" value=\"\" size=\"15\"></td></tr>\n<tr>\n",
	    "<td colspan=\"2\" align=\"center\">",submit('submit','Hochladen'),"</td>\n</tr>\n</table>\n",
	    endform;
# Process the form if there is a file name entered
	if (my $file = param('filename'))
	{
	    my $tmpfile=tmpFileName($file);
	    $savefile = param('savefile');
	    $savefile=~ s/\//-/gs;
	    $savefile = "$pfad$savefile";
#wenn der dateiname schon existiert, wird nue numerm in klammern angehängt ;)
	    if(-e $savefile)
	    {
 	    	$n=0;
	    	$ind=rindex($savefile,'.');
	    	$savfile=substr($savefile,0,$ind);
	    	$end=substr($savefile,$ind+1,length($savefile)-$ind);
	    	while (-e "$savfile($n).$end")
	    	{
	        	$n++;
	     	}
	     	$savefile="$savfile($n).$end";
	    }
#Jetzt werden bestimmte dateiendungen duch ".script" ersetzt, damit keiner nen cgi oder so hochläd ;)
	    $savefile=~s/(((\.php)|(\.phps)|(\.phtml)|(\.pl)|(\.cgi))+)/\.script/gs;
	    chmod 0777, $savefile;
	    copy($tmpfile,$savefile);
	}
#Löschfunktion
	if (my $del = param('del'))
	{
    	$delfile="$pfad$del";
   		if(-e $delfile)
   		{
   			unlink($delfile);print "Datei ($del) gelöscht!\n";
   		}
   		else
   		{
   			print "Error: Kann $del nicht löschen. Datei existiert nicht!\n";
   		}
	}
#Umbenennen
	if (my $newname = param('newname'))
	{
	#   $newname=~s/(((\.php)|(\.phps)|(\.phtml)|(\.pl)|(\.cgi))+)/\.script/gs;
   		$new="$pfad$newname";
   		$rename=param('rename');
   		$re="$pfad$rename";
   		if(-e $re)
   		{
     		if(rename($re,$new))
     		{
      			print "$rename wurde erfolgreich umbenannt in $newname!\n";
      		}
      		else
      		{
      			print hr,"$!\n";
     		}
   		}
   		else
   		{
     		print "Error: Kann $re nicht umbenennen. Datei existiert nicht!\n";
   		}
	}
    &ShowFiles;

print "</center>\n",end_html;

#Funktion zum anzeigend er vorhandenen Files 
sub ShowFiles
{
 @file=<$pfad*>;
if(@file){
 print "<table><tr><th>Dateien online:</th><th>Bytes</th><th>L&ouml;schen</th><th>Umbenennen</th>\n";
 foreach(@file)
 {
  if(-f $_){
   $size= -s $_;
   $_=~ s/$pfad//gs;
   if($_ ne lc("Thumbs.db"))
   {
     print "</tr><tr><td class=\"h\"><a href=\"$url$_\" target=\"_blank\">$_</a></td><td align=\"right\">$size</td><td><form method=\"post\" action=\"$script\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"del\" value=\"$_\"><input type=\"hidden\" name=\"nick\" value=\"$user{'nick'}\"><input type=\"hidden\" name=\"pass\" value=\"$user{'pass'}\"><input type=\"submit\" name=\"submit\" value=\"Löschen\"></form></td><td><form method=\"post\" action=\"$script\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"rename\" value=\"$_\"><input type=\"hidden\" name=\"nick\" value=\"$user{'nick'}\"><input type=\"hidden\" name=\"pass\" value=\"$user{'pass'}\"><input type=\"text\" size=\"15\" name=\"newname\" value=\"$_\"><input type=\"submit\" name=\"submit\" value=\"Umbenennen\"></form></td>\n";
   }
  }
 }
 print "</tr></table>\n";}
 print hr;

}
 
dankeschön erstmal an alle!
ich denke ich wähle die methode mit dem uploadscript!

ein bisschen offtopic, ich weiß, aber nicht gleich nerven bitte:
hab da in der letzten ct eine werbung gesehen:
www.alturo.de
is das was, oder soll ich das lassen, weil ich mein, das webmaster shared hosting angebot macht mich schon an, so rein von den funktionen her!
aber für 4€... is das seriös? :rolleyes:
 
ich hab sowas ähnliches aber mit unbegrenzten emails und unlimitiertem traffic für 7€ ;)
 
Zurück
Oben