Mail-Attachments via Perl über POP3 abrufen und in einem Ordner ablegen

Etwas speziell, kann aber vielleicht der eine oder andere brauchen: Von einem POP3-Server sollen alle Attachments extrahiert werden und danach die Mails gelöscht werden. Die Anforderung ist hier speziell für die Veröffentlichung von Content per E-Mail. Es werden per Cron einmal täglich die Anhänge ausgelesen und veröffentlicht.

Ich habe das ganze mit Perl und den beiden Modulen Mail::POP3Client und Mail::MboxParser umgesetzt. Diese müssen vorher per CPAN installiert werden.
Das geht ganz einfach so:

cpan install Mail::POP3Client
cpan install Mail::MboxParser
cpan install Date::Format

Falls ihr cpan das erste mal startet, will es noch konfiguriert werden. Die meisten Einstellungen können einfach per Return mit dem Standardwert bestätigt werden.

Das Script ist extrem simpel, ohne Fehlerhandling und kann leicht angepasst werden:

#!/usr/bin/perl -w

#Muss vorher per CPAN installiert werden
use Mail::POP3Client;
use Mail::MboxParser::Mail;
use Date::Format;

#USESSL wird z.B. bei GMail gebraucht
my $pop = new Mail::POP3Client (USER => ‚user‘,
PASSWORD => ‚pass‘,
HOST => ‚pop.gmail.com‘,
DEBUG => 1,
USESSL => 1);

print $pop->Message();

for my $i (1 .. $pop->Count) {
my $datetime = time2str(‚%Y%m%d%H%M%S‘, time);
my $msg = Mail::MboxParser::Mail->new( [ $pop->Head($i) ],
[ $pop->Body($i) ] );
#Wo sollen die Attachments hin?
$msg->store_all_attachments( path => ‚/tmp/test‘, prefix => $datetime );

#Auskommentieren, falls die Mails vom Server gelöscht werden sollen
#$pop->Delete($i);

print $pop->Message();
}

$pop->Close();

Update am 20.02.2009: Timestamp-Prefix für die Dateinamen hinzugefügt. Achtung: Jetzt wird das Paket Date::Format gebraucht!

Auf der Suche nach dem perfekten PHP Application Framework

Ich habe mich in letzter Zeit etwas nach Frameworks für die Applikationsentwicklung in PHP umgesehen. Hintergrund ist die anstehende Entwicklung einer etwas grösseren Anwendung. Das Framework sollte den MVC-Pattern umsetzen, eventuell Hilfestellungen bei Routine-Tasks geben, aktuell sein (weiterentwickelt werden) und vor allem sollte die verfügbare Dokumentation umfangreich sein.

Nach kurzer Zeit musste ich feststellen, dass die Auswahl sehr gross und unübersichtlich ist. Bisher habe ich mich nicht entschieden. Vielleicht hat der eine odere andere Leser Erfahrungen mit einem dieser Frameworks und möchte sie mit mir teilen? Ausserdem mag ich mit diesem Überblick die Leute unterstützen, die vor einer Ähnlichen Entscheidung stehen.

Es handelt sich hierbei wirklich nur um einen Überblick und keine Bewertung. Es werden die mir bekannten Frameworks mit der Beschreibung von ihrer Webseite verlinkt.

(mehr …)

Web Developer command line tricks

“ Below is a list of command line tricks I’ve found to be very useful in web development that a surprising number of web developers don’t know about.

1. ln -s /some/destination name_of_link

This is pretty straightforward: it’ll create a symbolic link from name_of_link to /some/destination. If I’m sitting in /www/matthew/ and I entered the above command, a new file will be created inside that directory that moves the user to /some/destination if they CD to name_of_link. (It’s a shortcut, basically).

If I’m working on a web server where the docroot is buried deep in a directory structure, I’ll often create a symbolic link in something like /www to save myself a few keystrokes when accessing it.

Also, apache won’t follow symbolic links unless you tell it to do so using the following directive: Options +FollowSymLinks
2. tail -f /some/file

This tails a file: it’ll read what’s at the end and output it to your terminal. The -f parameter tells it to keep outputting as the file grows. I use this a lot when examining log files that are constantly being written to.
3. ctrl+z and bg

ctrl+z is the long lost brother of ctrl+c. It’s a signal that tells the process to suspend execution, while ctrl+c terminates it. Ctrl+z is useful if you execute a process but you want to get control of your shell; it’ll suspend the process and send it to the background. Think of ctrl+z like minimizing a window, except once it’s minimized it’s not doing anything anymore. If you want the process to stay in the background but continue running, that’s where bg (background) comes in: typing bg once a process has been suspended makes the process resume but still keeps it in the background.

I often combine ctrl+z and bg with tail:

shell> perl -e ‚while() { print „.“; sleep(1); }‘ > bunch_of_dots.log

[hit ctrl+z, execution is suspended]

shell> bg [process is now in the background and running]
shell>tail -f bunch_of_dots.log [show me the printed dots]

4. fg and jobs

fg is used if you background a process but want to bring it to the foreground. If you have multiple processes in the background, type ‚jobs‘ into your terminal to see them all. This will display a list of processes that are in the background with each process assigned a number (Note: these are not the same as pids). Typing fg [some number] will resume the process you sent to the background where [some number] matches the number reported by ‚jobs.‘

A good example of using fg is if you’re working with an interactive program, such as the mysql command line, but you want to drop back to the shell.

mysql>SELECT foo FROM bar;

mysql> [hit ctrl+z]

[1]+ Stopped

shell>pwd /home/matt/stuff

shell>jobs

[1]+ Stopped mysql -u matt -p matts_db

shell>fg 1

mysql>[hooray, we’re back in the mysql command line]

You can omit the job number when running ‚fg,‘ it’ll just foreground the first process you sent to the background. So if you only have one process in the background you can just type ‚fg‘ without any extra numbers.

5. Hit the freakin tab key!

Assuming your shell is configured properly, hitting tab will auto-complete with whatever it thinks you need. I’ve encountered a surprising number of developers who don’t know about this and move around servers at glacial speeds. If you aren’t familiar with the tab auto-complete, get to a terminal right now and type cd [tap the tab key], you should see a list of available files or commands.

6. scp

This securely copies a file across a network using SSH for data transfer. For example:

scp [email protected]:~/secret_stuff /some/destination

This would connect via SSH to example.com as the user ‚matt‘ and copy the file ’secure_stuff‘ from my home directory on example.com to /some/destination on the machine I’m currently on. It’s saved me a ton of time when transferring sensitive files from one machine to another.
…“

Web Developer command line tricks

Lightbox2

„Overview
Lightbox JS is a simple, unobtrusive script used to overlay images on the current page. It’s a snap to setup and works on all modern browsers.
What’s New in Version 2.0
Image Sets: group related images and navigate through them with ease
Visual Effects: fancy pants transitions
Backwards Compatibility: yes! „

Lightbox2

Lightbox2

Configuring Apache for maximum Performance

„Apache is an open-source HTTP server implementation. It is the most popular web server on the Internet. The December 2005 Web Server Survey conducted by Netcraft [1] shows that about 70% of the web sites on Internet are using Apache.
1. Apache server performance
Apache server performance can be improved by adding additional hardware resources such as RAM, faster CPU etc. But, most of the time, the same result can be achieved by custom configuration of the server. This article looks into getting maximum performance out of Apache with the existing hardware resources, specifically on the Linux systems. Of course, it is assumed that there is enough hardware resources, especially enough RAM that the server isn’t swapping frequently. First two sections look into various Compile-Time and Run-Time configuration options. Run-Time section assumes that Apache is compiled with prefork MPM. HTTP compression and caching is discussed next. Finally, using separate servers for serving static and dynamic contents are being discussed. Basic knowledge of compiling and configuring Apache, and Linux are assumed. „

Configuring Apache for maximum Performance

Configuring Apache for maximum Performance

AJAX PHP File Upload Progress Bar

„One of the few things that I find lacking in PHP is the ability to report the progress of a file upload. This means that file uploads, especially uploads of larger files, can be extremely frustrating for end users when they don’t know if the upload is progressing or if it has stalled or if it has even started. There are two ways around this. One is to patch PHP, Pdoru provides such a patch. Not everyone can patch PHP though. You can’t use a patch if you’re on a shared server, if you want to use ready-made binaries, if you don’t want to risk stability by using a patch or if you just don’t want to have to remember to apply the patch again every time you upgrade PHP. The other option is to use a perl script to receive the file when it’s uploaded. This is the approach used by MegaUpload. MegaUpload is what I have based my solution on, but I have added asynchronous file upload support and an AJAX upload progress bar, instead of the refreshing popup used by MegaUpload.“

AJAX PHP File Upload Progress Bar

AJAX PHP File Upload Progress Bar

Sicherheit von Web Applikationen

„Web Application Security

Web Security ist ein wichtiges Thema, nicht nur wenn sensible Daten übermittelt werden. Häufig können, durch Nachlässigkeit bei Planung und Umsetzung einer Webanwendung, Angriffe erfolgreich durchgeführt werden. Vor allem die Unkenntnis der unterschiedlichen Angriffsmethoden und deren Wirkungsweise, sowie ein fehlendes oder minimales Sicherheitsbewusstsein lassen Angreifer Erfolg haben.
Sogar bekannte Open Source-Projekte wie PHP-Nuke weisen eine erhebliche Anzahl und Arten von Vulnerabilities (Schwachstellen/Sicherheitslücken) auf. Der Vorteil jedoch ist, dass man daraus lernen kann, um ähnliche Fehler zukünftig zu vermeiden und gegebenenfalls solche in seinen Anwendungen zu fixen. Das bedarf unter anderem einer genauen Analyse des Quellcodes und Hintergrundwissen.“

Web Security ist ein wichtiges Thema, nicht nur wenn sensible Daten

Sicherheit von Web Applikationen

Sicherheit von Web Applikationen