【问题标题】:PHP validate email addresses separated by a commaPHP验证用逗号分隔的电子邮件地址
【发布时间】:2013-10-25 20:22:20
【问题描述】:

有一个 PHP Mail 功能,可以将电子邮件发送到 MySQL 数据库中的地址。

在数据库中,电子邮件地址有多个时用逗号分隔。

我尝试过使用:

if(filter_var($email_to, FILTER_VALIDATE_EMAIL))

但这仅适用于一个电子邮件地址,我如何验证多个以逗号分隔的地址?

喜欢:

mail@domain.com,mail2@domain2.co.uk

这是我的电子邮件功能:

require_once "/usr/local/lib/php/Mail.php";

            $from = $email_from;
            $to = $email_to;
            $subject = $email_subject;
            $body = $email_body;

            $host = "mail.domain.co.uk";
            $username = "sending@domain.co.uk";
            $password = "*********";

            $headers = array ('From' => $from,
              'To' => $to,
              'Cc' => $cc,
              'Subject' => $subject,
              'Content-type' => 'text/html');
            $smtp = Mail::factory('smtp',
              array ('host' => $host,
             'auth' => true,
             'username' => $username,
             'password' => $password));

             $rec = $to.', '.$cc;

            $mail = $smtp->send($rec, $headers, $body);

如何验证 $to 和 $cc 中的逗号分隔值?

【问题讨论】:

    标签: php mysql email


    【解决方案1】:

    试试这个:

    foreach(explode(',', $sEmailAddresses) AS $sEmailAddress) {
       $bValid |= filter_var($sEmailAddress, FILTER_VALIDATE_EMAIL);
    }
    
    $sResult = ($bValid) ? 'Both are valid' : 'One of them are not';
    

    【讨论】:

      【解决方案2】:

      功能:

      function getValidEmails($email_list) {
          $valid_emails = array();
          if (-1 !== strpos($email_list, ',')) {
              $email_list = explode(',', $email_list);
              array_walk_recursive($email_list, function(&$email) {
                  $email = filter_var(trim($email), FILTER_VALIDATE_EMAIL);
                  if (false !== $email) {
                      $valid_emails[] = $email;
                  }
              });
          } else {
              $email = filter_var(trim($email_list), FILTER_VALIDATE_EMAIL);
              if (false !== $email) {
                  $valid_emails[] = $email;
              }
          }
          return $valid_emails;
      }
      

      用法:

      $valid_emails = getValidEmails('a@b.com,bbb@bbb,ccc@ddd.com');
      if (sizeof($valid_emails))
      {
          $to      = implode(',', $valid_emails);
          $subject = 'the subject';
          $message = 'hello';
          $headers = 'From: webmaster@example.com' . "\r\n" .
              'Reply-To: webmaster@example.com' . "\r\n" .
              'X-Mailer: PHP/' . phpversion() ."\r\n" .
              'MIME-Version: 1.0' . "\r\n" .
              'Content-type: text/html; charset=iso-8859-1' . "\r\n";
      
          mail($to, $subject, $message, $headers);
      }
      else {
          // validation failed for email list
      }
      

      此功能适用于单个电子邮件以及多个电子邮件,以逗号分隔。

      【讨论】:

        【解决方案3】:

        你可以试试

        $emails = explode(",", $email_to);
        $sendEmail = TRUE;
        
        foreach($emails as $email) {
           if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
               $sendEmail = FALSE;
               continue;
           }
        }
        
        if($sendEmail === TRUE) {
            //send email
        }
        

        【讨论】:

          【解决方案4】:

          您需要先将您的地址分开,然后逐个验证它们。

          使用explode() 获取地址数组

          // assuming $emails = 'mail@domain.com,mail2@domain2.co.uk'
          $emails_arr = explode( ',', $emails ); // use comma as separator
          

          现在循环遍历数组并应用您当前的逻辑

          foreach( $emails_arr as $email )
          {
            if(filter_var($email, FILTER_VALIDATE_EMAIL))
            {
              // do something
            }
          }
          

          【讨论】:

            【解决方案5】:

            首先使用逗号作为分隔符拆分电子邮件地址并分别验证。

            【讨论】:

              猜你喜欢
              • 2017-06-10
              • 2015-07-14
              • 2011-09-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多