1<?php
2// Change these to make tests run successfully
3$server   = '{localhost}';
4$default_mailbox = $server . "INBOX";
5$domain = "example.com";
6$admin_user = "webmaster"; // a user with admin access
7$username = "$admin_user@$domain";
8$password = 'p4ssw0rd';
9$users = array("webmaster", "info", "admin", "foo"); // tests require 4 valid userids
10$mailbox_prefix = "phpttest"; // name used for test mailbox
11
12/**
13 * Create a test mailbox and populate with msgs
14 *
15 * @para, string mailbox_suffix Suffix used to uniquely identify mailboxes
16 * @param int message_count number of test msgs to be written to new mailbox
17 *
18 * @return IMAP stream to new mailbox on success; FALSE on failure
19 */
20function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = null, $msg_type = "simple"){
21	global $server, $default_mailbox, $username, $password;
22
23	// open a stream to default mailbox
24	$imap_stream = imap_open($default_mailbox, $username, $password);
25
26	if ($imap_stream === false) {
27		echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
28		return false;
29	}
30
31	echo "Create a temporary mailbox and add " . $message_count .  " msgs\n";
32	$new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type);
33	if ($new_mailbox === false) {
34	   echo "Cant create a temporary mailbox: " . imap_last_error(). "\n";
35	   return false;
36	}
37
38	echo ".. mailbox '$new_mailbox' created\n";
39
40	// reopen stream to new mailbox
41	if (imap_reopen($imap_stream, $new_mailbox) === false) {
42		echo "cant re-open '$new_mailbox' mailbox: " . imap_last_error() . "\n";
43		return false;
44	}
45
46	return $imap_stream;
47}
48
49/**
50 * Create mailbox and fill with generic emails
51 *
52 * @param resource $imap_stream
53 * @param string $mailbox
54 */
55function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type= "simple"){
56	global $default_mailbox, $mailbox_prefix;
57	$mailbox = $default_mailbox . "." . $mailbox_prefix . $mailbox_suffix;
58
59	$mailboxes = imap_getmailboxes($imap_stream, $mailbox, '*');
60
61	// check mailbox does not already exist
62	if ($mailboxes) {
63		foreach($mailboxes as $value) {
64			if ($value->name == $mailbox) {
65				exit ("TEST FAILED : Mailbox '$mailbox' already exists\n");
66			}
67		}
68	}
69
70	if (imap_createmailbox($imap_stream, $mailbox) === false) {
71		return false;
72	}
73
74	// Add number of test msgs requested
75	if ($message_count > 0) {
76		populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type);
77	}
78
79	return $mailbox;
80}
81
82/**
83 * Populate a mailbox with generic emails
84 *
85 * @param resource $imap_stream
86 * @param string $mailbox
87 */
88function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "simple"){
89
90	global $users, $domain;
91
92	for($i = 1; $i <= $message_count; $i++) {
93		if ($msg_type == "simple") {
94			$msg =  "From: foo@anywhere.com\r\n"
95				. "To: $users[0]@$domain\r\n"
96				. "Subject: test$i\r\n"
97				. "\r\n"
98				. "$i: this is a test message, please ignore\r\n";
99		} else {
100			$envelope["from"]= "foo@anywhere.com";
101			$envelope["to"]  = "$users[0]@$domain";
102			$envelope["subject"] = "Test msg $i";
103
104			$part1["type"] = TYPEMULTIPART;
105			$part1["subtype"] = "mixed";
106
107			$part2["type"] = TYPETEXT;
108			$part2["subtype"] = "plain";
109			$part2["description"] = "imap_mail_compose() function";
110			$part2["contents.data"] = "message 1:xxxxxxxxxxxxxxxxxxxxxxxxxx";
111
112			$part3["type"] = TYPETEXT;
113			$part3["subtype"] = "plain";
114			$part3["description"] = "Example";
115			$part3["contents.data"] = "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy";
116
117			$part4["type"] = TYPETEXT;
118			$part4["subtype"] = "plain";
119			$part4["description"] = "Return Values";
120			$part4["contents.data"] = "message 3:zzzzzzzzzzzzzzzzzzzzzzzzzz";
121
122			$body[1] = $part1;
123			$body[2] = $part2;
124			$body[3] = $part3;
125			$body[4] = $part4;
126
127			$msg = imap_mail_compose($envelope, $body);
128		}
129
130		imap_append($imap_stream, $mailbox, $msg);
131	}
132}
133
134/**
135 * Get the mailbox name from a mailbox description, i.e strip off server details.
136 *
137 * @param string mailbox complete mailbox name
138 * @return mailbox name
139 */
140function get_mailbox_name($mailbox){
141
142	if (preg_match('/\{.*?\}(.*)/', $mailbox, $match) != 1) {
143		echo "Unrecpognized mailbox name\n";
144		return false;
145	}
146
147	return $match[1];
148}
149
150?>
151