[PHP] waterdichte bounced mail handler

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voordat ik hier met ellenlange scripts ga gooien zal ik maar eerst even vragen of het misschien al bestaat...

Ik ben op zoek naar een script dat een bouncemail kan verwerken en onafhankelijk van het type mailserver dat 'm bounced de bounce-reden (user unknown e.d.) en het gebouncde emailadres (ditemailadres@bestaatniet.nl) kan achterhalen uit het bouncemailtje (de body uitlezen mbv imap functies o.i.d.)...

Daarnaast gebruik ik het onderstaande script om de mail te versturen.
Zal het mailtje door alle mailservers correct worden gebounced naar het bounce-adres dat hieronder is opgegeven?
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
92
93
94
95
96
97
98
99
100
101
102
103
<? 
// functie © SchizoDuckie 
// FUNCTIE OM MAIL TE VERZENDEN IN MULTIPART/ALTERNATIVE
function SendMail($mailarray) 
{ 
    $mailarray['InnerBoundary'] = "----=_InnerBoundery_001"; 
    $mailarray['OuterBoundary'] = "----=_OuterBoundary_000"; 
    $mailarray['html']=$mailarray['html']?$mailarray['html']:preg_replace("/\n/","<br>",$mailarray['text']) 
    or die("Er is geen content beschikbaar."); 
    $mailarray['text']=$mailarray['text']?$mailarray['text']:"U heeft een html mailer nodig om dit bericht te lezen."; 

    // BERICHTEN BEGINNEN MET text/html, ALTERNATIEVEN IN OUTERBOUNDARY
    $mailarray['Message'] ="Dit is een multipart bericht in MIME formaat.\n"; 
    $mailarray['Message'].="\n--".$mailarray['OuterBoundary']."\n"; 
    $mailarray['Message'].="Content-Type: multipart/alternative;\n\tboundary=\"".$mailarray['InnerBoundary']."\"\n\n"; 

    // PLAIN GEDEELTE
    $mailarray['Message'].="\n--".$mailarray['InnerBoundary']."\n"; 
    $mailarray['Message'].="Content-Type: text/plain;\n\tcharset=\"iso-8859-1\"\n"; 
    $mailarray['Message'].="Content-Transfer-Encoding: quoted-printable\n\n"; 
    // PLAIN KOMT HIER
    $mailarray['Message'].=$mailarray['text']."\n\n"; 

    // HTML GEDEELTE
    $mailarray['Message'].="\n--".$mailarray['InnerBoundary']."\n"; 
    $mailarray['Message'].="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\n"; 
    $mailarray['Message'].="Content-Transfer-Encoding: base64\n\n"; 
    // HTML KOMT HIER
    $mailarray['Message'].=chunk_split(base64_encode($mailarray['html']))."\n\n"; 

    // EINDE VAN IB 
    $mailarray['Message'].="\n--".$mailarray['InnerBoundary']."--\n"; 

    // ATTACHMENTS KOMEN HIER 
    if(!empty($mailarray['attachments'])) 
    { 
            for ($j=0; $j< sizeof($mailarray['attachments']); $j++) 
            { 
                    $mailarray['Message'].= "\n--".$mailarray['OuterBoundary']."\n"; 
                    $mailarray['Message'].="Content-Type: application/octetstream;\n\tname=\"".$mailarray['attachments'][$j]['filename']."\"\n"; 
                    $mailarray['Message'].="Content-Transfer-Encoding: base64\n"; 
                    $mailarray['Message'].="Content-Disposition: attachment;\n\tfilename=\"".$mailarray['attachments'][$j]['filename']."\"\n\n"; 
                    $mailarray['Message'].= chunk_split(base64_encode($mailarray['attachments'][$j]['content'])); 
                    $mailarray['Message'].="\n\n"; 
            } 
    } 
    // EINDE BERICHT
    $mailarray['Message'].="\n--".$mailarray['OuterBoundary']."--\n"; 

    // HET VERZENDEN BEGINT HIER
    $connect = fsockopen(ini_get("SMTP"), ini_get("smtp_port"), $errno, $errstr, 30) or throw_error("Connectie met de sendmail server niet mogelijk."); 
    $rcv = fgets($connect, 1024); 
    fputs($connect, "HELO {$_SERVER['SERVER_NAME']}\r\n"); 
    $rcv = fgets($connect, 1024); 

    // GEBRUIK HIER BOUNCEADDR OM BOUNCEMAILTJES NAAR JUISTE BOX TE STUREN
    // LET OP: DIT IS NIET DIRECT ZICHTBAAR VOOR DE ONTVANGER
    fputs($connect, "MAIL FROM:".$mailarray['bounceaddr']."\r\n"); 
    $rcv = fgets($connect, 1024); 
    fputs($connect, "RCPT TO:".$mailarray['toaddr']."\r\n"); 
    $rcv = fgets($connect, 1024); 
    fputs($connect, "DATA\r\n"); 
    $rcv = fgets($connect, 1024); 
    fputs($connect, "Subject: ".$mailarray['subject']."\r\n"); 
    fputs($connect, "From: ".$mailarray['fromname']." <".$mailarray['fromaddr'].">\r\n"); 
    fputs($connect, "To: ".$mailarray['toname']." <".$mailarray['toaddr'].">\r\n"); 
    fputs($connect, "X-Sender: <".$mailarray['fromaddr'].">\r\n"); 
    fputs($connect, "MIME-Version: 1.0\r\n"); 
    fputs($connect, "Return-Path: <".$mailarray['fromaddr'].">\r\n"); 
    fputs($connect, "Errors-To: <".$mailarray['fromaddr'].">\r\n"); 
    // DE ONDERSTAANDE OPTIES ZIJN WEGGEQUOTE
    //fputs($connect, "X-Mailer: PHP ÜberMailer\r\n"); 
    //fputs($connect, "X-Priority: 1\r\n"); 
    //fputs($connect, "X-MSMail-Priority: High\r\n"); 
    fputs($connect, "Content-Type: multipart/mixed;\r\n\tboundary=\"".$mailarray['OuterBoundary']."\"\r\n"); 
    fputs($connect, "\r\n"); 
    fputs($connect, stripslashes($mailarray['Message'])." \r\n"); 
    fputs($connect, ".\r\n"); 
    $rcv = fgets($connect, 1024); 
    fputs($connect, "RSET\r\n"); 
    $rcv = fgets($connect, 1024);
    
    fputs ($connect, "QUIT\r\n"); 
    $rcv = fgets ($connect, 1024); 
    fclose($connect); 
    
    // BERICHT DAT GETOOND WORDT ALS HET VERZENDEN VOLTOOID IS
    echo("Mail: Message sent to ".$mailarray['toname']." <".$mailarray['toaddr']."><br>"); 
} 

// CODE OM MAIL OP TE MAKEN
$mailarray['fromname'] = 'Mij';
$mailarray['fromaddr'] = 'mij@mijndomein.nl';
$mailarray['toname'] = 'Jou';
$mailarray['toaddr'] = 'jouw@jouwdomein.nl;
$mailarray['bounceaddr'] = 'bounce@mijndomein.nl';
$mailarray['subject'] = 'Testing.. Message';
$mailarray['text'] = 'Text body';
$mailarray['html'] = '<b>HTML body</b>';

// CODE OM MAIL TE VERZENDEN
sendMail($mailarray); 
?>

Acties:
  • 0 Henk 'm!

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Stond er in onderstaand topic niet het nodige over bovenstaand geschreven?

[rml][ ALG] Juist email adres *[/rml]

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Woudloper schreef op donderdag 27 januari 2005 @ 10:43:
Stond er in onderstaand topic niet het nodige over bovenstaand geschreven?

[rml][ ALG] Juist email adres *[/rml]
't gaat niet om het valideren van (het formaat/de opmaak van) een emailadres... 't gaat om het achterhalen van het gebouncde adres (en de bounce reden) uit een bouncemail...

Acties:
  • 0 Henk 'm!

  • B-Man
  • Registratie: Februari 2000
  • Niet online
De mail zal netjes naar je bounceadres verzonden worden als hij onbezorgbaar is, aangezien mailservers het bericht dan routeren op basis van de 'envelope sender': het adres wat je aan 'MAIL FROM:' meegeeft.

Een klasse/script om uit alle soorten bouncemail reacties het gebouncete adres te achterhalen zal je niet snel vinden vermoed ik, aangezien deze melding door mailadmins in te stellen is, en dus lang niet altijd 'standaard' is.
Wel is het zo dat veel mailservers een MIME-part meezenden (een zgn. delivery report), maar volgens mij is ook dat niet geheel gestandaardiseerd. Hier ben ik echter niet geheel in thuis, dus misschien dat een ander dit kan bevestigen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
B-Man schreef op donderdag 27 januari 2005 @ 13:18:
De mail zal netjes naar je bounceadres verzonden worden als hij onbezorgbaar is, aangezien mailservers het bericht dan routeren op basis van de 'envelope sender': het adres wat je aan 'MAIL FROM:' meegeeft.

Een klasse/script om uit alle soorten bouncemail reacties het gebouncete adres te achterhalen zal je niet snel vinden vermoed ik, aangezien deze melding door mailadmins in te stellen is, en dus lang niet altijd 'standaard' is.
Wel is het zo dat veel mailservers een MIME-part meezenden (een zgn. delivery report), maar volgens mij is ook dat niet geheel gestandaardiseerd. Hier ben ik echter niet geheel in thuis, dus misschien dat een ander dit kan bevestigen.
tnx.. dan weet ik in ieder geval dat de bouncemailtjes altijd aankomen op het bovengenoemde adres.
Op deze pagina staan de bounce-meldingen van veel mailservers beschreven:
http://shamash.org/help/bouncemsgs.shtml.
Een kwestie van checken of bepaalde strings (host, user quote exceeded, etc) voorkomen en een foutmelding toewijzen....