• Proggy
  • Registratie: Oktober 2001
  • Laatst online: 17-11-2023
Voor de ontwikkeling van een stuk software waarbij ik gebruik maak van qmail+vpopmail wil ik het volgende bereiken:

Wat wil ik?

Indien een lokale mail gebruiker naar een andere lokale mail gebruiker op hetzelfde virtuele domein een email stuurt wil ik dat de filename die qmail wegschrijft steeds dezelfde naam krijgt, zijnde het email adres (eventueel md5 hash hiervan) van de afzender.

Waarom
Door deze functie zorg je ervoor dat elke gebruiker alleen het nieuwste mailtje heeft van de afzender. Indien je een nieuwe email ontvangt van administrator@domein.nl wordt deze overschreven indien deze al bestaat en aangemaakt als deze nog niet bestaat.

Wat heb ik geprobeerd?
Ik heb in de sourcecode van qmail-local.c gekeken of ik hier iets aan moet/kan passen. Op internet las ik echter dat je daar eigenlijk nooit wijzingen in hoeft te maken omdat je met de .qmail file ook al heel wat kan.

Welk antwoord hoop ik van jullie te krijgen?
-Ik hoop uitsluitsel te krijgen of dit via de .qmail aan te passen is
-Ik hoop dat jullie me op weg kunnen helpen hoe ik dit voor elkaar krijg

Ik hoop heel erg dat jullie me hier meer over kunnen vertellen! :>

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 09:19

WHiZZi

Museumdirecteurtje

in de .qmail file een pipe aanmaken naar een nog zelf te schrijven script die maakt wat jij wil welke de adressen filtert en deze op jouw manier wegschrijft ?

Is dat wat je wilt ?

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • Proggy
  • Registratie: Oktober 2001
  • Laatst online: 17-11-2023
WHiZZi schreef op donderdag 12 november 2009 @ 13:38:
in de .qmail file een pipe aanmaken naar een nog zelf te schrijven script die maakt wat jij wil welke de adressen filtert en deze op jouw manier wegschrijft ?

Is dat wat je wilt ?
Bedankt voor je reactie!

Nee wat ik wil is een script (heet dat een pipe als hij aangeroepen wordt in het .qmail bestand?) aanmaken die de mail, met inhoud, wegschrijft naar een bestand waar de bestandsnaam de naam van de afzender is in de home map van de ontvanger.

  • Equator
  • Registratie: April 2001
  • Laatst online: 01-02 14:18

Equator

Crew Council

#whisky #barista

IMO heeft dit vrij weinig met PNS te maken. Ik verplaats het naar Serversoftware en Windows Servers :)

  • Proggy
  • Registratie: Oktober 2001
  • Laatst online: 17-11-2023
Ik heb de oplossing toch zelf gevonden en wil he, graag met jullie delen

Maak in de home map van elke qmail/vpopmail user een .qmail bestand aan.

In het .qmail bestand zet je de volgende tekst:

"|php5 -f /srv/www/htdocs/emailproc.php" UIteraard ga ik er dan vanuit dat je PHP5 draait op je server en je script op deze locatie staat

Vervolgens kan het PHP 5 bestand er zo uitzien:

code:
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
<?php
    //Database connectie
    $link = mysql_connect('localhost', 'usernamevoordatabase', 'passwordvoordatabase');
    mysql_select_db('binadit');
    
    //Variables
    $from = "";
    $to = "";
    $cc = "";
    $bcc = "";
    $subject = "";
    $allheaders = "";
    $otherheaders = "";
    $message = "";
    $splittingheaders = true;
    
    //Inladen e-mail bestand
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    
    //Email parsen naar een array
    $lines = explode("\n", $email);
    
    //Email regel voor regel nalopen
    for ($i=0; $i<count($lines); $i++) {
        //Als we de headers opsplitsen
        if ($splittingheaders) {
            $allheaders .= $lines[$i]."\n";
            
            //Belangrijke headers eruit filteren
            if (preg_match("/^subject: (.*)/i", $lines[$i], $matches)) {
                $subject = $matches[1];
            }
            elseif (preg_match("/^from: (.*)/i", $lines[$i], $matches)) {
                $from = $matches[1];
                $fromEmail = ereg("([[:alnum:]_\.\-]+@([[:alnum:]_\.\-]+\.)+[[:alpha:]]{2,4})", $from, $emailMatch);
                $fromEmail = $emailMatch[1];
            }
            elseif (preg_match("/^to: (.*)/i", $lines[$i], $matches)) {
                $to = $matches[1];
            }
            elseif (preg_match("/^cc: (.*)/i", $lines[$i], $matches)) {
                $cc = $matches[1];
            }
            elseif (preg_match("/^bcc: (.*)/i", $lines[$i], $matches)) {
                $bcc = $matches[1];
            }
            else {
                $otherheaders .= $lines[$i]."\n";
            }
        }
        else{
            $message .= $lines[$i]."\n";
        }
    
        if (trim($lines[$i])=="") {
            $splittingheaders = false;
        }
    }
    
    //Ontvanger in array zetten om filename op goede plek te kunnen plaatsen
    $to_array = explode("@", $to);
    
    //Mail opslaan
    $file = "/home/vpopmail/domains/".$to_array[1]."/".$to_array[0]."/Maildir/new/".md5($from);
    $handle = fopen($file, 'w');
    fwrite($handle, $email);
    fclose($handle); 
    
    //In database zetten van ontvangen email als eventuele log funtie
    $query = "
        INSERT INTO `test` (
        `id` ,
        `afzender` ,
        `ontvanger` ,
        `onderwerp` ,
        `bericht` ,
        `bestand` ,
        `datum`
        )
        VALUES (
        NULL , '".$from."', '".$to."', '".$subject."', ' ".$message."', '".addslashes($email)."', NOW( )
        );"
    ;
    mysql_query($query);
    
?>


Je kunt elke wijziging aanbrengen in het script om met de email te doen wat je wilt. Zo kun je bijvoorbeeld dit script ook gebruiken om emails direct in je webapplicatie binnen te laten komen!

Ik hoop dat iemand er wat aan heeft!