[php] email bouwen probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
Ik ben bezig een systeem te maken waar men emails mét attachments kan sturen naar de klanten.
Meerdere attachments dus.

Ik heb diverse scripts bekeken en dus delen overgenomen. Het zou moeten werken, ik heb met bestaande emails vergeleken en geanalyseerd op juiste opbouw.

Het lijkt te lukken, maar er gebeuren vreemde dingen. Een stukje code dat belangrijk is voor "herkennen" van email body, bleek verdwenen te zijn.

Ik zal stukjes code hier tonen zodat je kan zien of er ergens fout is.

Deze staat in functies.php. De function code werkt prima, gebruik ook op andere sites.
PHP:
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
function sendmail($mailTo,$mailSubject,$mailBody,$mailFrom,$type='text',$mime_boundary)
    {
    // extra 
    // $mysite = whatsMySite();
    // define("MYSITE",$mysite);
    
    $mailHeader="";

    // header maken en sturen
    $mailHeader .= "From: $mailFrom\n";
    $mailHeader .= "Reply-To: $mailFrom\n";
    $mailHeader .= "X-Mailer: http://www.vdsluisvakanties.nl\n";    
    $mailHeader .= "X-Sender-IP: {$_SERVER['REMOTE_ADDR']}\n";  
    
    // type headers
    if ($type=="multi")
        {
        if ($mime_boundary=="") {
            list($mtime,$time)=explode(" ",microtime());
            $fulltime=$time+$mtime;
            $semi_rand = md5($fulltime);
            $mime_boundary = "x{$semi_rand}x";
            }
        
        $mailHeader .=  "\nMIME-Version: 1.0\n" .
                        "Content-Type: multipart/mixed;\n" .
                        " boundary=\"--------{$mime_boundary}\"\n";

        $mailBody .=    "\nMIME-Version: 1.0\n".
                        "Content-Type: multipart/mixed;\n" .
                        " boundary=\"--------{$mime_boundary}\"\n";
                        "This is a multi-part message in MIME format.\n".
                        "--------{$mime_boundary}\n".
                        "Content-Type: text/html; charset=UTF-8\n".
                        $mailBody . "\n".
                        "--------{$mime_boundary}--\n"; 
        }

    if ($type=="html")
        {
        $mailHeader .= "MIME-Version: 1.0\n";
        $mailHeader .= "Content-Type: text/html; charset=\"UTF-8\"\n";
        $mailHeader .= "Content-Transfer-Encoding: 7bit\n\n";
        }
    if ($type=="text")
        {
        $mailHeader .= "MIME-Version: 1.0\n";
        $mailHeader .= "Content-Type: text/plain; charset=\"UTF-8\"\n";
        $mailHeader .= "Content-Transfer-Encoding: 7bit\n\n";
        }
    
    $mailParams = "-f$mailFrom";
    $mailResult = mail($mailTo,$mailSubject,$mailBody,$mailHeader,$mailParams);
    return $mailResult;
    }

function whatsMySite() {
    // protocol 
    if(isset($_SERVER['HTTPS']) and ("on" == $_SERVER['HTTPS'])) {
        $mysite = "https://";
    }
    else {
        $mysite = "http://";
    }
        
    // host            
    $mysite .= $_SERVER['HTTP_HOST'];
    
    // path
    $path = dirname($_SERVER['SCRIPT_NAME']);
    if("/" != $path) {
        $mysite .= $path;
    }
    
    return($mysite);
}


En in maakemail.php heb ik deze. Dat wordt aangeroepen via de emailformulier.
PHP:
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
$email=$_POST['email'];
$body=$_POST['ebody'];
$subject=stripslashes($_POST['subject']);
$attachment=$_POST['attachment'];

$filetype="application/pdf";

list($mtime,$time)=explode(" ",microtime());
$fulltime=$time+$mtime;
$semi_rand = md5($fulltime);
$mime_boundary = "x{$semi_rand}x";

$body.="\n\n";
// attachment data collect
$rows=count($attachment);
if ($rows>0)
    {
    $_SESSION['string']=true;
    for ($i=0;$i<$rows;$i++)
        {
        $_SESSION['briefid']=$attachment[$i];
        $adata=include "maakpdf.php";
        $data=chunk_split(base64_encode($adata[pdf]));
        $filename=$adata[file];
        $body .= "\n--------{$mime_boundary}\n" .
        "Content-Type: {$filetype};\n" .
        " name=\"{$filename}\"\n" .
        "Content-Transfer-Encoding: base64\n" .
        "Content-Disposition: attachment;\n" .
        " filename=\"{$filename}\"\n\n" .
        $data;
        }
    }

unset($_SESSION['toonbrief']);
unset($_SESSION['string']);
// finished
$result=sendmail($email,$subject,$body,$mailFrom,'multi',$mime_boundary);


Maakpdf.php is al goed getest. Het werkt met FPDF code en ik heb al zonder problemen PDF mee gemaakt. Er zitten geen fouten in. De string gaat via return in de php en dat heb ik geen fouten mee gehad. Het werkt goed.

Bij tests is deel van te zien, die in alle testemails verschijnt onderaan.
code:
1
2
3
4
5
MIME-Version 1.0
Content-type: multipart/mixed;
 boundary="--------xxxxx"

(hier verschijnt stukje emailtekst en daaronder gemaakte attachments in base64)


Maar een stukje tekst ontbreekt steeds in alle mailtests. Dat zit NIET ertussen in alle testemails.
code:
1
2
3
This is a multi-part message in MIME format
--------xxxxx
Content-Type: text/html; charset=UTF-8


Waarom dat eruit is geknipt weet ik niet. Het is gewoon weg bij aankomst. Hierdoor leest de mailprogramma, maar ook online webmail, de geheel verkeerd en laat zien als één groot brok tekst zien met attachment codesoep eronder. Het kan zo niet!

Wie kan me goede tips geven over correct opbouwen van email? Zodat er niks weggelaten wordt tijdens versturen en goed gelezen wordt. Veel sites hebben soortgelijke code die ik gebruik, dus ik kan geen antwoord vinden. Ik weet niet precies wat de regels zijn in $header string en wat in $body moet komen staan.
Het sturen gaat met mail() functie.
Misschien zit het probleem in boundary regels. Ik heb dat overal gelijk gezet. Dat zou niet veel moeten uitmaken, want ik heb werkende emails gezien die overal gelijk is.

Aan je het woord. :) Ik ben erg benieuwd.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zoals in alle topics over problemen met mailen... gebruik PHPMailer of Zend_Mail...

Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
Je doet alsof de bestaande scripts op internet allemaal fout zijn.
Waarom moet je per sé PHPMailer pakken als er maar beetje aangepast hoeft te worden?

Ik heb al eerder zonder problemen HTML emails mee gestuurd, en dit is nieuw geval met meerdere attachments en boundary regels erin. Dat doen alle emailsprogramma's, ik wil graag weten waarom het niet goed gaat.

Als het goed werkt voor een deel, ben ik er bijna. Ik moet alleen even weten waarom stukje code weggehaald is bij aankomst.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Iedereen gebruikt PHPMailer omdat iedere mailclient op deze wereld subtiel anders werkt. Ik heb HTML emails gezien die in Outlook 2003 wel goed werkten en in Outlook 2000 en 2007 niet. Voeg bij dat soort dingen de Thunderbirds, de Eudora's, de Pine's en de Gmail's van deze wereld en je bent, met alle respect, zot als je zelf het wiel uit gaat vinden voor een productieapplicatie.

Wat je wil is 3 regels code met PHPMailer. En als je een keer een klacht krijgt van een user download je een nieuwe PHPMailer en dan werkt het wel. Sommige wielen zijn de moeite van het opnieuw uitvinden niet waard.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MrDummy schreef op woensdag 28 januari 2009 @ 22:40:
Wie kan me goede tips geven over correct opbouwen van email?
Daar hebben we RFC's voor ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
En ook nogal wat sites met PHPMailer.
http://phpmailer.codeworxtech.com/index.php (loop achter?)
http://sourceforge.net/projects/phpmailer (schijnt nieuwste)

En paar links die niet echt veilig zijn.

Ik ga morgen maar kijken wat PHPMailer doet. Maar je bent geheel vrij om antwoord te geven ;)

Ik heb stukje ontbrekende deel verhuisd naar $header, en dat verschijnt nu wel, maar nog steeds in text mode.
Neem aan dat <html><body> ook in emailbericht moet komen staan...

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

MrDummy schreef op woensdag 28 januari 2009 @ 23:11:
En ook nogal wat sites met PHPMailer.
http://phpmailer.codeworxtech.com/index.php (loop achter?)
http://sourceforge.net/projects/phpmailer (schijnt nieuwste)

En paar links die niet echt veilig zijn.
Waarom zouden die links niet veilig zijn?
Ik heb stukje ontbrekende deel verhuisd naar $header, en dat verschijnt nu wel, maar nog steeds in text mode.
Neem aan dat <html><body> ook in emailbericht moet komen staan...
Als ik naar je sendmail kijk is de $type default geset op 'text'. Mag jij me uitleggen waarom je constant text door krijgt.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
TeeDee schreef op woensdag 28 januari 2009 @ 23:22:
Als ik naar je sendmail kijk is de $type default geset op 'text'. Mag jij me uitleggen waarom je constant text door krijgt.
Ik zie dan wel weer:
$result=sendmail($email,$subject,$body,$mailFrom,'multi',$mime_boundary);
Zonder verder te kijken dan m'n neus lang is ziet 't er wel naar uit dat er 'multi' gepassed wordt naar sendmail ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

RobIII schreef op woensdag 28 januari 2009 @ 23:45:
[...]

Ik zie dan wel weer:

[...]

Zonder verder te kijken dan m'n neus lang is ziet 't er wel naar uit dat er 'multi' gepassed wordt naar sendmail ;)
Als ik het even naar wat pseudo C# 'cast':
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//doe dingen in maakemail.php (goeie naam ;))
sendmail(email,subject,body,mailFrom,"multi",mime_boundary); 
//overhevelen!
private void sendmail(
     string email,string subject,
     string body,string mailFrom,string type,string mime_boundary)
{
  type="text";
  //doe dingen!

  if(type=="text")
  {
     //attach text only headers
  }
}

Dat gebeurt er ongeveer als ik het goed begrijp. Dus of verder dan je neus lang is kijken ;) of ik begrijp echt geen reet van hoe PHP zulke dingen doet.

[ Voor 7% gewijzigd door TeeDee op 28-01-2009 23:57 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • 2playgames
  • Registratie: Februari 2005
  • Laatst online: 01-06 15:19
Inderdaad, je snapt PHP niet ;)

Het volgende stuk PHP:

PHP:
1
2
3
4
5
6
<?php

function foo($a, $b = 'text') {
}

?>


zou in Java zo gemaakt worden

Java:
1
2
3
4
5
6
7
public void foo(String a, String b) {
 // bla
}

public void foo(String a) {
  foo(a, "text");
}

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Blegh....

Sorry RobIII ;)

Poging om het goed te maken :D
PHP:
1
2
3
4
5
6
7
8
       $mailBody .=     "\nMIME-Version: 1.0\n".
                        "Content-Type: multipart/mixed;\n" .
                        " boundary=\"--------{$mime_boundary}\"\n";
                        "This is a multi-part message in MIME format.\n".
                        "--------{$mime_boundary}\n".
                        "Content-Type: text/html; charset=UTF-8\n".
                        $mailBody . "\n".
                        "--------{$mime_boundary}--\n";
Hoort die ; wel op regel 3 en moet dat niet een . zijn?

[ Voor 91% gewijzigd door TeeDee op 29-01-2009 00:14 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
TeeDee schreef op woensdag 28 januari 2009 @ 23:55:
of ik begrijp echt geen reet van hoe PHP zulke dingen doet.
Nou weet ik ook weinig van PHP (en wil dat graag zo houden :P ) maar je moet het zien als een 'optionele parameter' waarbij 'ie, wanneer niet opgegeven, een default value heeft.
Te laat. Je bent nu in mijn achting gedaald >:) :+

[ Voor 21% gewijzigd door RobIII op 29-01-2009 00:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
TeeDee schreef op donderdag 29 januari 2009 @ 00:08:
Hoort die ; wel op regel 3 en moet dat niet een . zijn?
Scherp gezien, dude :)
Het gaf geen error melding in php, waardoor het niet meteen opvalt.

Even nieuwe test maken....

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

En dat om 00:14.
RobIII schreef op donderdag 29 januari 2009 @ 00:08:
[...]
Te laat. Je bent nu in mijn achting gedaald >:) :+
And going up... :+

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
De emailtest laat nog steeds mysterieuze verdwenen eerste 4-5 regels zien die gemaakt is in $mailBody. De $header is in orde. Ik heb <html><body> erbij gezet maar dat heeft geen effect.
Ze zijn gewoon weg. En dat stoort het me veel.

Ik ga morgen even debuggen of het eigen PHP probleem (de string is zelf "stuk" gegaan) is of dat het mail probleem (onderweg "stuk" gegaan) is. De tekst voor mailbericht komt uit TinyMCE, die als HTML opmaakt.

Je hoort het nog van me.

---
Update:

Bij debuggen van output van $mailBody ontdek ik dat er twee keer bericht plus attachment code erin is gezet. De boosdoener blijkt te zitten in ".=" (met puntje) waardoor er op verkeerde manier is samengevoegd.

PHP:
1
2
3
4
5
        $mailBody =     "This is a multi-part message in MIME format.\n".
                        "--------{$mime_boundary}\n".
                        "Content-Type: text/html; charset=UTF-8\n".
                        $mailBody . "\n".
                        "--------{$mime_boundary}--\n";

Zo moet het eigenlijk worden zonder puntje.
Ook elders met <html><body> is met .= samengevoegd, wat ook fout is.

Mocht het niet goed uitkomen, dan steek ik maar witte vlag op en installeer phpmailer...

[ Voor 44% gewijzigd door MrDummy op 29-01-2009 10:56 ]


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
De correctie in de code helpt wat, maar de client blijft nog steeds hele email aanzien als groot brok tekst.

Dus heb ik maar phpmailer gepakt en al snel na 15 minuten maken en nachecken is email goed doorgekomen met losse attachments. Inderdaad, nog een keer wiel uitvinden is veel werk. Het zou wel mooi zijn als er kleine oplossing of verklaring is voor het probleem dat email niet goed werkt met huidige code. Misschien moet het multipart/alternative zijn ipv multipart/mixed (want dat doet phpmailer bij html weergave)

En ja, ik heb mijn witte vlag opgestoken. :X

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

"He who admits his mistakes is a strong man" ;)

Succes ermee :P

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Als je de verschillen nog graag wilt weten pak je de headers van de niet-werkende mail en de wel-werkende mail en vergelijk je ze ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien kun je hier wat uit halen, dit is een script wat ik van internet heb geplukt, het is een email script waar je meerdere attachments aan kunt toevoegen ;)

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<? 

// store as "mime_mail.inc" 

class mime_mail 
{ 
   var $parts; 
   var $to; 
   var $from; 
   var $headers; 
   var $subject; 
   var $body; 

   /* 
    *     void mime_mail() 
    *     class constructor 
    */ 

   function mime_mail() { 
      $this->parts = array(); 
      $this->to =  ""; 
      $this->from =  ""; 
      $this->subject =  ""; 
      $this->body =  ""; 
      $this->headers =  ""; 
   } 

   /* 
    *     void add_attachment(string message, [string name], [string ctype]) 
    *     Add an attachment to the mail object 
    */ 

   function add_attachment($message, $name =  "", $ctype = "application/octet-stream") { 
      $this->parts[] = array ( 
            "ctype" => $ctype, 
            "message" => $message, 
            "encode" => $encode, 
            "name" => $name 
                           ); 
   } 

   /* 
    *      void build_message(array part= 
    *      Build message parts of an multipart mail 
    */ 

   function build_message($part) { 
      $message = $part[ "message"]; 
      $message = chunk_split(base64_encode($message)); 
      $encoding =  "base64"; 
      return  "Content-Type: ".$part[ "ctype"]. 
         ($part[ "name"]? "; name = \"".$part[ "name"]. 
         "\"" :  ""). 

         "\nContent-Transfer-Encoding: $encoding\n\n$message\n"; 
   } 

   /* 
    *      void build_multipart() 
    *      Build a multipart mail 
    */ 

   function build_multipart() { 
      $boundary =  "b".md5(uniqid(time())); 
      $multipart = 
         "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary"; 

         for($i = sizeof($this->parts)-1; $i >= 0; $i--) 
      { 
         $multipart .=  "\n".$this->build_message($this->parts[$i]). 
            "--$boundary"; 
      } 
      return $multipart.=  "--\n"; 
   } 

   /* 
    *      string get_mail() 
    *      returns the constructed mail 
    */ 

   function get_mail($complete = true) { 
      $mime =  ""; 
      if (!empty($this->from)) 
         $mime .=  "From: ".$this->from. "\n"; 
      if (!empty($this->headers)) 
         $mime .= $this->headers. "\n"; 

      if ($complete) { 
         if (!empty($this->to)) { 
            $mime .= "To: $this->to\n"; 
         } 
         if (!empty($this->subject)) { 
            $mime .= "Subject: $this->subject\n"; 
         } 
      } 

      if (!empty($this->body)) 
         $this->add_attachment($this->body,  "",  "text/plain"); 
      $mime .=  "MIME-Version: 1.0\n".$this->build_multipart(); 

      return $mime; 
   } 

   /* 
    *      void send() 
    *      Send the mail (last class-function to be called) 
    */ 

   function send() { 
      $mime = $this->get_mail(false); 
      mail($this->to, $this->subject,  "", $mime); 
   } 
};  // end of class 

?> 

<? 
include "mime_mail.inc"; 

if (empty($recipient)){ 
?> 

Please ENTER your E-mail adress to receive the files: 
<form> 
<input type="text" name="recipient"> 
<input type="submit"value="ok"> 
</form> 

<? 
exit; 
} 
print "Sending file to $recipient.<p>"; 

$mail = new mime_mail; 
$mail->from ="guido@test.nl"; 
$mail->to=$recipient; 
$mail->subject= "Test"; 
$mail->body= "Test test test"; 

$content_type="image/jpeg"; 

$dir = opendir(".."); 

while (($filename = readdir($dir))){ 
if (ereg("\.jpg$", $filename)){ 
$fd = fopen($filename, "r"); 
$data =fread($fd, filesize($filename)); 
fclose($fd); 

$mail->add_attachment($data, $filename, $content_type); 

print "I have added $filename. <br>"; 
} 
} 
closedir($dir); 
$mail->send(); 
print"Ihave send off the email. "; 
print "Veel plezier ermee"; 
?>

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je hebt duidelijk bovenstaande discussie niet gevolgd ;)
En, hoewel goedbedoeld, er zijn ongeveer anderhalf miljoen php email scripts op het web te vinden waarbij in datzelfde aantal - 100 ofzo het wiel niet opnieuw is uitgevonden op een vierkante manier. Als iemand dat zoekt kan 'ie dat prima zelf vinden. Ik zie niet wat jouw 'vondst' beter maakt dan eender welke andere.

[ Voor 53% gewijzigd door RobIII op 30-01-2009 18:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1