<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>treibsand.com &#187; Mail</title>
	<atom:link href="http://www.treibsand.com/tag/mail/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.treibsand.com</link>
	<description></description>
	<lastBuildDate>Tue, 27 Dec 2011 12:46:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Das leidige Thema E-Mail Archivierung</title>
		<link>http://www.treibsand.com/2009/01/21/email-archivierung/</link>
		<comments>http://www.treibsand.com/2009/01/21/email-archivierung/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 14:59:02 +0000</pubDate>
		<dc:creator>Toast</dc:creator>
				<category><![CDATA[Mail]]></category>
		<category><![CDATA[Abgabeordnung]]></category>
		<category><![CDATA[Archivierung]]></category>
		<category><![CDATA[GDPdU]]></category>
		<category><![CDATA[GoBS]]></category>
		<category><![CDATA[Handelsgesetzbuch]]></category>

		<guid isPermaLink="false">http://www.treibsand.com/2009/01/21/das-leidige-thema-e-mail-archivierung/</guid>
		<description><![CDATA[Seit dem 1. Januar 2002 gelten die Grundsätze zum Datenzugriff und zur Prüfbarkeit digitaler Unterlagen. Jedes Unternehmen ist verpflichtet, sämtliche steuerrelevanten Daten maschinell auswertbar zur Verfügung stellen zu können. Allerdings kümmern sich darum nur die wenigsten Unternehmen. Ein Grund hierfür mag der Dschungel an Richtlinien und Gesetze sein, welche eingehalten werden müssen. Firmen wandeln aber [...]]]></description>
			<content:encoded><![CDATA[<p>Seit dem 1. Januar 2002 gelten die Grundsätze zum Datenzugriff und zur Prüfbarkeit digitaler Unterlagen.<br />
Jedes Unternehmen ist verpflichtet, sämtliche steuerrelevanten Daten maschinell auswertbar zur Verfügung<br />
stellen zu können. Allerdings kümmern sich darum nur die wenigsten Unternehmen.</p>
<p><span id="more-210"></span><br />
Ein Grund hierfür mag der Dschungel an Richtlinien und Gesetze sein, welche eingehalten werden müssen.<br />
Firmen wandeln aber hier auf dünnem Eis, sofern das Unternehmen nicht alle relevanten Dokumente liefert,<br />
kann das Finanzamt die Unternehmenswerte einer Zwangsschätzung unterziehen, welche meist höher ausfällt.</p>
<p>Ein weitere Grund für mangelnde Archivierung kann der hohe Aufwand sein, ein entsprechendes System bereit<br />
zustellen. Das System muss </p>
<p>* alle E-Mails für 6-10 Jahre aufbewahren (§257 IV HGB, §147 III AO)</p>
<p>* sicherstellen, dass die Daten nicht modifiziert werden können</p>
<p>* sicherstellen, dass die Daten maschinell auswertbar sind</p>
<p>* sicherstellen, dass alle eingehende und ausgehende E-Mails enthalten sind</p>
<p>Folgende Paragrafen sind für die E-Mail Archivierung wichtig&#8230;</p>
<p><strong>Handelsgesetzbuch (HGB)</strong></p>
<p>* §238 HGB: behandelt die Verpflichtung zur Buchführung.</p>
<p>* §257 Abs.1 HGB: behandelt die steuerrelevante Daten (wichtig, weil zu ihnen E-Mails zählen können).</p>
<p><strong>Abgabenordnung (AO)</strong></p>
<p>* §140 AO: behandelt die Buchführungspflicht nach anderen Gesetzen, die für die Besteuerung maßgeblich sind.</p>
<p>* §141 AO: behandelt ergänzende Buchführungspflichten für Gewerbebetriebe und Land- und Forstwirtschaft.</p>
<p>* §147 AO: behandelt alle nach HGB aufzubewahrenden Unterlagen sowie alle sonstigen Unterlagen, die für die Besteuerung von Bedeutung sind (hier insbesondere E-Mails).</p>
<p>* §147 I Nr. 5 AO: ist für die E-Mail-Archivierung von besonderer Bedeutung, weil es hier um Unterlagen geht, die für eine Sachverhaltsklärung hinsichtlich der Besteuerung wichtig sind.</p>
<p>Die Frage, welches ein steuerlich relevantes Dokument ist oder nicht, entscheidet im Zweifel das<br />
Finanzamt, und es ist möglich, dass alle E-Mails als steuerlich relevante Dokumente klassifiziert werden<br />
können. In der Konsequenz bedeutet dies für das Unternehmen die Verpflichtung, alle eingehenden und<br />
ausgehenden E-Mails automatisch zu speichern. Auch private, von Mitarbeitern versendete oder<br />
empfangene E-Mails würden dann in einem Archivierungssystem abgelegt und einem Betriebsprüfer<br />
zugänglich sein. Eingriffe seitens der Mitarbeiter, z.B. Löschungen oder Veränderungen, in dieses<br />
System müssten konsequenterweise unterbunden werden. </p>
<p>Eine automatische Abspeicherung und der Zugang zu privaten E-Mails von Mitarbeitern könnte das<br />
Postgeheimnis, welches als Grundrecht im Artikel 10 des Grundgesetzes verankert wurde, verletzen. E-<br />
Mails gehören per Definition zu der Kategorie „Brief“ und unterliegen diesem Grundrecht. Daher kann<br />
eine automatisierte E-Mail-Sicherungsmaßnahme in einem Unternehmen nur durch eine vertragliche<br />
Vereinbarung mit den Mitarbeitern oder mit der Zustimmung eines vertretungsberechtigten Betriebsrates<br />
erlaubt werden. Eine andere Möglichkeit ist die Durchsetzung eines allgemeinen Verbots privater E-<br />
Mail-Kommunikation von Seiten der Geschäftsleitung.</p>
<p><strong>Wichtige Merksätze für die Archivierung von E-Mails</strong></p>
<p>* Geschäftliche E-Mails sind Handelsbriefe </p>
<p>* Orignär digital erzeugt Dokumente sind digital zu archivieren (GoBS), wobei die Technologie der<br />
Archivierung bewusst nicht festgeschrieben wird. </p>
<p>* Hilfsmittel zur Lesbarmachung oder Reproduktion der Daten müssen auf eigene Kosten zu<br />
Verfügung gestellt werden. Dem Prüfer muss der geeignete Zugang zu den Daten zur Verfügung<br />
gestellt werden &#8211; verschärft in den GdPDU </p>
<p>* Eine Verfahrensdokumentation muss vorliegen. In ihr findet sich beispielsweise eine<br />
Dokumentation der Organisation und der Abläufe, eine Definition der Verantwortlichkeiten,<br />
Nachvollziehbarkeit durch Aufzeichnungen und Protokolle, Absicherung der Vorgänge bezüglich<br />
der Vertraulichkeit, Verfügbarkeit, Integrität und Authentizität. </p>
<p>* Auf keinen Fall dürfen die private und die geschäftliche E-Mail Nutzung vermischt werden.<br />
Betriebsvereinbarungen müssen existieren, so dass Dritte auf keinen Fall Rechte an den<br />
archivierten Daten erlangen können.</p>
<p>Nur der Betrieb eines revisionssicheren Archivierungssystems garantiert keinesfalls die so genannten<br />
revisionssichere Archivierung. Die gesamte Prozesskette von der Erstellung oder dem Erhalt eines<br />
Dokumentes bis hin zur Archivierung auf einem geeignetem System muss berücksichtig werden. Hierfür<br />
muss eine Verfahrensdokumentation erstellt werden, und der Betrieb muss nachweisen können, dass er<br />
in der Lage ist, diese umzusetzen. </p>
<p><strong>GDPdU</strong></p>
<p>Nach § 147 Abs. 6 AO ist der Finanzbehörde das Recht eingeräumt, die mit Hilfe eines<br />
Datenverarbeitungssystems erstellte Buchführung des Steuerpflichtigen durch Datenzugriff zu prüfen.<br />
Diese neue Prüfungsmethode tritt neben die Möglichkeit der herkömmlichen Prüfung. Das Recht auf<br />
Datenzugriff steht der Finanzbehörde nur im Rahmen steuerlicher Außenprüfungen zu. </p>
<p>Das Recht auf Datenzugriff beschränkt sich ausschließlich auf Daten, die für die Besteuerung von<br />
Bedeutung sind. Hierzu können auch E-Mails zählen, da in zunehmenden Maße der Geschäftsverkehr<br />
papierlos abgewickelt wird. Bei der Ausübung des Rechts auf Datenzugriff stehen der Finanzbehörde<br />
nach dem Gesetz drei Möglichkeiten zur Verfügung. Die Entscheidung, von welcher Möglichkeit des<br />
Datenzugriffs die Finanzbehörde Gebrauch macht, steht in ihrem pflichtgemäßen Ermessen; falls<br />
erforderlich, kann sie auch mehrere Möglichkeiten in Anspruch nehmen: </p>
<p>* Sie hat das Recht, selbst unmittelbar auf das Datenverarbeitungssystem dergestalt zuzugreifen,<br />
dass sie in Form des Nur-Lesezugriffs Einsicht in die gespeicherten Daten nimmt und die vom<br />
Steuerpflichtigen oder von einem beauftragten Dritten eingesetzte Hard- und Software zur<br />
Prüfung der gespeicherten Daten einschließlich der Stammdaten und Verknüpfungen (Daten)<br />
nutzt (unmittelbarer Datenzugriff). Dabei darf sie nur mit Hilfe dieser Hard- und Software auf die<br />
elektronisch gespeicherten Daten zugreifen. Dies schließt eine Fernabfrage (Online-Zugriff) auf<br />
das Datenverarbeitungssystem des Steuerpflichtigen durch die Finanzbehörde aus. Der Nur-<br />
Lesezugriff umfasst das Lesen, Filtern und Sortieren der Daten gegebenenfalls unter Nutzung<br />
der im Datenverarbeitungssystem vorhandenen Auswertungsmöglichkeiten. </p>
<p>* Sie kann vom Steuerpflichtigen auch verlangen, dass er an ihrer Stelle die Daten nach ihren<br />
Vorgaben maschinell auswertet oder von einem beauftragten Dritten maschinell auswerten lässt,<br />
um den Nur-Lesezugriff durchführen zu können (mittelbarer Datenzugriff). Es kann nur eine<br />
maschinelle Auswertung unter Verwendung der im Datenverarbeitungssystem des<br />
Steuerpflichtigen oder des beauftragten Dritten vorhandenen Auswertungsmöglichkeiten verlangt<br />
werden. </p>
<p>* Sie kann ferner verlangen, dass ihr die gespeicherten Unterlagen auf einem maschinell<br />
verwertbaren Datenträger zur Auswertung überlassen werden (Datenträgerüberlassung). Der zur<br />
Auswertung überlassene Datenträger ist spätestens nach Bestandskraft der aufgrund der<br />
Außenprüfung ergangenen Bescheide an den Steuerpflichtigen zurückzugeben oder zu löschen. </p>
<p>Der Steuerpflichtige hat die Finanzbehörde bei Ausübung ihres Rechts auf Datenzugriff zu unterstützen<br />
(§ 200 Abs. 1 AO). </p>
<p><strong>GoBS</strong></p>
<p>Im Schreiben des Bundesministeriums der Finanzen an die obersten Finanzbehörden der Länder (vom<br />
7. November 1995  &#8211; IV A 8 &#8211; S 0316 &#8211; 52/95- BStBl 1995 I S. 738), ist eindeutig beschrieben, welche<br />
Grundsätze erfüllt werden müssen, wenn steuerrelevante Daten in einem DV-System gespeichert<br />
werden. </p>
<p>Das verwendete DV-System muss sicherstellen können, dass die Risiken für die gesicherten<br />
Datenbestände hinsichtlich der Unauffindbarkeit, Vernichtung und Diebstahl vermieden werden (Tz. 5 der GoBS).</p>
<p>Laut Tz. 8 der GoBS ist der Buchführungspflichtige, der aufzubewahrende Unterlagen nur in Form einer<br />
Wiedergabe auf einem Datenträger vorlegen kann, dazu verpflichtet diejenigen Hilfsmittel zur Verfügung<br />
zu stellen, die erforderlich sind, um die Unterlagen lesbar zu machen. §147 Abs. 2 AO schreibt zur<br />
Archivierung von Unterlagen (Dokumenten) auf digitalen Datenträgern keine besondere Technik vor.<br />
Diese Regelung ist bewusst so gefasst worden, dass sie keine bestimmte Technologie vorschreibt. </p>
<p>Bei originär digitalen Dokument muss hard- und softwaremäßig sichergestellt sein, dass während des<br />
Übertragungsvorgangs auf das Speichermedium eine Bearbeitung nicht möglich ist. Das digitale<br />
Dokument ist mit einem unveränderbaren Index zu versehen. </p>
<p><strong>Daraus lässt sich zusammenfassen</strong></p>
<p>* Damit das Postgeheimnis gewahrt bleibt, muss eine vertragliche Vereinbarung mit allen<br />
Mitarbeiter, die Zustimmung eines vertretungsberechtigten Betriebsrates oder ein allgemeines<br />
Verbot von privaten E-Mails seitens der Geschäftsführung vorliegen. </p>
<p>* Jede E-Mail muss archiviert werden</p>
<p>* Hilfsmittel zur Lesbarmachung bzw. Reproduktion müssen vorhanden sein</p>
<p>* Verfahrensdokumentation muss vorhanden sein</p>
<p>* Datensicherheit muss im Archivsystem gewährleistet sein. </p>
<p>* Eine Bearbeitung von digitalen Dokumenten darf während und nach der Übertragung in das<br />
Archiv nicht möglich sein. </p>
<p>* Alle Daten müssen jederzeit reproduzierbar sein.</p>
<p>* Alle Daten müssen bis zu 10 Jahre vorgehalten werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.treibsand.com/2009/01/21/email-archivierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mit GMime E-Mails parsen</title>
		<link>http://www.treibsand.com/2009/01/19/mit-gmime-e-mails-parsen/</link>
		<comments>http://www.treibsand.com/2009/01/19/mit-gmime-e-mails-parsen/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 15:40:38 +0000</pubDate>
		<dc:creator>Toast</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[GMime]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.treibsand.com/2009/01/19/mit-gmime-e-mails-parsen/</guid>
		<description><![CDATA[Habt ihr schon mal versucht mit C E-Mails zu parsen? Das kann ziemlich ekelhaft werden. Abhilfe schafft die GMime Library. GMime baut auf GLib auf und bietet eine Vielzahl an Funktionen um E-Mails zu parsen bzw. einzelne Teile zu extrahieren. Will man z.B. den Body einer E-Mails auslesen, und feststellen, ob es sich hierbei um [...]]]></description>
			<content:encoded><![CDATA[<p>Habt ihr schon mal versucht mit C E-Mails zu parsen? Das kann ziemlich ekelhaft werden.<br />
Abhilfe schafft die <a href="http://spruce.sourceforge.net/gmime/">GMime</a> Library.</p>
<p><span id="more-186"></span><br />
GMime baut auf GLib auf und bietet eine Vielzahl an Funktionen um E-Mails<br />
zu parsen bzw. einzelne Teile zu extrahieren. Will man z.B. den Body einer E-Mails auslesen, und feststellen, ob es sich hierbei um HTML Code handelt, dann könnte man es wie folgt machen:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;fcntl.h&gt;</span>
<span style="color: #339933;">#include &lt;glib.h&gt;</span>
<span style="color: #339933;">#include &lt;gmime/gmime.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #993333;">const</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	gboolean is_html<span style="color: #339933;">;</span>
	GMimeMessage <span style="color: #339933;">*</span>message<span style="color: #339933;">;</span>
	GMimeParser <span style="color: #339933;">*</span>parser<span style="color: #339933;">;</span>
	GMimeStream <span style="color: #339933;">*</span>stream<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> <span style="color: #339933;">*</span>body<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> fd<span style="color: #339933;">,</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>argc <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
	g_mime_init <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fd <span style="color: #339933;">=</span> open <span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> O_RDONLY<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
	stream <span style="color: #339933;">=</span> g_mime_stream_fs_new <span style="color: #009900;">&#40;</span>fd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	parser <span style="color: #339933;">=</span> g_mime_parser_new_with_stream <span style="color: #009900;">&#40;</span>stream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	g_object_unref <span style="color: #009900;">&#40;</span>stream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	message <span style="color: #339933;">=</span> g_mime_parser_construct_message <span style="color: #009900;">&#40;</span>parser<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	body <span style="color: #339933;">=</span> g_mime_message_get_body <span style="color: #009900;">&#40;</span>message<span style="color: #339933;">,</span> FALSE<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>is_html<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fprintf <span style="color: #009900;">&#40;</span>stdout<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Testing get_body (looking for html...%s)<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>%s<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>
		body <span style="color: #339933;">&amp;&amp;</span> is_html <span style="color: #339933;">?</span> <span style="color: #ff0000;">&quot;found&quot;</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;not found&quot;</span><span style="color: #339933;">,</span>
		body <span style="color: #339933;">?</span> body <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;No message body found&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	g_free <span style="color: #009900;">&#40;</span>body<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Kompiliert wird das Programm mit</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #660033;">-g</span> <span style="color: #660033;">-Wall</span> <span style="color: #000000; font-weight: bold;">`</span>pkg-config <span style="color: #660033;">--cflags</span> gmime-<span style="color: #000000;">2.0</span> glib-<span style="color: #000000;">2.0</span><span style="color: #000000; font-weight: bold;">`</span> <span style="color: #000000; font-weight: bold;">`</span>pkg-config <span style="color: #660033;">--libs</span> gmime-<span style="color: #000000;">2.0</span>  glib-<span style="color: #000000;">2.0</span><span style="color: #000000; font-weight: bold;">`</span> test.c <span style="color: #660033;">-o</span> <span style="color: #7a0874; font-weight: bold;">test</span></pre></div></div>

<p>Als erstes Argument muss der Pfad zur E-Mail angegeben werden.</p>
<p>Bei der Verwendung von GMime bin ich aber leider auch über einen Bug gestolpert. Will man die Absender<br />
Adresse einer E-Mail auslesen, und diese ist z.B. angegeben mit <em>J. Doe <doe@example.com></em>,<br />
dann vermurkst GMime die Adresse und liefert <em>J.Doe</em>. Das ist nur der Fall, wenn<br />
die Adresse nicht in Anführungszeichen ist und einen Punkt enthält. Das Problem macht die<br />
Funktion <em>internet_address_parse_string()</em>. Noch habe ich nicht die aktuelle Version<br />
von GMime ausprobiert, ob es da auch noch auftritt.</p>
<p>Aber grundsätzlich kann man sagen, dass GMime eine hervorragende Library ist, um in C E-Mails<br />
zu parsen. GMime wird z.B. auch von <a href="http://www.dbmail.org">DBMail</a> verwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.treibsand.com/2009/01/19/mit-gmime-e-mails-parsen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weniger Spam mit Ironport</title>
		<link>http://www.treibsand.com/2007/03/15/spam_ironport/</link>
		<comments>http://www.treibsand.com/2007/03/15/spam_ironport/#comments</comments>
		<pubDate>Thu, 15 Mar 2007 13:22:06 +0000</pubDate>
		<dc:creator>Toast</dc:creator>
				<category><![CDATA[Spam]]></category>
		<category><![CDATA[Ironport]]></category>
		<category><![CDATA[Mail]]></category>

		<guid isPermaLink="false">http://test.treibsand.com/?p=48</guid>
		<description><![CDATA[Spam nervt, und Spamfilter wie Spamassassin zu pflegen bzw. zu aktualisieren ist aufwändig, besonders wenn man dies für mehrere hundert Mailserver machen muss. Da ist eine bzw. mehrere Appliances für den Zweck doch recht angenehm..;-) Der Hersteller Ironport biete solche Anti-Spam Appliances an. Es handelt sich hierbei um einen gewöhnlichen Server mit einem eigenem Betriebssystem [...]]]></description>
			<content:encoded><![CDATA[<p>Spam nervt, und Spamfilter wie Spamassassin zu pflegen bzw. zu aktualisieren ist aufwändig, besonders wenn man dies für mehrere hundert Mailserver machen muss. Da ist eine bzw. mehrere Appliances für den Zweck doch recht angenehm..;-) </p>
<p><span id="more-48"></span><br />
Der Hersteller Ironport biete solche Anti-Spam Appliances an. Es handelt sich hierbei um einen gewöhnlichen Server mit einem eigenem Betriebssystem (AsyncOS, welches auf Unix basiert). Die Appliance wird vor den normalen Mailserver geschalten, und ist MX für die Domains.</p>
<p>Neben Spam und Virenfilter bietet die Appliance noch ein wirkliches &#8220;Killerfeature&#8221;, nämlich Senderbase. Bei Senderbase handelt es sich um eine globale Datenbank von E-Mail &#8220;Versender&#8221;. In dieser Datenbank werden nicht nur IPs von Mailservern festgehalten, sondern auch IPs von Dial-Up Leitungen, die Spam verschicken. Das Prinzip von Senderbase ist recht einfach, jede IP, welche der Appliance eine E-Mail zustellen will wird erfasst und in der Datenbank nachgeschlagen. Ist die IP bereits in der Datenbank bekannt, so ist ein Wert dafür hinterlegt. Möglich sind Werte von -10 bis 10, wobei je positiver der Wert ist, desto &#8220;vertrauenswürdiger&#8221; ist der Sender. Wenn der Wert negativ ist, blockt die Appliance ab einem bestimmten Schwellwert die E-Mail auf SMTP Ebene ab.</p>
<p>Da jede Appliance weltweit in die gleiche Datenbank ihre &#8220;Erfahrungen&#8221; schreibt ist diese unglaublich aktuell. Senderbase block im Schnitt 75-80% aller E-Mails, und dabei handelt es sich wirklich um Spam! Erst wenn eine E-Mail an Senderbase in der Appliance vorbei gekommen ist, wird sie zum Spamfilter bzw. Virenfilter gereicht.</p>
<p>Man mag es kaum glauben, aber mit der Hilfe einer Ironport Appliance ist mein Spamaufkommen fast bei 0. Der Haken an der Sache ist, dass diese Geräte nicht gerade billig sind&#8230;.;-) </p>
]]></content:encoded>
			<wfw:commentRss>http://www.treibsand.com/2007/03/15/spam_ironport/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SMTP Engine in Python</title>
		<link>http://www.treibsand.com/2007/03/15/smtpd_python/</link>
		<comments>http://www.treibsand.com/2007/03/15/smtpd_python/#comments</comments>
		<pubDate>Thu, 15 Mar 2007 13:10:31 +0000</pubDate>
		<dc:creator>Toast</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SMTP]]></category>

		<guid isPermaLink="false">http://test.treibsand.com/?p=43</guid>
		<description><![CDATA[Vor kurzem war ich dabei einen Contentfilter für Postfix zu schreiben. Einfache Contentfilter lassen sich ja sogar mit Shell Scripts machen, diese werden dann aber per Pipe aufgerufen, was mir nicht wirklich gefällt&#8230; Viel interessanter ist es einen Contentfilter per spawn einzubinden, was ein Program startet und es an einen Socket bindet, etwa so wie [...]]]></description>
			<content:encoded><![CDATA[<p>Vor kurzem war ich dabei einen Contentfilter für Postfix zu schreiben. Einfache Contentfilter lassen sich ja sogar mit Shell Scripts machen, diese werden dann aber per Pipe aufgerufen, was mir nicht wirklich gefällt&#8230; </p>
<p><span id="more-43"></span><br />
Viel interessanter ist es einen Contentfilter per spawn einzubinden, was ein Program startet und es an einen Socket bindet, etwa so wie inetd. Die Kommunikation zwischen Postfix und dem Contentfilter läuft dann per STDIN bzw. STDOUT&#8230;</p>
<p>Der Contentfilter muss aber SMTP sprechen können, da Postfix per STDIN Smtp Kommandos schickt. Somit musste ich eine SMTPD Klasse in Python schreiben. Da es allgemein wenig Dokumentiert ist, wie so etwas programmiert werden kann, stelle ich hier die Basis-Klasse zur<br />
Verfügung.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>, <span style="color: #dc143c;">string</span>, <span style="color: #dc143c;">os</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#---------------------------------------------------------------------------------------------</span>
<span style="color: #ff7700;font-weight:bold;">class</span> SMTPServerEngine:
	ST_INIT = <span style="color: #ff4500;">0</span>
	ST_HELO = <span style="color: #ff4500;">1</span>
	ST_MAIL = <span style="color: #ff4500;">2</span>
	ST_RCPT = <span style="color: #ff4500;">3</span>
	ST_DATA = <span style="color: #ff4500;">4</span>
	ST_QUIT = <span style="color: #ff4500;">5</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_INIT</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> chug<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff4500;">1</span>:
			data = <span style="color: #483d8b;">''</span>
			completeLine = <span style="color: #ff4500;">0</span>
			<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff7700;font-weight:bold;">not</span> completeLine:
				lump = <span style="color: #dc143c;">os</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stdin</span>.<span style="color: black;">fileno</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, <span style="color: #ff4500;">1024</span><span style="color: black;">&#41;</span>
				<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>lump<span style="color: black;">&#41;</span>:
					data += lump
					<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> data<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">2</span>:<span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>'</span>:
						completeLine = <span style="color: #ff4500;">1</span>
						<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">state</span> <span style="color: #66cc66;">!</span>= SMTPServerEngine.<span style="color: black;">ST_DATA</span>:
							rsp, keep = <span style="color: #008000;">self</span>.<span style="color: black;">doCommand</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
						<span style="color: #ff7700;font-weight:bold;">else</span>:
							rsp = <span style="color: #008000;">self</span>.<span style="color: black;">doData</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
&nbsp;
						<span style="color: #ff7700;font-weight:bold;">if</span> rsp == <span style="color: #008000;">None</span>:
							<span style="color: #ff7700;font-weight:bold;">continue</span>
&nbsp;
						<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>rsp + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
						<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
						<span style="color: #ff7700;font-weight:bold;">if</span> keep == <span style="color: #ff4500;">0</span>:	
							<span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
							<span style="color: #ff7700;font-weight:bold;">return</span>	
				<span style="color: #ff7700;font-weight:bold;">else</span>:
					<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> doCommand<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, data<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;Process a single SMTP Command&quot;&quot;&quot;</span>
		<span style="color: #dc143c;">cmd</span> = data<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>:<span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span>
		<span style="color: #dc143c;">cmd</span> = <span style="color: #dc143c;">string</span>.<span style="color: black;">upper</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">cmd</span><span style="color: black;">&#41;</span>
		keep = <span style="color: #ff4500;">1</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;HELO&quot;</span>:
			<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_HELO</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;RSET&quot;</span>:
			<span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span> = <span style="color: #483d8b;">&quot;&quot;</span>
			<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_INIT</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;NOOP&quot;</span>:
			<span style="color: #ff7700;font-weight:bold;">pass</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;QUIT&quot;</span>:
			keep = <span style="color: #ff4500;">0</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;MAIL&quot;</span>:
			<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">state</span> <span style="color: #66cc66;">!</span>= SMTPServerEngine.<span style="color: black;">ST_HELO</span>:
				<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;503 Bad command sequence&quot;</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
			<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_MAIL</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;RCPT&quot;</span>:
			<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">state</span> <span style="color: #66cc66;">!</span>= SMTPServerEngine.<span style="color: black;">ST_MAIL</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">state</span> <span style="color: #66cc66;">!</span>= SMTPServerEngine.<span style="color: black;">ST_RCPT</span><span style="color: black;">&#41;</span>:
				<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;503 Bad command sequence&quot;</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
			<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_RCPT</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span> == <span style="color: #483d8b;">&quot;DATA&quot;</span>:
			<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">state</span> <span style="color: #66cc66;">!</span>= SMTPServerEngine.<span style="color: black;">ST_RCPT</span>:
				<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;503 Bad command sequence&quot;</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
			<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_DATA</span>
			<span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span> = <span style="color: #483d8b;">&quot;&quot;</span>
			<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;354 OK, Enter data, terminated with a <span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n.<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">else</span>:
			<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;505 Eh? WTF was that?&quot;</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">return</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;250 OK&quot;</span>, keep<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> doData<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, data<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Process SMTP Data. Accumulates client DATA until the
		terminator is found.
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span> = <span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span> + data
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">4</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span><span style="color: black;">&#91;</span>-<span style="color: #ff4500;">5</span>:<span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>.<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>'</span>:
			<span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span> = <span style="color: #008000;">self</span>.<span style="color: black;">dataAccum</span><span style="color: black;">&#91;</span>:-<span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>
			<span style="color: #008000;">self</span>.<span style="color: black;">state</span> = SMTPServerEngine.<span style="color: black;">ST_HELO</span>
&nbsp;
			<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;250 OK - message accepted&quot;</span>
		<span style="color: #ff7700;font-weight:bold;">else</span>:
			<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">#---------------------------------------------------------------------------------------------</span>
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
	<span style="color: #ff7700;font-weight:bold;">try</span>:
		<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;220 localhost<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff4500;">1</span>:
			engine = SMTPServerEngine<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			engine.<span style="color: black;">chug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">SystemExit</span>:
		<span style="color: #ff7700;font-weight:bold;">pass</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.treibsand.com/2007/03/15/smtpd_python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix SQLite lookup table</title>
		<link>http://www.treibsand.com/2006/10/18/postfix_sqlite/</link>
		<comments>http://www.treibsand.com/2006/10/18/postfix_sqlite/#comments</comments>
		<pubDate>Wed, 18 Oct 2006 11:54:10 +0000</pubDate>
		<dc:creator>Toast</dc:creator>
				<category><![CDATA[Mail]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://test.treibsand.com/2006/10/18/postfix-sqlite-lookup-table-2/</guid>
		<description><![CDATA[Oft braucht man für Postfix Konfigurationen für virtuelle Accounts. Die übliche Methode hierfür ist z.B. die Konfiguration mit MySQL zu machen. In vielen Fällen rentiert es sich aber nicht gleich einen MySQL Server aufzusetzen. Vor kurzem brauchte ich ein Backend für Postfix, welches wenig Speicher verbraucht und ich per Webinterface einfach verwalten kann. Per Webinterface [...]]]></description>
			<content:encoded><![CDATA[<p>Oft braucht man für Postfix Konfigurationen für virtuelle Accounts. Die übliche Methode hierfür ist z.B. die Konfiguration mit MySQL zu machen. In vielen Fällen rentiert es sich aber nicht gleich einen MySQL Server aufzusetzen.</p>
<p><span id="more-35"></span><br />
Vor kurzem brauchte ich ein Backend für Postfix, welches wenig Speicher verbraucht und ich per Webinterface einfach verwalten kann. Per Webinterface ein lookup table in Form eine Datei zu editieren und danach ein postmap aufzurufen, macht nicht wirklich spass. Aus diesem Grund kam für mich eigentlich nur SQLite in Frage.</p>
<p>Allerdings kann Postfix aktuell keine lookup tables in SQLite Datenbank, deswegen habe ich diese selber eingebaut. Der Patch für Postfix 2.3.3 ist unter http://www.treibsand.com/static/files/postfix-2.3.3_sqlite.patch verfügbar.</p>
<p>Sobald Postfix mit SQLite gebaut ist, sollte man eine Datenbank anlegen, die z.B. wie folgt aufgebaut ist:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> mail_domains <span style="color: #66cc66;">&#40;</span>id <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">DOMAIN</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">250</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;  
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> mail_users <span style="color: #66cc66;">&#40;</span>id <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span> email <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> maildir <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">250</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">DOMAIN</span> <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;  
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> mail_virtual<span style="color: #66cc66;">&#40;</span> id <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span> email <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> destination text<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">DOMAIN</span> <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>In der Datei main.cf kann wie folgt auf die lookup table zugegriffen werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">virtual_mailbox_maps = sqlite:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>sqlite-mailbox.cf
virtual_mailbox_domains = sqlite:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>sqlite-domains.cf
virtual_alias_maps = sqlite:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>sqlite-alias.cf</pre></div></div>

<p>Jede Config Datei für SQLite muss 2 Anweisungen enthalten:</p>
<ul>
<li>dbpath &#8211; Pfad zur SQLite Datenbank</li>
<li>query &#8211; SQL Query</li>
</ul>
<p>Eine Config Datei kann z.B. wie folgt aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>aliases.db
query = SELECT forw_addr FROM mxaliases WHERE <span style="color: #007800;">alias</span>=<span style="color: #ff0000;">'%s'</span> AND <span style="color: #007800;">status</span>=<span style="color: #ff0000;">'active'</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.treibsand.com/2006/10/18/postfix_sqlite/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

