PHP发送邮件

来源:互联网 发布:js随机数1到10 编辑:程序博客网 时间:2024/06/06 19:32

       最近闲来无事想写个php发送文件的网页程序,进过几次失败最后成功,遇到了很多坑,网上讲的比价简略,涉及的要点好多都没有讲到,在这里分享一下自己的经验,希望对各位读者有所帮助。
       php发送邮件有两种方式:1.通过php自带函数mail();2.php发送socket发送电子邮件。我使用的是第一种方式,通过mail函数,网上可以下载包含此函数的email.class.php文件。我使用的SMTP服务器是163邮箱的,直接点,上代码,如果你有代码却一直失败又找不到原因,请认真阅读后面的分析。
index.html`

<form action="sendmail.php" method="post">    <p>收件人<input type="text" name="toemail" /></p>    <p>标题<input type="text" name="title" /></p>    <p>内容<textarea name="content" cols="50" rows="5"></textarea></p>    <p><input type="submit" value="发送"  /></p></form>

sendmail.php

<?php    require_once "email.class.php";    //******************** 配置信息 ********************************    $smtpserver = "smtp.163.com";//SMTP服务器    $smtpserverport =25;//SMTP服务器端口    $smtpusermail = "你的163邮箱";//你注册的邮箱账号    $smtpemailto = $_POST['toemail'];//发送给谁    $smtpuser = "你的163邮箱";//同上面的注册的邮箱账号    $smtppass = "授权码(不同于账户密码)";//SMTP服务器的用户密码    $mailtitle = $_POST['title'];//邮件主题    $mailcontent = "<h1>".$_POST['content']."</h1>";//邮件内容    $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件    //************************ 配置信息 ****************************    $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.    $smtp->debug = true;//是否显示发送的调试信息    $state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);    echo "<div style='width:300px; margin:36px auto;'>";    if($state==""){        echo "对不起,邮件发送失败!请检查邮箱填写是否有误。";        echo "<a href='index.html'>点此返回</a>";        exit();    }    echo "恭喜!邮件发送成功!!";    echo "<a href='index.html'>点此返回</a>";    echo "</div>";?>

       sendmail.php的配置我们可以发现,需要一个已存在的邮箱。显然,通过这种方式发送邮件的工作流程大概是:php程序模拟登陆给出的用户邮箱向收件人发送邮件。我测试的时候发送失败,给出的错误Remote host returned “550 User has no permission”。我们来分析一下产生错误的原因:我们登陆邮箱时都是要使用特定的登陆入口,比如qq登陆邮箱有qq邮箱的网页、APP,一般情况下在第三方登陆邮箱都是不允许的。使用php程序发送邮件,这里的php程序就是一个第三方,那么怎么解决这个问题呢?
       邮箱都有一个SMPT设置,SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
      &nbsp当我们需要在第三方登陆邮箱的时候就要开启SMTP服务,否则都会拒绝登陆。开启时提示你设置邮箱的授权码,这就是我们在配置mail函数参数要用到的密码。另外可以开启qq的SMTP服务,这样就不用下载qq邮箱的APP可以直接使用手机自带的邮件APP来登陆qq邮箱。此时失败就是因为服务器拒绝登陆而引起的错误,使用mail函数发送邮件,就要确保你提供的邮箱开启了SMTP服务。如果提示邮件发送成功而没有收到邮件,可能是被放到垃圾箱了。另一种方式的邮件发送也会继续研究,欢迎关注共同学习!

0 0
原创粉丝点击