<?php require_once dirname(__FILE__).'/accesscheck.php'; //####################################################################### // Reads mail from a test account that will recieve all sent mail. // Use developer_email to send all mail to one account. // Use test_email settings to pop this box. // This file shows the links from the first email foun d for a selected user. // The links can be use to for instance confirm the user in an automated test. // 2007 Bas Ovink - tincan ltd //####################################################################### //CREATE TABLE `dev-phplist`.`phplist_testemail` ( //`id` int( 11 ) NOT NULL AUTO_INCREMENT , //`date` datetime default NULL , //`header` text, //`data` blob, //`status` varchar( 255 ) default NULL , //`comment` text, //PRIMARY KEY ( `id` ) , //KEY `dateindex` ( `date` ) //) ENGINE = MYISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT =34; if (!$GLOBALS['commandline']) { ob_end_flush(); if (!MANUALLY_PROCESS_testS) { echo $GLOBALS['I18N']->get('This page can only be called from the commandline'); return; } } else { ob_end_clean(); echo ClineSignature(); ob_start(); } function prepareOutput() { global $outputdone; if (!$outputdone) { $outputdone = 1; return formStart('name="outputform" class="readtestmailOutput" ').'<textarea name="output" rows=10 cols=70></textarea></form>'; } } $report = ''; //# some general functions function finish($flag, $message) { if ($flag == 'error') { $subject = $GLOBALS['I18N']->get('test processing error'); } elseif ($flag == 'info') { $subject = $GLOBALS['I18N']->get('test Processing info'); } if (!TEST && $message) { sendReport($subject, $message); } // try..catch global $link; imap_close($link); } function ProcessError($message) { output("$message"); finish('error', $message); exit; } function processTestEmails_shutdown() { global $report, $process_id; releaseLock($process_id); // $report .= "Connection status:".connection_status(); finish('info', $report); if (!$GLOBALS['commandline']) { include_once dirname(__FILE__).'/footer.inc'; } } function output($message, $reset = 0) { $infostring = '['.date('D j M Y H:i', time()).'] ['.getenv('REMOTE_HOST').'] ['.getClientIP().']'; //print "$infostring $message<br/>\n"; $message = preg_replace("/\n/", '', $message); //# contribution from http://forums.phplist.com/viewtopic.php?p=14648 //# in languages with accented characters replace the HTML back //Replace the "’" which is not replaced by html_decode $message = preg_replace('/’/', "'", $message); //Decode HTML chars //$message = html_entity_decode($message,ENT_QUOTES,$_SESSION['adminlanguage']['charset']); $message = html_entity_decode($message, ENT_QUOTES, 'UTF-8'); if ($GLOBALS['commandline']) { ob_end_clean(); echo strip_tags($message)."\n"; ob_start(); } else { if ($reset) { echo '<script language="Javascript" type="text/javascript"> // if (document.forms[0].name == "outputform") { document.outputform.output.value = ""; document.outputform.output.value += "\n"; // } </script>' ."\n"; } echo '<script language="Javascript" type="text/javascript"> // if (document.forms[0].name == "outputform") { document.outputform.output.value += "' .$message.'"; document.outputform.output.value += "\n"; // } else // document.writeln("' .$message.'"); </script>' ."\n"; } flush(); } //function processTestEmail($link, $mailIndex, $header) { // global $tables; // $headerinfo= imap_headerinfo($link, $mailIndex); // $header= imap_fetchheader($link, $mailIndex); // $body= imap_body($link, $mailIndex); // $msgid= 0; // $user= 0; // preg_match("/X-MessageId: (.*)/i", $header, $match); // if (is_array($match) && isset ($match[1])) // $msgid= trim($match[1]); // if (!$msgid) { // # older versions use X-Message // preg_match("/X-Message: (.*)/i", $header, $match); // if (is_array($match) && isset ($match[1])) // $msgid= trim($match[1]); // } // preg_match("/X-ListMember: (.*)/i", $header, $match); // if (is_array($match) && isset ($match[1])) // $user= trim($match[1]); // if (!$user) { // # older version use X-User // preg_match("/X-User: (.*)/i", $header, $match); // if (is_array($match) && isset ($match[1])) // $user= trim($match[1]); // } // # some versions used the email to identify the users, some the userid and others the uniqid // # use backward compatible way to find user // if (preg_match("/.*@.*/i", $user, $match)) { // $userid_req= Sql_Fetch_Row_Query("select id from {$tables["user"]} where email = \"$user\""); // if (VERBOSE) // output("UID" . // $userid_req[0] . " MSGID" . $msgid); // $userid= $userid_req[0]; // } // elseif (preg_match("/^\d$/", $user)) { // $userid= $user; // if (VERBOSE) // output("UID" . $userid . " MSGID" . $msgid); // } // elseif ($user) { // $userid_req= Sql_Fetch_Row_Query("select id from {$tables["user"]} where uniqid = \"$user\""); // if (VERBOSE) // output("UID" . $userid_req[0] . " MSGID" . $msgid); // $userid= $userid_req[0]; // } else { // $userid= ''; // } // // Sql_Query(sprintf('insert into %s (date,header,data) // // values("%s","%s","%s")', 'phplist_testemail', date("Y-m-d H:i", @ strtotime($headerinfo->date)), addslashes($header), addslashes($body))); // // $testid= Sql_Insert_id(); // // if ($userid) { // // Sql_Query(sprintf('update %s // // set status = "test system message", // // comment = "userid %s" // // where id = %d', 'phplist_testemail', $userid, $testid)); // // } else { // // Sql_Query(sprintf('update %s // // set status = "unidentified test", // // comment = "not processed" // // where id = %d', 'phplist_testemail', $testid)); // // return false; // // } // dbg($userid, '$userid'); // return true; //} function openPop($server, $user, $password) { $port = $GLOBALS['test_mailbox_port']; if (!$port) { $port = '110/pop3/notls'; } set_time_limit(6000); if (!TEST) { $link = imap_open('{'.$server.':'.$port.'}INBOX', $user, $password, CL_EXPUNGE); } else { $link = imap_open('{'.$server.':'.$port.'}INBOX', $user, $password); } if (!$link) { output($GLOBALS['I18N']->get('Cannot create POP3 connection to')." $server: ".imap_last_error()); return; } return $link; } function openMbox($file) { set_time_limit(6000); if (!TEST) { $link = imap_open($file, '', '', CL_EXPUNGE); } else { $link = imap_open($file, '', ''); } if (!$link) { output($GLOBALS['I18N']->get('Cannot open mailbox file').' '.imap_last_error()); return; } return $link; } function findEmailForUser($link, $mailToFind, $max = 3000) { global $test_mailbox_purge_unprocessed, $test_mailbox_purge; output(sprintf('Looking for emails to %s', $mailToFind)); $num = imap_num_msg($link); output($num.' '.$GLOBALS['I18N']->get('mails in mailbox')."\n"); output($GLOBALS['I18N']->get('Please do not interrupt this process')."\n"); if ($num > $max) { echo $GLOBALS['I18N']->get('Processing first')." $max ".$GLOBALS['I18N']->get('tests').'<br/>'; $num = $max; } $nberror = 0; $found = false; $mailIndex = 0; while (!$found && $mailIndex++ <= $num) { //for ($x= 1; $x <= $num; $x++) set_time_limit(60); $header = imap_fetchheader($link, $mailIndex); preg_match('/X-ListMember: (.*)/i', $header, $match); if (is_array($match) && isset($match[1])) { $match[1] = trim($match[1]); $found = $mailToFind == $match[1]; if (!$found) { printf('<a href="?page=readtestmail&email=%s">Get (& delete) %s</a><br />', $match[1], $match[1]); } } if ($found) { output('Message found'); if (!TEST && $test_mailbox_purge) { output($GLOBALS['I18N']->get('Deleting message')." $mailIndex"); imap_delete($link, $mailIndex); } } else { if (!TEST && $test_mailbox_purge_unprocessed) { output($GLOBALS['I18N']->get('Deleting message')." $mailIndex"); imap_delete($link, $mailIndex); } } flush(); } flush(); output($GLOBALS['I18N']->get('Closing mailbox, and purging messages')); if ($found) { return $num; } else { return; } } //############################################ // main function main() { } if (!function_exists('imap_open')) { Error($GLOBALS['I18N']->get('IMAP is not included in your PHP installation, cannot continue'). '<br/>'.$GLOBALS['I18N']->get('Check out'). ' <a href="http://www.php.net/manual/en/ref.imap.php">http://www.php.net/manual/en/ref.imap.php</a>'); return; } flush(); $outputdone = 0; // lets not do this unless we do some locking first register_shutdown_function('processTestEmails_shutdown'); $abort = ignore_user_abort(1); $process_id = getPageLock(); if (!empty($_REQUEST['email'])) { $mailToFind = $_REQUEST['email']; echo prepareOutput(); switch ($test_protocol) { case 'pop': $link = openPop($test_mailbox_host, $test_mailbox_user, $test_mailbox_password); break; case 'mbox': $link = openMbox($test_mailbox); break; default: Error($GLOBALS['I18N']->get('test_protocol not supported')); return; } if (isset($link)) { $mailIndex = findEmailForUser($link, $mailToFind); if (!is_null($mailIndex)) { $body = imap_body($link, $mailIndex); $overview = imap_fetch_overview($link, $mailIndex); printf('Subject: %s<br />', $overview[0]->subject); preg_match_all("/<a(.*)href=[\"\'](.*)[\"\']([^>]*)>/Umis", $body, $links); foreach ($links[0] as $matchindex => $fullmatch) { preg_match('/p=(\w+)/', $fullmatch, $linkPages); printf('<a href="%s" id=%s>Link %s: %s</a><br />', $fullmatch, $matchindex++, $matchindex, $linkPages[1]); } preg_match_all('/http:\/\/\S+/', $body, $links); foreach ($links[0] as $matchindex => $fullmatch) { preg_match('/p=(\w+)/', $fullmatch, $linkPages); printf('<a href="%s" id=%s>Link %s: %s</a><br />', $fullmatch, $matchindex++, $matchindex, $linkPages[1]); } } } } { echo '<form method="get">'; echo ' <input name="page" value="readtestmail" type="hidden" />'; echo ' <input class="submit" type="submit" name="action" value="Get email for user: " />'; printf(' <input type="text" name="email" value="%s" />', $_REQUEST['email']); echo '</form>'; }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
PEAR | Folder | 0755 |
|
|
PHPMailer | Folder | 0755 |
|
|
PHPMailer6 | Folder | 0755 |
|
|
actions | Folder | 0755 |
|
|
css | Folder | 0755 |
|
|
data | Folder | 0755 |
|
|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
inc | Folder | 0755 |
|
|
info | Folder | 0755 |
|
|
js | Folder | 0755 |
|
|
locale | Folder | 0755 |
|
|
onyxrss | Folder | 0755 |
|
|
plugins | Folder | 0755 |
|
|
tests | Folder | 0755 |
|
|
ui | Folder | 0755 |
|
|
.gitignore | File | 20 B | 0644 |
|
.htaccess | File | 489 B | 0644 |
|
.minceconf | File | 994 B | 0644 |
|
AnalyticsQuery.php | File | 985 B | 0644 |
|
CsvReader.php | File | 1.27 KB | 0644 |
|
EmailSender.php | File | 477 B | 0644 |
|
Updater.php | File | 193 B | 0644 |
|
about.php | File | 7.4 KB | 0644 |
|
accesscheck.php | File | 715 B | 0644 |
|
addprefix.php | File | 1.01 KB | 0644 |
|
adduser.php | File | 46 B | 0644 |
|
admin.php | File | 12.77 KB | 0644 |
|
adminattributes.php | File | 7.46 KB | 0644 |
|
admins.php | File | 5.16 KB | 0644 |
|
analytics.php | File | 2.84 KB | 0644 |
|
attributes.php | File | 26.2 KB | 0644 |
|
blacklistemail.php | File | 1.22 KB | 0644 |
|
bounce.php | File | 11.14 KB | 0644 |
|
bouncemgt.php | File | 1.44 KB | 0644 |
|
bouncerule.php | File | 4.27 KB | 0644 |
|
bouncerules.php | File | 6.33 KB | 0644 |
|
bounces.php | File | 7.57 KB | 0644 |
|
catlists.php | File | 3.34 KB | 0644 |
|
checkbouncerules.php | File | 1.43 KB | 0644 |
|
checki18n.php | File | 3.13 KB | 0644 |
|
checkprerequisites.php | File | 1.62 KB | 0644 |
|
class.image.inc | File | 3.9 KB | 0644 |
|
class.phplistmailer.php | File | 30.73 KB | 0644 |
|
class.phplistmailerbase.php | File | 1.67 KB | 0644 |
|
community.php | File | 3.5 KB | 0644 |
|
communityfeed.php | File | 2.36 KB | 0644 |
|
configure.php | File | 7.85 KB | 0644 |
|
connect.php | File | 89.86 KB | 0644 |
|
convertstats.php | File | 5.83 KB | 0644 |
|
converttoutf8.php | File | 3.78 KB | 0644 |
|
cron.php | File | 3.34 KB | 0644 |
|
date.php | File | 7.65 KB | 0644 |
|
dbcheck.php | File | 3.7 KB | 0644 |
|
defaultFrontendTexts.php | File | 9.79 KB | 0644 |
|
defaultconfig.php | File | 30.66 KB | 0644 |
|
defaultplugin.php | File | 31.59 KB | 0644 |
|
defaults.php | File | 3.64 KB | 0644 |
|
defaultsystemtemplate.php | File | 15.29 KB | 0644 |
|
defaulttest.php | File | 1.23 KB | 0644 |
|
dlusers.php | File | 235 B | 0644 |
|
domainbounces.php | File | 507 B | 0644 |
|
domainstats.php | File | 371 B | 0644 |
|
editattributes.php | File | 8.78 KB | 0644 |
|
editlist.php | File | 7.4 KB | 0644 |
|
eventlog.php | File | 4.68 KB | 0644 |
|
export.php | File | 6.86 KB | 0644 |
|
exportuserdata.php | File | 8.26 KB | 0644 |
|
fckphplist.php | File | 49.84 KB | 0644 |
|
gchart.php | File | 903 B | 0644 |
|
generatebouncerules.php | File | 5.51 KB | 0644 |
|
home.php | File | 6.56 KB | 0644 |
|
hostedprocessqueuesetup.php | File | 3.09 KB | 0644 |
|
htaccess | File | 311 B | 0644 |
|
image.php | File | 2.01 KB | 0644 |
|
import.php | File | 2.75 KB | 0644 |
|
import1.php | File | 11.09 KB | 0644 |
|
import2.php | File | 34.16 KB | 0644 |
|
import3.php | File | 22.72 KB | 0644 |
|
import4.php | File | 16.86 KB | 0644 |
|
importadmin.php | File | 17.08 KB | 0644 |
|
importsimple.php | File | 7.32 KB | 0644 |
|
index.php | File | 32.82 KB | 0644 |
|
info.php | File | 1.07 KB | 0644 |
|
init.php | File | 27.36 KB | 0644 |
|
initialise.php | File | 12.05 KB | 0644 |
|
initlanguages.php | File | 867 B | 0644 |
|
languages.php | File | 21.37 KB | 0644 |
|
lib.php | File | 86.79 KB | 0644 |
|
list.php | File | 11.32 KB | 0644 |
|
listbounces.php | File | 4.13 KB | 0644 |
|
login.php | File | 6.39 KB | 0644 |
|
logout.php | File | 865 B | 0644 |
|
massremove.php | File | 2.55 KB | 0644 |
|
mclicks.php | File | 7.28 KB | 0644 |
|
members.php | File | 19.99 KB | 0644 |
|
mergeduplicates.php | File | 4.48 KB | 0644 |
|
message.php | File | 9.08 KB | 0644 |
|
messages.php | File | 26.27 KB | 0644 |
|
minify.txt | File | 201 B | 0644 |
|
msgbounces.php | File | 3.4 KB | 0644 |
|
msgstatus.php | File | 1.27 KB | 0644 |
|
mviews.php | File | 6.27 KB | 0644 |
|
mysql.inc | File | 40 B | 0644 |
|
mysqli.inc | File | 14.02 KB | 0644 |
|
pageaction.php | File | 1.11 KB | 0644 |
|
phpListAdminAuthentication.php | File | 6.82 KB | 0644 |
|
pluginlib.php | File | 9.43 KB | 0644 |
|
plugins.php | File | 17.78 KB | 0644 |
|
preparesend.php | File | 669 B | 0644 |
|
processbounces.php | File | 35.36 KB | 0644 |
|
processqueue.php | File | 3.71 KB | 0644 |
|
readtestmail.php | File | 11.59 KB | 0644 |
|
reconcileusers.php | File | 27.71 KB | 0644 |
|
redirecttoupdater.php | File | 187 B | 0644 |
|
reindex.php | File | 1.82 KB | 0644 |
|
rsslib.php | File | 3.17 KB | 0644 |
|
runcommand.php | File | 583 B | 0644 |
|
send.php | File | 6.17 KB | 0644 |
|
send_core.php | File | 63.91 KB | 0644 |
|
sendemaillib.php | File | 69.84 KB | 0644 |
|
sendprepared.php | File | 4.87 KB | 0644 |
|
sessionlib.php | File | 2.7 KB | 0644 |
|
setpermissions.php | File | 2.08 KB | 0644 |
|
setup.php | File | 2.56 KB | 0644 |
|
spage.php | File | 4.35 KB | 0644 |
|
spageedit.php | File | 19.08 KB | 0644 |
|
statsmgt.php | File | 1.23 KB | 0644 |
|
statsoverview.php | File | 6.19 KB | 0644 |
|
stresstest.php | File | 4.82 KB | 0644 |
|
structure.php | File | 29.21 KB | 0644 |
|
subscribelib2.php | File | 70.22 KB | 0644 |
|
subscriberstats.php | File | 617 B | 0644 |
|
suppressionlist.php | File | 1.71 KB | 0644 |
|
system.php | File | 795 B | 0644 |
|
systemstats.php | File | 5.73 KB | 0644 |
|
template.php | File | 16.4 KB | 0644 |
|
templates.php | File | 3.01 KB | 0644 |
|
tests.php | File | 1.67 KB | 0644 |
|
uclicks.php | File | 6.74 KB | 0644 |
|
update.php | File | 187 B | 0644 |
|
updateLib.php | File | 2.2 KB | 0644 |
|
updatetlds.php | File | 358 B | 0644 |
|
updatetranslation.php | File | 2.51 KB | 0644 |
|
upgrade.php | File | 23.82 KB | 0644 |
|
user.php | File | 23.08 KB | 0644 |
|
usercheck.php | File | 2.55 KB | 0644 |
|
userclicks.php | File | 11.57 KB | 0644 |
|
userhistory.php | File | 8.25 KB | 0644 |
|
usermgt.php | File | 1.9 KB | 0644 |
|
users.php | File | 19.3 KB | 0644 |
|
vCard.php | File | 1.9 KB | 0644 |
|
viewmessage.php | File | 635 B | 0644 |
|
viewtemplate.php | File | 1.86 KB | 0644 |
|
vote.php | File | 38 B | 0644 |
|