Mail aus einer Software heraus versenden

Manchmal möchte aus einer Desktopanwendung heraus eine Mail verschicken. Das ist insofern problematisch, da man die Zugangsdaten für einen Mailaccount nicht in einer Anwendung hinterlegen sollte. Aus Webanwendungen heraus ist das Senden von Mails dagegen eine einfache Sache. Also was liegt näher als diesen Vorteil für das Senden von Mails aus Desktopanwendungen heraus zu nutzen.

<?php
    $reciever=$_POST["reciever"];
    $allowedRecieverDomain="example.org";
    $subject=$_POST["subject"];
    $text=$_POST["message"];

    //Sender
    $senderName="Mailer";
    $sender="";

    //Additional challenge
    $challenge="abc123";
    if($challenge!=$_POST["challenge"]) return;

    //Check reciever
    $atCount=substr_count($reciever, "@");
    if($atCount>1) return;

    if(!(strpos($reciever, "@" . $allowedRecieverDomain)===FALSE))
    {
        mail($reciever, $subject . " - (" . date("d.m.y - H:m:s") . ")", $text, "From: $senderName <$sender>");
    }
?>

Ein kleines PHP Skript mit dem Namen „mailer.php“ sorgt dafür das die Mail bzw. der Text der Mail in Empfang genommen wird. Anschließend wird nachgeschaut ob die Mail an einen validen Sender adressiert ist. In diesem Beispiel werden nur Mails an @example.org weitergeleitet. Schließlich möchte man keine Spamschleuder betreiben. Nun müssen die Parameter in der Anwendung noch per POST-Request übergeben werden. Unter C# könnte das ganze so aussehen:

System.Net.ServicePointManager.Expect100Continue=false;

string url="http://example.org/mailer.php";

using(var wb=new WebClient())
{
    var data=new NameValueCollection();
    data["sendername"]="Mailer";
    data["sender"]="";
    data["reciever"]="";
    data["subject"]="Mail from Application";
    data["message"]="Message";

    var response=wb.UploadValues(url, "POST", data);
}

Der Quellcode ist dabei auf GitHub zu finden und steht unter der AGPL.

Verzeichnis von einem Git Repository in ein anderes verschieben

Unter Git möchte man manchmal ein Verzeichnis von einem Repository zu einem anderen verschieben. Natürlich soll dabei die Revisionsgeschichte nicht verloren gehen. In diesem Fall hilft folgendes Bashskript:

#!/bin/sh
# moves a folder from one git repository to another
# moveFolder <absolute repository one path> <repository one folder> <absolute repository two path>

# prepare repository one
cd $1
git clean -f -d -x
git checkout -b tmpBranch
git filter-branch --subdirectory-filter $2 HEAD
mkdir $2
mv * $2
git add .
git commit -a -m "Move files into folder"

#import in repository two
cd $3
git remote add repositoryOne $1
git pull repositoryOne tmpBranch
git remote rm repositoryOne

#cleanup
cd $1
git checkout master
git branch -D tmpBranch

#remove folder with history from repository one
cd $1
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch $2" HEAD

Genutzt wird das Skript dabei wie folgt:

./moveFolder /absolute/path/to/repo/one folderFromRepoOne /absolute/path/to/repo/two

Nachdem das Verzeichnis in das neue Repository mitsamt der Revisionsgeschichte übertragen wurde, wird es aus dem alten Repository entfernt. Das Skript funktioniert dabei unter Windows, Linux und Mac OS X. Die jeweils aktuellste Version ist auf GitHub zu finden.

OTR unter iOS

Wie ich im letzten Artikel beschrieben hatte, funktioniert PGP unter iOS nur mit Komforteinbußen. Bei Messengern mit Off-the-Record Messaging sieht es unter iOS leider ähnlich aus. Die einzige App die solche Funktion bietet ist ChatSecure:

ChatSecure Messenger
Preis: Kostenlos+

Neben XMPP werden auch der Facebook Chat, Google Talk und OSCAR unterstützt. Problematisch an der App ist, das sie sich nach 10-Minuten Inaktivität wieder ausloggt, was andere Messenger-Apps besser gelöst haben. ChatSecure ist dabei freie Software (GPLv3), dessen Quelltext auf GitHub eingesehen werden kann. Die offizielle Seite der App ist unter https://chatsecure.org/ zu finden.

OUYA Systemupdate „Ogopogo“ erschienen

Vor ein paar Tagen erschien das erste Systemupdate für die OUYA welches einen Codenamen trägt. Die größte Neuerung im „Ogopogo“ genannten Update dürfte dabei die „External Storage“ Funktion sein. Gemeint ist damit die Möglichkeit, Spiele für die OUYA auch auf einem angeschlossenen USB-Stick oder einer externen Festplatte zu speichern. Die Funktionalität ist allerdings noch nicht für alle Nutzer verfügbar, sondern wird im Rahmen einer Closed Beta getestet. Nach einer erfolgreichen Anmeldung, kann man das ganze allerdings ausprobieren.

Die OUYA im Karton

Die OUYA im Karton

In der Detailansicht der Spiele, können nun auch bereitgestellte Videos abgespielt werden. Der Bildschirm zum Login enthält seit dem Update eine Möglichkeit das Passwort zurückzusetzen, für den Fall das man dieses vergessen hat. Die Beschriftung des Download-Button wurde von „Download“ auf „Free Download“ geändert, um dem Nutzer klarer zu zeigen, das bei diesem keine Kosten entstehen. Neben diesem größeren Features wurde eine Menge Fehler behoben, unter anderem ein Fehler durch welchen die OUYA vom HDMI Signal des angeschlossenen Fernsehers geweckt wurde. Neben der Verbesserung der Suchfunktion gab es auch einige Verbesserungen für Entwickler. Der komplette Changelog kann auf der offiziellen OUYA Seite eingesehen werden.

Server gegen unbefugten Login sichern

Betreibt man einen Server, so wird man mit der Zeit feststellen, das man nicht der einzige ist, der gerne Zugriff auf den Server hätte. Um zu häufige Loginversuche abzublocken gibt es Fail2ban. Dieses Programmpaket durchsucht die entsprechenden Logs und blockiert böswillige Versuche in das System einzubrechen. Damit gehört Fail2ban zu den Intrusion Prevention Systemen. Die Installation auf einem Ubuntu-Server geht dabei leicht von der Hand:

apt-get install fail2ban

Anschließend kann mit der Konfiguration begonnen werden:

nano /etc/fail2ban/jail.conf

In den ersten Einstellungen unter „[DEFAULT]“ findet man die Zeit (in Sekunden) welche angibt wie lange ein Angreifer geblockt werden soll. Standardmäßig sind dies 10 Minuten respektive 600 Sekunden. Im Bereich „[JAILS]“ kann Fail2ban nun für bestimmte Dienste aktiviert werden, indem der Wert bei „enabled“ auf „true“ gesetzt wird. Selbstverständlich ist es auch möglich eigene Jails zu definieren. Alle vorgefertigten Filterregeln findet man unter „/etc/fail2ban/filter.d“. Die Überwachung des SSH Dienstes ist dabei standardmäßig aktiviert. Nach der Anpassung der Konfiguration, sollte der Dienst mittels

service fail2ban restart

neugestartet werden. Das Log in welchem alle Fail2ban Aktionen verzeichnet sind, ist unter „/var/log/fail2ban.log“ zu finden.

Weitere Informationen gibt es unter:
http://cup.wpcoder.de/fail2ban-ip-firewall/