Re: problem with mailto-links

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 .= '&amp;' . $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\?&=,()]+)?(?:&amp;(?: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


[Index of Archives]     [Video For Linux]     [Yosemite News]     [Yosemite Photos]     [gtk]     [KDE]     [Cyrus SASL]     [Gimp on Windows]     [Steve's Art]     [Webcams]

  Powered by Linux