--- /dev/null
+List Commands plugin -- v1.2
+
+This plugin gives the user a menu of mailinglist options such as
+(un)subscribe, help and archives when viewing messages from compliant
+mailinglists.
+
+
+Description
+===========
+
+The plugin is an implementation of RFC 2369, "The Use of URLs as Meta-Syntax
+for Core Mail List Commands and their Transport through Message Header Fields",
+to be found at ftp://nis.nsf.net/internet/documents/rfc/rfc2369.txt.
+
+Compliant mailinglistservers add extra headers with each message they send out
+with information about how to (un)subscribe, get help or contact the list
+owner. This can either be a web location or an emailaddress. In the latter
+case, one needs to send an email to that address in order to complete an action
+like subscribing.
+
+The information in these headers is used to generate an extra menuline on
+messages containing one or more of these headers to help users taking advantage
+of the features offered.
+
+
+Installation
+============
+
+As with other plugins, just uncompress the archive in the plugins
+directory, go back to the main directory, run configure and add the plugin.
+
+Questions/comments/flames/etc can be sent to
+ Thijs Kinkhorst <thijs@kinkhorst.com>
+
+
+Changes
+=======
+1.0
+ * Initial version
+1.1
+ * Added 'Reply to list' option
+ * Support for identities when sending mail
+ * Miscelaneous minor improvements
+1.2
+ * Fixed too greedy regexp; changed to PCRE.
+ * Fixed IMAP session id handling.
+
+
+Acknowledgements
+================
+I'd like to thank Peter Walker, Wouter Teepe and Jason Edwards for their
+useful contributions to this plugin.
--- /dev/null
+<?php
+/*
+ * mailout.php part of listcommands plugin
+ * last modified: 2002/01/12 by Thijs Kinkhorst
+ *
+ */
+
+chdir('..');
+include_once ('../src/validate.php');
+include_once ('../functions/page_header.php');
+include_once ('../src/load_prefs.php');
+
+displayPageHeader($color, $mailbox);
+
+?>
+<P>
+<TABLE align="center" width="75%" BGCOLOR="<?php echo $color[0]; ?>">
+<TR><TH BGCOLOR="<?php echo $color[9] . '">' . _("Mailinglist") . ' ' . _($action); ?></TH></TR>
+<TR><TD>
+<?php
+
+switch ( $action ) {
+case 'Help':
+ $out_string .= _("This will send a message to %s requesting help for this list. You will receive an emailed response at the address below.");
+ break;
+case 'Subscribe':
+ $out_string .= _("This will send a message to %s requesting that you will be subscribed to this list. You will be subscribed with the address below.");
+ break;
+case 'Unsubscribe':
+ $out_string = _("This will send a message to %s requesting that you will be subscribed to this list. It will try to unsubscribe the adress below.");
+}
+
+printf( $out_string, htmlspecialchars($send_to) );
+
+echo '<form method="POST" action="../../src/compose.php">';
+
+/*
+ * Identity support (RFC 2369 sect. B.1.)
+ *
+ * I had to copy this from compose.php because there doesn't
+ * seem to exist a function to get the identities.
+ */
+
+$defaultmail = htmlspecialchars(getPref($data_dir, $username, 'full_name'));
+$em = getPref($data_dir, $username, 'email_address');
+if ($em != '') {
+ $defaultmail .= htmlspecialchars(' <' . $em . '>') . "\n";
+}
+echo '<P><CENTER>' . _("From:");
+
+$idents = getPref($data_dir, $username, 'identities');
+if ($idents != '' && $idents > 1)
+{
+ echo ' <select name=identity>' . "\n" .
+ '<option value=default>' . $defaultmail;
+ for ($i = 1; $i < $idents; $i ++) {
+ echo '<option value="' . $i . '"';
+ if (isset($identity) && $identity == $i) {
+ echo ' SELECTED';
+ }
+ echo '>' . htmlspecialchars(getPref($data_dir, $username,
+ 'full_name' . $i));
+ $em = getPref($data_dir, $username, 'email_address' . $i);
+ if ($em != '') {
+ echo htmlspecialchars(' <' . $em . '>') . "\n";
+ }
+ }
+ echo '</select>' . "\n" ;
+
+}
+else
+{
+ echo $defaultmail;
+}
+?>
+<BR>
+<input type=hidden name="send_to" value="<?php echo htmlspecialchars($send_to); ?>">
+<input type=hidden name="subject" value="<?php echo htmlspecialchars($subject); ?>">
+<input type=hidden name="body" value="<?php echo htmlspecialchars($body); ?>">
+<input type=hidden name="mailbox" value="<?php echo htmlspecialchars($mailbox); ?>">
+<input type=submit name="send" value="<?php echo _("Send Mail"); ?>"><BR><BR></CENTER>
+</form>
+</TD></TR></TABLE>
+</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+<?php
+/*
+ * Listcommands plugin v1.2
+ *
+ * Implementation of RFC 2369 for SquirrelMail.
+ * When viewing a message from a mailinglist complying with this RFC,
+ * this plugin displays a menu which gives the user a choice of mailinglist
+ * commands such as (un)subscribe, help and list archives.
+ *
+ * last modified: 2002/01/20 by Thijs Kinkhorst
+ * please send bug reports to <thijs@kinkhorst.com>
+ *
+ */
+function squirrelmail_plugin_init_listcommands ()
+{
+ global $squirrelmail_plugin_hooks;
+
+ $squirrelmail_plugin_hooks['read_body_header']['listcommands'] = 'plugin_listcommands_menu';
+}
+
+
+function plugin_listcommands_menu () {
+
+ global $imapConnection, $passed_id, $color, $mailbox, $subject;
+
+ /* Array of commands we can deal with from the header. The Reply option is
+ * added later because we generate it using the Post information.
+ */
+ $fieldsdescr = array( 'Help' => _("Help"),
+ 'Unsubscribe' => _("Unsubscribe"),
+ 'Subscribe' => _("Subscribe"),
+ 'Post' => _("Post to the list"),
+ 'Archive' => _("List Archives"),
+ 'Owner' => _("Contact Listowner") );
+ $fields = array_keys ($fieldsdescr);
+ $fieldsdescr['Reply'] = 'Reply to the list';
+
+ $cmds = array();
+ $output = array();
+
+ $lfields = 'List-' . implode (' List-', $fields);
+
+ $sid = sqimap_session_id();
+ fputs ($imapConnection, "$sid FETCH $passed_id BODY.PEEK[HEADER.FIELDS ($lfields)]\r\n");
+ $read = sqimap_read_data ($imapConnection, $sid, true, $response, $emessage);
+
+ for ($i = 1; $i < count($read); $i++)
+ {
+ foreach ($fields as $field)
+ {
+ if ( preg_match("/^List-$field: *<(.+?)>/i", $read[$i], $match) )
+ {
+ $cmds[$field] = $match[1];
+ }
+ }
+ }
+
+ foreach ($cmds as $cmd => $url)
+ {
+ if ( eregi('mailto:(.+)', $url, $regs) )
+ {
+ $purl = parse_url($url);
+
+ if ( $cmd == 'Post' || $cmd == 'Owner' )
+ {
+ $url = 'compose.php?';
+ }
+ else
+ {
+ $url = '../plugins/listcommands/mailout.php?action=' . $cmd . '&';
+ }
+
+ $url .= 'mailbox=' . urlencode($mailbox) . '&send_to=' . $purl['path'];
+
+ if ( isset($purl['query']) )
+ {
+ $url .= '&' . $purl['query'];
+ }
+
+ $output[] = '<A HREF="' . $url . '">' . $fieldsdescr[$cmd] . '</A>';
+
+ if ( $cmd == 'Post' )
+ {
+ $url .= '&reply_subj=' . urlencode($subject) . '&reply_id=' . $passed_id;
+ $output[] = '<A HREF="' . $url . '">' . $fieldsdescr['Reply'] . '</A>';
+ }
+ }
+ elseif ( eregi('^(http|ftp)', $url) )
+ {
+ $output[] = '<A HREF="' . $url . '" TARGET="_blank">' . $fieldsdescr[$cmd] . '</A>';
+ }
+
+
+ }
+
+
+ if (count($output) > 0) {
+ echo "<tr><td BGCOLOR=\"$color[0]\" WIDTH=\"100%\" colspan=\"3\">".
+ '<SMALL>' . _("Mailinglist options:") . ' ' . implode (' | ', $output) .
+ '</SMALL>'.
+ '</td></tr>';
+ }
+
+}
+?>
\ No newline at end of file