* @since 1.0 */ class CEmail { public static function getMailer(){ return Yii::$app->mailer; } public static function getMailOb($from,$to,$title,$content,$is_html=1){ if(!$from || !$to || !$title || !$content){ return false; } # 验证邮箱格式是否正确 if(!self::email_validation($from)){ return false; } # 验证邮箱格式是否正确 if(!self::email_validation($to)){ return false; } $m = self::getMailer()->compose() ->setFrom($from) ->setTo($to) ->setSubject($title); if($is_html){ $m->setHtmlBody($content); }else{ $m->setTextBody($content); } return $m; } # 1.发送一封邮件 # $from $to $title $content 不能为空。 public static function sendMail($from,$to,$title,$content,$is_html=1){ $m = self::getMailOb($from,$to,$title,$content,$is_html); if($m){ $m->send(); return true; } return false; } # 2.批量发送邮件 /* 参数:数组格式如下: $arr = [ [ 'from' =>'zqy234@126.com', 'to' =>'3727@gmail.com', 'title' =>'my111', 'content' =>'
111
', 'is_html' => 1, ], [ 'from' =>'zqy234@126.com', 'to' =>'terry@gmail.com', 'title' =>'to tototto', 'content' =>'hello ddd', 'is_html' => 0, ], ]; forece 代表多送多个邮件,其中一个邮件的格式或者数据为空的情况下,其他符合 标准的邮件是否发送 force=1,代表其他符合格式的邮件发送 force=0,如果某个邮件内容有问题,全部不发送。 */ public static function sendMultipleEmail($arr,$forece=1){ $messages = []; foreach ($arr as $one) { $from = isset($one['from']) ? $one['from'] : ''; $to = isset($one['to']) ? $one['to'] : ''; $title = isset($one['title']) ? $one['title'] : ''; $content = isset($one['content']) ? $one['content'] : ''; $is_html = isset($one['is_html']) ? $one['is_html'] : 0; $m = self::getMailOb($from,$to,$title,$content,$is_html); if(!$m){ if(!$forece){ #如果数据格式有问题,force为0,则全部不发送 return false; } }else{ $messages[] = $m; } } if(!empty($messages)){ $count = count($messages); self::getMailer()->sendMultiple($messages); # 返回发送的邮件的个数。 return $count; } return false; } # 3.验证邮箱格式是否正确 public static function email_validation($mail) { if($mail != '') { if(preg_match("/^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{2,5}$/", $mail)) { return true; } else { return false; } } else { return false; } } }