public function executeSendEmail(sfWebRequest $request) { $subject = $request->getParameter('subject'); $to = $request->getParameter('recipients'); $sender_email = $request->getParameter('sender_email'); $sender_name = $request->getParameter('sender_name'); $message = $request->getParameter('message'); $leg_ids = $request->getParameter('leg_ids'); $errors = array(); // validate recievers if (empty($to)) { $errors['email'][0] = 'please specify email address'; $this->getUser()->setFlash('error', 'Please specify email address!'); $this->redirect($request->getReferer()); } else { $recievers = explode(',', $to); $pat = '/^([^@\\s]+)@((?:[-a-z0-9]+\\.)+[a-z]{2,})$/i'; $full_pat = '/^([- a-z0-9]+)\\<(([^@\\s]+)@((?:[-a-z0-9]+\\.)+[a-z]{2,}))\\>$/i'; $emails = array(); foreach ($recievers as $reciever) { $reciever = trim($reciever); //if (empty($reciever)) { continue; } if (preg_match($full_pat, $reciever, $matches)) { $emails[$matches[2]] = $matches[1]; } elseif (preg_match($pat, $reciever, $matches)) { $emails[$matches[0]] = ''; } else { if (!isset($errors['email'])) { $errors['email'] = array(); } $errors['email'][] = $reciever . ' is unrecognizable email'; } } if (count($emails) < 1) { $errors['email'][0] = 'Please check email address'; $this->getUser()->setFlash('error', 'Please check email address!'); $this->redirect($request->getReferer()); } } // function checkEmail($email) { // if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-]) // ↪*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", // $email)){ // list($username,$domain)=split('@',$email); // if(!checkdnsrr($domain,'MX')) { // return false; // } // return true; // } // return false; // } // validate subject if (empty($subject)) { $errors['subject'] = 'subject required'; } // validate sender $v_email = new sfValidatorEmail(array(), array('invalid' => 'please specify email address')); try { if ($sender_email) { $sender_email = $v_email->clean($sender_email); } else { $sender_email = sfConfig::get('app_mailer_mail', '*****@*****.**'); } if (!$sender_name) { $sender_name = sfConfig::get('app_mailer_name', 'AngelFlight Test'); } } catch (sfValidatorError $e) { $errors['sender_email'] = $e->__toString(); $this->getUser()->setFlash('error', 'Please check sender email address!'); $this->redirect($request->getReferer()); } // catch errors if ($errors) { $this->mission_legs = MissionLegPeer::getByMissionLegIds($leg_ids); $this->email_templates = EmailTemplatePeer::getByPersonId($this->getUser()->getId()); } // attachments $files = array(); foreach ($request->getFiles() as $file) { if ($file['error'] != 0) { continue; } $files[] = array('path' => $file['tmp_name'], 'name' => $file['name']); } // add leg information if ($leg_ids) { $mission_legs = MissionLegPeer::getByMissionLegIds($leg_ids); $message .= '<hr/>' . $this->getComponent('mission', 'includedMissionsTemplate', array('mission_legs' => $mission_legs)); } # TODO queue emails instead of directly sending $this->getComponent('mail', 'missionToPilot', array('subject' => $subject, 'recievers' => $emails, 'sender' => array($sender_email => $sender_name), 'body' => $message, 'files' => $files)); $this->getUser()->setFlash('success', 'Bulk email have successfully queued!'); $this->redirect($request->getReferer()); }