Author Topic: Please enter at least one recipient  (Read 10707 times)

Offline DaLazernet

  • Newbie
  • *
  • Posts: 2
Please enter at least one recipient
« on: January 09, 2010, 01:52:07 AM »
I've searched everywhere and haven't found anything quite relating to this...

We are switching to Roundcube from Squirrelmail, and in our current SM installation (call it a glitch or whatever), all of our users can simply type the local account name in the Recipient/To: field to send to anyone on the same system.  This seems logical, but RC gives the error message of "Please enter at least one recipient" if you simply try to send to local accounts without filling in the @webhost.org domain portion...

I've snooped around, and have found an email_check function that looks for valid characters and an @ sign, etc etc.  The best I can determine is that it automatically removes any entries in the Recipient field that are not valid and proceeds to send the email to the rest -- or in this case, removes all of them since none were typed with an @webhost.org domain trailing the local account...  Is there a way to have it automatically place an @webhost.org at the end of any non-fully entered email address to "attempt" to deliver it locally?  I'm all for enforcing the standards, but with 800+ email users used to sending a quick mail to "joe" by just typing that in as the recipient name and having it delivered properly to joe@webhost.org, well -- its not only a hard to break habit, but a real time saver!

We're on 0.3.1... the stable release.  Many thanks - I really hope there's a simple way of "fixing" this... perhaps a line of code that pulls in the $rcmail_config['mail_domain'] and tags that onto the local account name to form a complete email and resume the checking process, succeeding from there?  I really love this product and this is our only "show stopper" aside from addressbook groups which are on their way in the next version...  

Thanks again for your time!

Offline DaLazernet

  • Newbie
  • *
  • Posts: 2
Please enter at least one recipient
« Reply #1 on: January 09, 2010, 11:48:52 AM »
To add to this... here's what I've found.  I'm thinking I need to change something with the // Check that there's one @ symbol... section, to have it, instead of returning false, alter the string to attach an @webhost.org ending... or the ending pulled in from the config file.

in roundcubemail/program/include/main.inc:

/**
 * E-mail address validation
 */
function check_email($email)
{
  // Check for invalid characters
  if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $email))
    return false;

  // Check that there's one @ symbol, and that the lengths are right
  if (!preg_match('/^([^@]{1,64})@([^@]{1,255})$/', $email, $email_array))
    return false;

  // Check local part
  $local_array = explode('.', $email_array[1]);
  foreach ($local_array as $local_part)
    if (!preg_match('/^(([A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+)|("[^"]+"))$/', $local_part))
      return false;

  // Check domain part
  if (preg_match('/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/', $email_array[2])
      || preg_match('/^\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\]$/', $email_array[2]))
    return true; // If an IP address
  else {
    // If not an IP address
    $domain_array = explode('.', $email_array[2]);
    if (sizeof($domain_array) < 2)
      return false; // Not enough parts to be a valid domain

    foreach ($domain_array as $domain_part)
      if (!preg_match('/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]))$/', $domain_part))
        return false;

    if (!rcmail::get_instance()->config->get('email_dns_check'))
      return true;

    if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && version_compare(PHP_VERSION, '5.3.0', '<'))
      return true;

    // find MX record(s)
    if (getmxrr($email_array[2], $mx_records))
      return true;

    // find any DNS record
    if (checkdnsrr($email_array[2], 'ANY'))
      return true;
  }

  return false;
}