zoukankan      html  css  js  c++  java
  • php 发送邮件

    php我们可以使用系统的mail函数去发送邮件 但是需要配置一下邮件环境 这里选择使用PHPMailer  这样比较方便

    首先下载PHPMailer:https://github.com/Synchro/PHPMailer

    然后将下载好的文件夹解压放到根目录下即可

    然后调用mail函数发送邮件:

    比如:

    <?php
    
    $to = "542633273@qq.com";
    $subject = "Test mail";
    $message = "Hello! This is a dsdsimple email message.";
    $from = "542633273@qq.com";
    $headers = "From: $from";
    mail($to,$subject,$message,$headers);
    echo "Mail Sent.";
    
    ?>

    --------------------------更新:上面的方法虽然简单方便,但是有个问题就是不稳地,有时候发送到垃圾邮箱里,有时候收不到邮件,所以不太实用.---------------------------

    以下方法,主要是使用了一个障眼法,即发件人邮箱与收件人邮箱都是自己设定的,而真正的发件人邮箱是以内容的形式发送过去的,即用户在填写内容和自己邮箱信息后点击发送按钮,后台真正是通过我自己好邮箱A发送到我自己的邮箱B的  只不过用户真正有邮箱会通过内容的形式反映出来.这样做可以保证邮件的稳定性以及不会被当做垃圾邮件处理

        /**
         * 注:本邮件类都是经过我测试成功了的,如果大家发送邮件的时候遇到了失败的问题,请从以下几点排查:
         * 1. 用户名和密码是否正确;
         * 2. 检查邮箱设置是否启用了smtp服务;
         * 3. 是否是php环境的问题导致;
         * 4. $smtp->debug = false改为true,可以显示错误信息,然后可以复制报错信息到网上搜一下错误的原因;
         * 5. 如果还是不能解决,可以访问:http://www.daixiaorui.com/read/16.html#viewpl 
         *    下面的评论中,可能有你要找的答案。
         */
    
        require_once "email.class.php";
        //******************** 配置信息 ********************************
        $smtpserver = "smtp.126.com";//SMTP服务器
        $smtpserverport =25;//SMTP服务器端口
        $smtpusermail = "nnnnnnn@126.com";//发件人邮箱
        $smtpemailto = "mmmmmmm@126.com";//发送给谁
        $smtpuser = "nnnnnnn@126.com";//SMTP服务器的用户帐号
        $smtppass = "nnnnnnn";//SMTP服务器的用户密码
        $mailtitle = $subject ;//邮件主题
        $mailcontent = "<h3>".$message."</h3>"."<br/>"."<h5>发件人邮箱:"."$email"."<br/><br/><br/>"."发件人昵称:"."$name"."</h5>";//邮件内容
        $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
        //************************ 配置信息 ****************************
        $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
        $smtp->debug = false;//是否显示发送的调试信息
        $state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);
    
            if($state==""){
                echo"<br/><br/><br/><br/><br/><br/><br/><br/><br/>";
                echo "<center><h1>邮件发送失败</h1></center>";
                echo "<center><h3>请检查邮箱是否正确!</h3></center>";
                echo "<center><h5><a href='../index.html'>马上返回</a></h5></cener>";
                exit();
            }else{
                echo"<br/><br/><br/><br/><br/><br/><br/><br/><br/>";
                echo "<center><h1>$name,已收到您的来信</h1></center>";
                echo "<center><h3>我会尽快回复的</h3></center>";
                echo "<center><h5><a href='../index.html'>马上返回</a></h5></cener>";
            }    
    email.class.php:
    <?php
    
        date_default_timezone_set('Asia/Shanghai');//设定时区东八区
    class smtp
    {
    /* Public Variables */
    
    var $smtp_port;
    
    var $time_out;
    
    var $host_name;
    
    var $log_file;
    
    var $relay_host;
    
    var $debug;
    
    var $auth;
    
    var $user;
    
    var $pass;
    
    /* Private Variables */ 
    var $sock;
    
    /* Constractor */
    
    function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
    
    {
    
    $this->debug = FALSE;
    
    $this->smtp_port = $smtp_port;
    
    $this->relay_host = $relay_host;
    
    $this->time_out = 30; //is used in fsockopen() 
    #
    
    $this->auth = $auth;//auth
    
    $this->user = $user;
    
    $this->pass = $pass;
    
    #
    
    $this->host_name = "localhost"; //is used in HELO command 
    $this->log_file = "";
    
    $this->sock = FALSE;
    
    }
    
    /* Main Function */
    
    function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
    
    {
    
    $mail_from = $this->get_address($this->strip_comment($from));
    
    $body = ereg_replace("(^|(
    ))(.)", "1.3", $body);
    
    $header = "MIME-Version:1.0
    ";
    
    if($mailtype=="HTML"){
    
    $header .= "Content-Type:text/html
    ";
    
    }
    
    $header .= "To: ".$to."
    ";
    
    if ($cc != "") {
    
    $header .= "Cc: ".$cc."
    ";
    
    }
    
    $header .= "From: $from<".$from.">
    ";
    
    $header .= "Subject: ".$subject."
    ";
    
    $header .= $additional_headers;
    
    $header .= "Date: ".date("r")."
    ";
    
    $header .= "X-Mailer:By Redhat (PHP/".phpversion().")
    ";
    
    list($msec, $sec) = explode(" ", microtime());
    
    $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">
    ";
    
    $TO = explode(",", $this->strip_comment($to));
    
    if ($cc != "") {
    
    $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
    
    }
    
    if ($bcc != "") {
    
    $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
    
    }
    
    $sent = TRUE;
    
    foreach ($TO as $rcpt_to) {
    
    $rcpt_to = $this->get_address($rcpt_to);
    
    if (!$this->smtp_sockopen($rcpt_to)) {
    
    $this->log_write("Error: Cannot send email to ".$rcpt_to."
    ");
    
    $sent = FALSE;
    
    continue;
    
    }
    
    if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
    
    $this->log_write("E-mail has been sent to <".$rcpt_to.">
    ");
    
    } else {
    
    $this->log_write("Error: Cannot send email to <".$rcpt_to.">
    ");
    
    $sent = FALSE;
    
    }
    
    fclose($this->sock);
    
    $this->log_write("Disconnected from remote host
    ");
    
    }
    
    return $sent;
    
    }
    
    /* Private Functions */
    
    function smtp_send($helo, $from, $to, $header, $body = "")
    
    {
    
    if (!$this->smtp_putcmd("HELO", $helo)) {
    
    return $this->smtp_error("sending HELO command");
    
    }
    
    #auth
    
    if($this->auth){
    
    if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {
    
    return $this->smtp_error("sending HELO command");
    
    }
    
    if (!$this->smtp_putcmd("", base64_encode($this->pass))) {
    
    return $this->smtp_error("sending HELO command");
    
    }
    
    }
    
    #
    
    if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) {
    
    return $this->smtp_error("sending MAIL FROM command");
    
    }
    
    if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) {
    
    return $this->smtp_error("sending RCPT TO command");
    
    }
    
    if (!$this->smtp_putcmd("DATA")) {
    
    return $this->smtp_error("sending DATA command");
    
    }
    
    if (!$this->smtp_message($header, $body)) {
    
    return $this->smtp_error("sending message");
    
    }
    
    if (!$this->smtp_eom()) {
    
    return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
    
    }
    
    if (!$this->smtp_putcmd("QUIT")) {
    
    return $this->smtp_error("sending QUIT command");
    
    }
    
    return TRUE;
    
    }
    
    function smtp_sockopen($address)
    
    {
    
    if ($this->relay_host == "") {
    
    return $this->smtp_sockopen_mx($address);
    
    } else {
    
    return $this->smtp_sockopen_relay();
    
    }
    
    }
    
    function smtp_sockopen_relay()
    
    {
    
    $this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."
    ");
    
    $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
    
    if (!($this->sock && $this->smtp_ok())) {
    
    $this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."
    ");
    
    $this->log_write("Error: ".$errstr." (".$errno.")
    ");
    
    return FALSE;
    
    }
    
    $this->log_write("Connected to relay host ".$this->relay_host."
    ");
    
    return TRUE;;
    
    }
    
    function smtp_sockopen_mx($address)
    
    {
    
    $domain = ereg_replace("^.+@([^@]+)$", "1", $address);
    
    if (!@getmxrr($domain, $MXHOSTS)) {
    
    $this->log_write("Error: Cannot resolve MX "".$domain.""
    ");
    
    return FALSE;
    
    }
    //专注与php学习 http://www.daixiaorui.com 欢迎您的访问
    
    foreach ($MXHOSTS as $host) {
    
    $this->log_write("Trying to ".$host.":".$this->smtp_port."
    ");
    
    $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
    
    if (!($this->sock && $this->smtp_ok())) {
    
    $this->log_write("Warning: Cannot connect to mx host ".$host."
    ");
    
    $this->log_write("Error: ".$errstr." (".$errno.")
    ");
    
    continue;
    
    }
    
    $this->log_write("Connected to mx host ".$host."
    ");
    
    return TRUE;
    
    }
    
    $this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")
    ");
    
    return FALSE;
    
    }
    
    function smtp_message($header, $body)
    
    {
    
    fputs($this->sock, $header."
    ".$body);
    
    $this->smtp_debug("> ".str_replace("
    ", "
    "."> ", $header."
    > ".$body."
    > "));
    
    return TRUE;
    
    }
    
    function smtp_eom()
    
    {
    
    fputs($this->sock, "
    .
    ");
    
    $this->smtp_debug(". [EOM]
    ");
    
    return $this->smtp_ok();
    
    }
    
    function smtp_ok()
    
    {
    
    $response = str_replace("
    ", "", fgets($this->sock, 512));
    
    $this->smtp_debug($response."
    ");
    
    if (!ereg("^[23]", $response)) {
    
    fputs($this->sock, "QUIT
    ");
    
    fgets($this->sock, 512);
    
    $this->log_write("Error: Remote host returned "".$response.""
    ");
    
    return FALSE;
    
    }
    
    return TRUE;
    
    }
    
    function smtp_putcmd($cmd, $arg = "")
    
    {
    
    if ($arg != "") {
    
    if($cmd=="") $cmd = $arg;
    
    else $cmd = $cmd." ".$arg;
    
    }
    
    fputs($this->sock, $cmd."
    ");
    
    $this->smtp_debug("> ".$cmd."
    ");
    
    return $this->smtp_ok();
    
    }
    
    function smtp_error($string)
    
    {
    
    $this->log_write("Error: Error occurred while ".$string.".
    ");
    
    return FALSE;
    
    }
    
    function log_write($message)
    
    {
    
    $this->smtp_debug($message);
    
    if ($this->log_file == "") {
    
    return TRUE;
    
    }
    
    $message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
    
    if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {
    
    $this->smtp_debug("Warning: Cannot open log file "".$this->log_file.""
    ");
    
    return FALSE;;
    
    }
    
    flock($fp, LOCK_EX);
    
    fputs($fp, $message);
    
    fclose($fp);
    
    
    return TRUE;
    
    }
    
    
    function strip_comment($address)
    
    {
    
    $comment = "([^()]*)";
    
    while (ereg($comment, $address)) {
    
    $address = ereg_replace($comment, "", $address);
    
    }
    
    
    return $address;
    
    }
    
    
    function get_address($address)
    
    {
    
    $address = ereg_replace("([ 	
    ])+", "", $address);
    
    $address = ereg_replace("^.*<(.+)>.*$", "1", $address);
    
    return $address;
    
    }
    
    function smtp_debug($message)
    
    {
    
    if ($this->debug) {
    
    echo $message;
    
    }
    
    }
    
    }
    
    ?>
    View Code
  • 相关阅读:
    剑指 Offer——13. 调整数组顺序使奇数位于偶数前面
    剑指 Offer——3. 从尾到头打印链表
    剑指 Offer——2. 替换空格
    剑指 Offer——1. 二维数组中的查找
    LeetCode 905. Sort Array By Parity 按奇偶校验排列数组
    LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
    SSH 代码笔记
    anaconda3安装caffe
    opencv多版本安装
    人脸文章与数据库
  • 原文地址:https://www.cnblogs.com/gaoxiaoniu/p/5792891.html
Copyright © 2011-2022 走看看