初学PHP一段时间,发现PHP比J2EE框架简单很多,同JAVA相比,它是一门极弱的语言,类似于Javascript.PHP不仅在语法上较JAVA来的简单的多,同时其本身还提供了很多开源的框架,J2EE虽然本身也有经典级(JSF+EJB+JPA)和轻量级(STRUCTS+SPRING+HIBERNATE)两种类型框架,为开发者提供了很多便利,但其也带来了很多劣势,比如经典级框架同轻量级框架同时都存在着配置环境复杂,很多初学的人往往会被环境配置弄得头晕而放弃了对框架的兴趣,还有框架由于是被别人已经写好了的,所以其灵活性肯定不如自己写来的灵活。比如Structs提供的上传表单同Action数据banding,其只适用于表单中只有一个submit的情况,如果有多个submit还是得通过javascript来控制,所以一般有经验的开发者不经常使用Structs本身的标签以及action banding。
今天研究了一下php发送邮件,在W3C中对于PHP的讲解中关于email的部分内容较少,其是通过自身的email()函数来实现邮件发送,这种方式虽然只需要通过简单的语句便可以实现,如下:
$to = "heartchaincxj@163.com"; $subject = "Test"; $message = "This is a test mail!"; ini_set('SMTP','smtp.163.com'); ini_set('smtp_port',25); ini_set('sendmail_from',"sinllychenfjnp@163.com" mail($to,$subject,$message);
当然也可以将
ini_set('SMTP','smtp.163.com'); ini_set('smtp_port',25); ini_set('sendmail_from',sinllychenfjnp@163.com);
通过配置php.ini.但这样运行之后会出现如下错误:SMTP server response:553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S21301220947.错误的原因是说SMTP服务器需要验证信息,百度了一下发现很多人出现了类似的问题,究其原因是因为mail()函数使用需要一台无需SMTP验证就可以发信的邮件服务器。这种方式对服务器本身做了一些限制,不太适合开发。
对于PHP发送邮件实现,普遍使用的是通过第三方的框架PHPMailer来实现。PHPMailer是一个开源的PHP发送邮件的框架,由一个外国人编写。在PHP邮件发送上非常好用,无需SMTP服务器也无需在PHP.ini文件里面配置信息。PHPMailer可以到http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list下载。解压之后,我们将class.phpmailer.php,class.pop3.php,class.smtp.php.放到当前工程路径下面,这里我通过封装一个方法来实现发送邮件的功能。代码如下:
function sendmail($to,$subject = "",$body = ""){ //$to 表示收件人地址 $subject 表示邮件标题 $body表示邮件正文 date_default_timezone_set("Asia/Shanghai");//设定时区东八区 require_once('class.phpmailer.php'); include("class.smtp.php"); $mail = new PHPMailer(); //new一个PHPMailer对象出来 $body = eregi_replace("[\]",'',$body); //对邮件内容进行必要的过滤 $mail->CharSet ="UTF-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码 $mail->IsSMTP(); // 设定使用SMTP服务 $mail->SMTPDebug = 1; // 启用SMTP调试功能 // 1 = errors and messages // 2 = messages only $mail->SMTPAuth = true; // 启用 SMTP 验证功能 $mail->SMTPSecure = "ssl"; // 安全协议 $mail->Host = "smtp.163.com"; // SMTP 服务器 $mail->Port = 465; // SMTP服务器的端口号 $mail->Username = "sinllychenfjnp"; // SMTP服务器用户名 $mail->Password = "123456"; // SMTP服务器密码 $mail->SetFrom('sinllychenfjnp@163.com', 'sinllychen'); $mail->AddReplyTo("邮件回复地址,如admin#jiucool.com #换成@","邮件回复人的名称"); $mail->Subject = $subject; $mail->AltBody = "To view the message, please use an HTML compatible email viewer! - From www.jiucool.com"; // optional, comment out and test $mail->MsgHTML($body); $address = $to; $mail->AddAddress($address, "收件人名称"); //$mail->AddAttachment("images/phpmailer.gif"); // attachment //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!恭喜,邮件发送成功!"; } }
在正文中我只需要通过
sendmail($to,$subject,$content);
便可以成功发送邮件。