* @thanks Andreas Gohr, Harry Fuecks, Christopher Arndt, Christopher Smith and DokuWiki community */ // SETUP $host ="localhost"; // servername where your DokuWiki is $dokuwikipath ="/dokuwiki/doku.php"; //path to your DokuWiki $discussionprefix = "discussion:"; //based on the discussion template of Esther Brunner $imapuser ="itsmehoney"; //username to log in $imappass ="youknowit"; //password to log in // FUNCTIONS function _decodeHeader($input) { // Original from RFC2047 routine from http://pear.php.net/manual/en/package.mail.mail-mime.php // Remove white space between encoded-words $input = preg_replace('/(=\?[^?]+\?(q|b)\?[^?]*\?=)(\s)+=\?/i', '\1=?', $input); // For each encoded-word... while (preg_match('/(=\?([^?]+)\?(q|b)\?([^?]*)\?=)/i', $input, $matches)) { $encoded = $matches[1]; $charset = $matches[2]; $encoding = $matches[3]; $text = $matches[4]; switch (strtolower($encoding)) { case 'b': $text = base64_decode($text); break; case 'q': $text = str_replace('_', ' ', $text); preg_match_all('/=([a-f0-9]{2})/i', $text, $matches); foreach($matches[1] as $value) $text = str_replace('='.$value, chr(hexdec($value)), $text); break; } $input = str_replace($encoded, $text, $input); } return $input; } function PostToHost($host, $path, $referer, $data_to_send,$targeturl) { $fp = fsockopen($host, 80); printf("Wiki found...\n"); fputs($fp, "POST $path HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); fputs($fp, "Referer: $referer\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $data_to_send); printf("Submitted to $host
"); while(!feof($fp)) { $res .= fgets($fp, 128); } printf("Posted to $host
"); fclose($fp); return $res; } function GetRaw($host,$dokuwikipath,$wikiid){ // gets raw content (not authenticated) $filetoget="http://".$host.$dokuwikipath."?do=export_raw&id=$wikiid"; return implode('',file($filetoget)); } ///////////////////////////////////////////////////////////////////// // connect to IMAP server 82.62.3.23 $mailbox = imap_open("{83.62.3.23/imap:143}INBOX",$imapuser,$imappass); // check mailbox $check = imap_check($mailbox); // check nr of messages $noofmsg=$check->Nmsgs; if ($noofmsg==0){ echo "No messages to process"; } // for every message in inbox for ($index=1; $index<=$noofmsg; $index++){ $header = imap_header($mailbox, $index); $mddate=$header->Date; $mdbody = imap_body($mailbox,$index); $mdid = base64_encode($id); $mdfrom = htmlspecialchars($header->fromaddress); $from=$header->from; $frommailhost=htmlspecialchars($from[0]->host); $frommailbox=htmlspecialchars($from[0]->mailbox); $mdfromemail=$frommailbox."@".$frommailhost; echo "

Processing message $index : origin: ".$mdfrom." at ".$mdfromemail."


"; // $mdsubject = _decodeHeader($header->Subject); // Andi's snippet to decode base64 works fine as well... $mdsubjectb64= preg_replace('/=\?[\w\-]+?\?b\?(.*?)\?=/ie','base64_decode("\1")',$header->Subject); $mdsubjectURL=urlencode($mdsubjectb64); // Post to wiki, by adding timestamp and email body to existing wikitext $timestamp = date("Y-m-d at H:i:s"); $title="Contribution by email from $mdfrom at $mddate"; $wikiid=$discussionprefix.$mdsubjectURL; // get existing wikitext $oldwikitext=(GetRaw($host,$dokuwikipath,$wikiid)); // compose new text to post to wiki echo $mdbody; $wikitext=$oldwikitext."\n\r----\n\rComment from [[$mdfromemail]] added at $timestamp\n\r----\n\r".$mdbody; $targeturl="http://$host$dokuwikipath?id=$wikiid"; $data = "&id=$wikiid&wikitext=".stripslashes($wikitext)."&summary=$title&do=save"; echo ("Posting..$data..$index
"); $x = PostToHost($host, $dokuwikipath,$_SERVER['remote_addr'],$data,$targeturl); // if posted successfully (no check yet!): imap_delete($mailbox, $index); } imap_expunge ($mailbox); imap_close($mailbox); ?>