还是帝国CMS
我发现帝国CMS本身的留言功能根本不够用,字段太少了,而且不能自定义,所以不再使用帝国默认的留言系统,自己用PHP写了一个小程序。
我用的是phpMailer
并不是最新的版本,只要能用就行了呗,管它新不新版呢。
这样简单的功能我感觉以后会有很多,所以就弄一个通用的接口吧,话不多说,直接上接口的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <?php date_default_timezone_set('Etc/UTC'); require_once 'PHPMailerAutoload.php'; header('Content-Type: text/json; charset=utf-8');
$to = $_POST['to'];
$to_name = $_POST['to_name'];
$subject = $_POST['subject'];
$body = $_POST['body'];
$mail = new PHPMailer; $mail->isSMTP(); $mail->Host = "smtp.example.com";
$mail->Port = 25; $mail->SMTPAuth = true; $mail->CharSet = "utf-8"; $mail->Username = "[email protected]"; $mail->Password = "password"; $mail->setFrom('[email protected]', '发件人显示名称'); if(is_string($to)){ $mail->addAddress($to, $to_name); }else if(is_array($to)){ for($i = 0; $i < count($to); $i++){ $mail->addAddress($to[$i], $to_name[$i]); } }else{ $mail->addAddress('[email protected]', '如果收件人Email为空,可以设置一个默认的收件人'); } $mail->Subject = $subject; $mail->msgHTML($body."<br /><br /><br />本邮件为系统自动发送,请勿直接回复。");
$mail->AltBody = "为了查看该邮件,请切换到支持 HTML 的邮件客户端"; if (!$mail->send()) { echo '{"errorCode": 101, "errorMsg": '.$mail->ErrorInfo.'}'; } else { echo '{"errorCode": 0, "errorMsg": "Message Sent!"}'; } ?>
|
这样就只需要POST过来4个参数就可以了。
使用这个端口的时候,可以这样操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php date_default_timezone_set('Etc/UTC'); header('Content-Type: text/json; charset=utf-8'); $to = array('[email protected]', '[email protected]'); $to_name = array('收件人1', '收件人2'); $subject = $_POST['title']; $body = $_POST['body'];
$post_data = array( 'to' => $to, 'to_name' => $to_name, 'subject' => $subject, 'body' => $body ); $url = 'API地址'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); $result = curl_exec($ch); curl_close($ch); echo $result; ?>
|
前端需要使用ajax提交数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var sendMail = function (data) { var index; $.ajax({ url: '/hanlder/handlemail.php', type: 'POST', data: data, beforeSend: function () { index = layer.msg('您的信息正在提交,请稍等……', { time: 60 * 1000 }); }, success: function (result) { layer.close(index); if (result.errorCode == 0) { layer.alert('提交成功,我们会及时与您取得联系,请耐心等待。', { icon: 6, title: '提示' }, function () { window.location = '/'; });
} else { layer.alert('系统出错,可以直接联系我们!', { icon: 2, title: '错误' }); } } }); }
|
前端使用了layui
,可以很方便的显示提示信息。
需要传递过来的参数就只有邮件的标题和邮件的正文就可以了(正文支持html标记)。
当然前端提交内容的时候,可能有一些危险的html代码,这就需要先过滤一下了。
这样接口就可以通用了,不同的页面,只需要修改前端和后端接收邮件的人就可以。
嗯,phpMailer还是挺方便的。