最后,我们来介绍如何发送邮件。该脚本程序中有多种方法可以完成此操作:用户可以发送一则新的邮件消息,回复或者转发邮件。我们来看看它们是如何工作的。
29.8.1 发送一则新消息
点击"New Message"按钮,用户可以选择发送一则新的邮件消息。这将触发"new-message"操作,该操作将执行index.php/case'New-Message'脚本中的如下代码:
index.php/case'new-message':
display_new_message_form($_SESSION['auth_user'],
$to,$cc,$subject,$body);
break;
新消息表单仅仅是一个供发送邮件用的表单,如图29-8所示。实际上,该图显示的是回复邮件而非新建邮件,但是用到的表单都是相同的。接下来,我们将了解如何转发和回复邮件。
图 29-8 你可以将邮件回复或转发给其他用户点击"Send Message"按钮将调用"send-message"操作,该操作将执行index.php脚本中的如下代码:
case'send-message':
if(send_message($to,$cc,$subject,$message)){
echo"<p style=/"padding-bottom:100px/">Message sent.</p>";
}else{
echo"<p style=/"padding-bottom:100px/">Could not send message.</p>";
}
以上代码调用了send_message函数,该函数真正执行邮件发送的操作。函数如程序清单29-12所示。
程序清单29-12 mail_fns.php的send_message函数——发送用户键入的消息的函数
function send_message($to,$cc,$subject,$message){
//send one email via PHP
if(!$conn=db_connect){
return false;
}
$query="select address from users where
username='".$_SESSION['auth_user']."'";
$result=$conn->query($query);
if(!$result){
return false;
}else if($result->num_rows==0){
return false;
}else{
$row=$result->fetch_object;
$other='From:'.$row->address;
if(!empty($cc)){
$other.="/r/nCc:$cc";
}
if(mail($to,$subject,$message,$other)){
return true;
}else{
return false;
}
}
}
可以看到,该函数使用了mail函数来发送邮件,但是,首先该函数将从数据库中载入用户的电子邮件地址,并将其设置在待发邮件的From域。