用户名:  密码:   
您当前的位置:首页 > 网页设计 >  PHP > 

第21讲 电子邮件简介,win2003安装配置smtp和pop3的方法,发送邮件举例,带附件的邮件发送与接收例子

上次修改时间: 2016-03-17 21:45:20      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\PHP相关\      下一页

电子邮件简介,win2003安装配置smtp和pop3的方法,发送邮件举例,带附件的邮件发送与接收例子

21.1 电子邮件的原理
1) email简介,使用要有ISP提供的账户或信箱,收发,访问,格式user@server.com
2) 电子邮件的原理:发送和接收要遵循SMTP,POP3等协议以确保在不同系统间传输,SMTP负责发,POP3用于收

21.2 系统配置需求(SMTP和POP3服务器安装配置)
1) windows2003下安装系统自统自带的pop3和smtp服务
win2003下:控制面板——添加和删除程序——添加/删除windows组件,
勾选电子邮件服务。 //这步是装pop3,
应用程序服务器——详细信息——勾选IIS——详细信息——勾先SMTP Service //这步是smtp了

2)配置smtp服务器
开始——所有程序——管理工具——IIS服务管理器,展开节点,展开 默认SMTP服务器,
右击域——新建——域——别名——输入域名(输入tmoon.com)——完成
3)配置pop3服务器,pop协议第3个版本
管理工具——pop3服务,展开所有,点右边的新域,输入域名(输入sina.com),注:在pop3创建域sina.com时会自动在smtp下也创建这个
左边树中左边单击sina.com域——添加邮箱,输入邮箱名和密码  //这里是建的邮箱用户名和密码

21.3 应用PHP发送和接收电子邮件
1) 发送一个简单的电子邮件
a. 先在index.php页中设计一个表单填写发件人,收件人,邮件主题,邮件内容
b. 通过POST提交到send.php页处理,处理代码:
 $from=$_POST[from]; //获取发件人地址
 $to=$_POST[to]; //得到收件人地址
 $title=$_POST[title];  //得到邮件标题
 $content=$_POST[content];  //得到邮件内容

 $headers = "MIME-Version: 1.0\r\n";  //发送文件头信息,MIME邮件的版本为1.0
 $headers .= "Content-type:text/html; charset=gb2312\r\n"; //文件头内容为text/html方式,支持GB2312字符
 $headers .= "To: $to\r\n"; //文件头的收人地址
 $headers .= "Form:$from\r\n"; //文件头要加入的发件人地址
 if(@mail($to,$title, $content, $headers)) {  //使用mail函数发送邮件
  echo "<script>alert('邮件发送成功!');window.location.href='index.php';</script>";
 }
 else {
  echo "<script>alert('邮件发送失败');history.back();</script>"; //操作失败返回这句
 }

2) 发送带附件的电子邮件
a. 同上的index.php页再增加了一个浏览文件表单控件,用以上传附件
同样通过POST方式提交到send.php处理,代码:
 if($_POST[submit]!="" { //如果不为空表提交有表单信息
 $subject=$_POST[subject]; //得到邮件标题
 $mailbody=$_POST[mailbody]; //得到邮件内容
 $envelope["from"]= $_POST[fromuser]; //得到发件人
 $part1["type"] = TYPEMULTIPART; //设置服务器类型
 $part1["subtype"] = "mixed"; //设置服务器端口

 $part2["type"] = TYPETEXT; //设置服务器类型为文件型
 $part2["subtype"] = "plain"; 
 $part2["encoding"] = ENCBINARY; //设置邮件编码格式
 $part2["contents.data"] = "$mailbody\n\n\n\t"; //设置邮件存储位置
 
 $filename = $_FILES['upfile']['name'];  //获取附件名称
 if ($filename!="") { //如果附件不为空
 $file=$_FILES['upfile']'tmp_name']; //为附件命名
 $fp = @fopen($file, "r");  //以只读方式打开文件
 $contents = @fread($fp, @filesize($file));  //读取该文件及文件大小
 @fclose($fp); //关闭该文件
 
  if($_FILES['upfile']['type']) { //如果文件类型不为空
    $mimeType = $_FILES['upfile']['type']; //获取文件类型
  } else {
   $mimeType ="application/unknown"; //否则说明未打开该类型的文件
  }
  $part3["type"] = TYPEAPPLICATION;
  $part3["encoding"] = ENCBINARY;
  $part3["subtype"]= $mimeType; //获取邮件类型
  $part3["description"]= $filename;
  $part3["contents.data"]= $contents;
 }
 body[1] = $part1;
 body[2] = $part2;
 if($filename!="") {
  $body[3] = $part3;
 }
 $message=imap_mail_compose($envelope, $body);
 list($msgheader,$msgbody)=split("\r\n\r\n",$message,2);
 if(@imap_mail($_POST[touser],$subject,$msgbody,$msgheader)) {
  echo "<script>alert('邮件发送成功!');history.back();</script>";
 } else {
  echo "<script>alert('邮件发送失败!');history.back();</script>";
 }
 }

3) 接收带附件的电子邮件
a. 在index.php中设计一个表格用以显示接收邮件的主题,发件人,发件时间,大小
代码段一:
$check = imap_check($mbox);
$sum=$check->Nmsgs;
print_r(imap_search($mbox,"SEEN"));
if($sum<=0) {
代码段二:
} else {
 if($_GET[page]=="" || is_numeric($_GET[page]==false)) {
  $page=1;
 } else {
  $page=$_GET[page];
 }
 
 $pagesize=10;
 if($sum%$pagesize==0) {
  $totalpage=$sum/$pagesize;
 }else{
  $totalpage=ceil($sum/$pagesize);
 }
 
 $frompage=($page-1)*$pagesize+1;
 $topage=$frompage+$pagesize;
 if(($sum-$topage)<0) {
  $topage=$sum+1;
 }
 
 for ($i+$frompage;$i<$topage;$i++) {
  $obj=imap_headerinfo($mbox,$i);
段三:
if(strtolower(substr($obj->Subject,0,10))==strtolower("=?gb2312?B"))
 echo base64_decode(substr($obj->Subject,11,(strlen($obj->Subject)-13)));
else
 echo $obj->Subject;
其它:
<?php echo (obj->fromaddress); ?>
<?php
$array=getdate(strtotime($obj->date));
echo $array[year]."-".$array[mon]."-".$array[mday]."&nbsp;".$array[hours].":".$array[minutes];
?>
<?php
$size=$obj->Size;
if($size>=1024) {
 echo number_fromat(($size/1024),2)."&nbsp;KB";
}
elseif($size>1024*1024) {
 echo number_format(($size/(1024*1024)),2)."&nbsp;M";
}
elseif($size>1024*1024*1024) {
 echo number_format(($size/(1024*1024*1024)),2)."&nbsp;G";
}
elseif($size<1024) {
 echo ($size)."&nbsp;字节";
}
?>
<?php } ?>
<?php
if($page>=2) {
?> 
<?php
 }
 if($totalpage<=4 {
  for($j=1;$j<=$tatalpage;$j++) {
  echo "<a href=lookmail.php?page=".$j." class=a1>".$j."</a>&nbsp;";
  }
 }else{
  for($j=1;$<=4;$j++) {
  echo "<a href=lookmail.php?page=".$j." class=a1>".$j."</a>&nbsp;";
  }
?>
。。。。。。。。。
down.php页代码
session_start();
$id=$_GET[id];
$hostname=$_SESSION[host];
$username=$_SESSION[user];
$username=$_SESSION[pwd];
if(!$mbox=@imap_open("$hostname","$username","$userpwd")) {
 echo "<script>alert('请通过正确的途径登录本系统!');window.location.href='login.php';</script>";
 exit;
}
$structure=imap_fetchstructure($mbox,$id);
$array=$structure->parts;

if(($array[1]->dparameters[0]->value)!="") {
 $filename=$array[1]->daprameters[0]->value)!="")
}else{
 $filename=$array[1]->description;
}
if(strtolower(substr($filename,0,10))==strtolower("=?gb2312?B"))
 $filename=base64_decode(substr($filename,11,(strlen($filename)-13)));
header("Content-type:application/octet-stream");
header("Accept-ranges:bytes");
header("Accept-length:100");
header("Content-Disposition:attachment;filename=".$filename."");
$text=imap_fetchbody($mbox,$id,2);
echo imap_base64($text);
imap_close($mbox);
exit;