On Nov 27, 2007 3:27 AM, Paul Lesniewski <paul@xxxxxxxxxxxxxxxx> wrote: > > On Nov 27, 2007 2:46 AM, Paul Lesniewski <paul@xxxxxxxxxxxxxxxx> wrote: > > > > On Nov 27, 2007 1:24 AM, Pascal Maes <pascal.maes@xxxxxxxxxxxxxx> wrote: > > > > > > Le 27-nov.-07 à 02:59, Paul Lesniewski a écrit : > > > > > > > > > > On Nov 9, 2007 12:14 AM, Pascal Maes <pascal.maes@xxxxxxxxxxxxxx> > > > > wrote: > > > >> > > > >> Le 15 janv. 07 à 06:31, Jonathan Angliss a écrit : > > > >> > > > >>> -----BEGIN PGP SIGNED MESSAGE----- > > > >>> Hash: SHA1 > > > >>> > > > >>> Hi Pål, > > > >>> On Monday, December 25, 2006, Pål wrote: > > > >>>> I have a helpdesk system which sends out mail. Some of the mail > > > >>>> contains a mailto link like this one: > > > >>> > > > >>>> For status on your request, click the link below: > > > >>>> mailto:helpdesk@xxxxxxxxxxxx?subject=Status&body=52667668 > > > >>> > > > >>>> Squirrelmail will not make the link correct, as only > > > >>>> helpdesk@xxxxxxxxxxxx is recognised and not the subject info. When > > > >>>> the reader clicks the link the address helpdesk@xxxxxxxxxxxx is put > > > >>>> in the TO-field, but the subject is missing. > > > >>> > > > >>>> Anyone who knows how to fix this? > > > >>> > > > >>>> Running SM 1.4.4.1 > > > >>> > > > >>>> I guess the helpdesk system is badly written as it expects mail to > > > >>>> be read in Outlook, and not web mail readers like SM. > > > >>> > > > >>> I believe the specs say that subject, is allowed, not sure on body > > > >>> though. If you upgrade to 1.4.9a, and try again, this should > > > >>> work, at > > > >>> least the subject. An upgrade should be in order anyway as 1.4.4 is > > > >>> known to have security issues. > > > >>> > > > >>> > > > >> > > > >> I have the same problem with version 1.4.11 > > > > > > > > Thanks for the report. The mailto: functionality was in fact broken > > > > again. I just fixed it in 1.4.12 and 1.5.2. You might wait a day and > > > > then get a snapshot download of 1.4.12 and it should work again. The > > > > instructions on how to make mailto: links work are also updated and > > > > hopefully more helpful. See the contrib directory in the SquirrelMail > > > > package or this: > > > > > > > > http://squirrelmail.org/wiki/WindowsMailto > > > > > > > > If you continue to experience problems, please let us know. > > > > > > > > > > > > I have downloaded the version 1.4.12 [SVN] (Checked out revision > > > 12786.) but the problem remains. > > > See the picture in attachment. > > > > > > I'm afraid that the problem is not realy related to <http://squirrelmail.org/wiki/WindowsMailto > > > >. > > > It's interesting to know that we can jump directly to SquirrelMail by > > > clicking on a mailto link on a web page, but the problem here is that > > > the mailto link is broken in SquirreMail and because of that if we > > > click onto the link, we don't get what we want. > > > In the case of the picture, clicking on the first mailto link, open a > > > compose page whith the recipient but not the subject. > > > > Looks to me like you are viewing a message in plain text. In such a > > format, you will never get more than the email address being > > highlighted. If you want a mailto: link to be clickable, you need to > > have a mail sent in HTML format, and make sure you are viewing it in > > HTML format yourself. However, currently, that seems to be broken > > too. > > This is now fixed (patch also included below), however, the link is > currently displayed as a mailto: link instead of a link to the SM > compose screen. I will look at fixing that later. If anyone else can > look at it and create a patch, contributions always welcome. This is now fixed as well. Patch is below (you still need to apply the one here that is quoted from my previous email on this thread) =================================================================== > --- branches/SM-1_4-STABLE/squirrelmail/functions/mime.php > 2007-11-27 09:12:05 UTC (rev 12787) > +++ branches/SM-1_4-STABLE/squirrelmail/functions/mime.php > 2007-11-27 11:20:55 UTC (rev 12788) > @@ -1704,6 +1704,7 @@ > $aUrl = parse_url($attvalue); > if (isset($aUrl['scheme'])) { > switch(strtolower($aUrl['scheme'])) { > + case 'mailto': > case 'http': > case 'https': > case 'ftp': > Index: functions/mime.php =================================================================== --- functions/mime.php (revision 12788) +++ functions/mime.php (working copy) @@ -2181,9 +2181,15 @@ * * @param $body the body of the message * @param $id the id of the message + * @param boolean $take_mailto_links When TRUE, converts mailto: links + * into internal SM compose links + * (optional; default = TRUE) * @return a string with html safe to display in the browser. */ -function magicHTML($body, $id, $message, $mailbox = 'INBOX') { +function magicHTML($body, $id, $message, $mailbox = 'INBOX', $take_mailto_links =true) { + + // require_once(SM_PATH . 'functions/url_parser.php'); // for $MailTo_PReg_Match + global $attachment_common_show_images, $view_unsafe_images, $has_unsafe_images; /** @@ -2335,6 +2341,59 @@ if (strpos($trusted,$secremoveimg)){ $has_unsafe_images = true; } + + // we want to parse mailto's in HTML output, change to SM compose links + // this is a modified version of code from url_parser.php... but Marc is + // right: we need a better filtering implementation; adding this randomly + // here is not a great solution + // + if ($take_mailto_links) { + // parseUrl($trusted); // this even parses URLs inside of tags... too aggressive + global $MailTo_PReg_Match; + $MailTo_PReg_Match = '/mailto:' . substr($MailTo_PReg_Match, 1) ; + if ((preg_match_all($MailTo_PReg_Match, $trusted, $regs)) && ($regs[0][0] != '')) { + foreach ($regs[0] as $i => $mailto_before) { + $mailto_params = $regs[10][$i]; + // get rid of any tailing quote since we have to add send_to to the end + // + if (substr($mailto_before, strlen($mailto_before) - 1) == '"') + $mailto_before = substr($mailto_before, 0, strlen($mailto_before) - 1); + if (substr($mailto_params, strlen($mailto_params) - 1) == '"') + $mailto_params = substr($mailto_params, 0, strlen($mailto_params) - 1); + + if ($regs[1][$i]) { //if there is an email addr before '?', we need to merge it with the params + $to = 'to=' . $regs[1][$i]; + if (strpos($mailto_params, 'to=') > -1) //already a 'to=' + $mailto_params = str_replace('to=', $to . '%2C%20', $mailto_params); + else { + if ($mailto_params) //already some params, append to them + $mailto_params .= '&' . $to; + else + $mailto_params .= '?' . $to; + } + } + + $url_str = preg_replace(array('/to=/i', '/(?<!b)cc=/i', '/bcc=/i'), array('send_to=', 'send_to_cc=', 'send_to_bcc='), $mailto_params); + + // we'll already have target=_blank, no need to allow comp_in_new + // here (which would be a lot more work anyway) + // + global $compose_new_win; + $temp_comp_in_new = $compose_new_win; + $compose_new_win = 0; + $comp_uri = makeComposeLink('src/compose.php' . $url_str, $mailto_before); + $compose_new_win = $temp_comp_in_new; + + // remove <a href=" and anything after the next quote (we only + // need the uri, not the link HTML) in compose uri + // + $comp_uri = substr($comp_uri, 9); + $comp_uri = substr($comp_uri, 0, strpos($comp_uri, '"', 1)); + $trusted = str_replace($mailto_before, $comp_uri, $trusted); + } + } + } + return $trusted; } Index: functions/url_parser.php =================================================================== --- functions/url_parser.php (revision 12767) +++ functions/url_parser.php (working copy) @@ -37,6 +37,15 @@ $Email_RegExp_Match = '[0-9a-z]([-_.+]?[0-9a-z])*(%' . $Host_RegExp_Match . ')?@' . $Host_RegExp_Match; +/** + * rfc 2368 (mailto URL) preg_match() regexp + * @link http://www.ietf.org/rfc/rfc2368.txt + * @global string MailTo_PReg_Match the encapsulated regexp for preg_match() + */ +global $MailTo_PReg_Match; +$Mailto_Email_RegExp = '[0-9a-z%]([-_.+%]?[0-9a-z])*(%' . $Host_RegExp_Match . ')?@' . $Host_RegExp_Match; +$MailTo_PReg_Match = '/((?:' . $Mailto_Email_RegExp . ')*)((?:\?(?:to|cc|bcc|subject|body)=[^\s\?&=,()]+)?(?:&(?:to|cc|bcc|subject|body)=[^\s\?&=,()]+)*)/i'; + function parseEmail (&$body) { global $color, $Email_RegExp_Match, $compose_new_win; $sbody = $body; ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ ----- squirrelmail-users mailing list Posting guidelines: http://squirrelmail.org/postingguidelines List address: squirrelmail-users@xxxxxxxxxxxxxxxxxxxxx List archives: http://news.gmane.org/gmane.mail.squirrelmail.user List info (subscribe/unsubscribe/change options): https://lists.sourceforge.net/lists/listinfo/squirrelmail-users