0

可能重复:
从 PHP 页面使用 GMail SMTP 服务器发送电子邮件

我正在关注如何通过电子邮件授权注册用户的教程。我在 SMTP 上遇到了一些麻烦。我不知道为什么,但脚本不会发送电子邮件。我不知道这是 SMTP 的问题还是什么。该教程来自 2009 年,因此它可能与最新版本的 php 不完全兼容。有没有人看到导致问题的任何东西?

 <?php
 echo "<h1>Register</h1>";

 $submit = filter_input(INPUT_POST, 'submit');
 //form data
 $fullname = strip_tags (filter_input(INPUT_POST, 'fullname'));
 $username = strtolower(strip_tags (filter_input(INPUT_POST, 'username')));
 $password = strip_tags(filter_input(INPUT_POST, 'password'));
  $repeatpassword = strip_tags(filter_input(INPUT_POST, 'repeatpassword'));
 $date = date("Y-m-d");
 $email = strtolower(strip_tags (filter_input(INPUT_POST, 'email')));

 if ($submit)
 {
 //open database
 $connect=mysql_connect("localhost","root","myrealpasswordwouldgohere");
 mysql_select_db("phplogin");

 $namecheck = mysql_query("SELECT username FROM users WHERE username='$username'" );
 $count = mysql_num_rows($namecheck);

 if($count!=0)
 {
 die("Username already taken, please choose another");
 }

 //check for existence
if($fullname&&$username&&$password&&$repeatpassword)
{
    if ($password==$repeatpassword)
    {
    //check char length of username and fullname
        if (strlen($username)>25||strlen($fullname)>25)
        {
        echo "Length of username or full name is too long!";
        }
        else
        {
        //check password length 
            if (strlen ($password)>25 || strlen ($password)<6)
            {
            echo "Password must be between 6 and 25 characters";
            }
            else
            {
             $password = md5($password);
             //register user    

            //generate random number
            $random = rand(23456789,98765432);


            $queryreg = mysql_query("INSERT INTO users VALUES ('','$fullname','$username','$password','$email','$date','$random','0')");
            die ("You have been registered! Check your email to activate your account to activate your account.");

            $lastid = mysql_insert_id();

            //send activation email
            $to = $email;
            $subject = "Activate your Account";
            $headers = "From: ryansinclair14@gmail.com";
            $server = "smtp.gmail.com";

            ini_set("SMTP","smtp.gmail.com");

            $body = "
            Hello $fullname,\n\n
            You need to activate you account with the link below:
            http://localhost/academy/loginsession/activate.php?id=$lastid&code=$random \n\n

            Thanks!
            ";

            //function to send email
            mail($to, $subject, $body, $headers);
            die("You have been registered! Check your email to activate your account.");


            }



        }





    }
    else echo "Your passwords do not match";


}
else echo "Please fill in <b>all</b> fields!";


 }


 ?>
 <p>
 <html>

      <form action='register.php' method='POST'>
<table>
    <tr>
        <td>
        Your full name:
        </td>
        <td>
        <input type='text' name='fullname' value='<?php echo $fullname;?>'>
        </td>

    </tr>

    <tr>
        <td>
        choose a username:
        </td>
        <td>
        <input type='text' name='username' value='<?php echo $username;?>'>
        </td>

    </tr>


    <tr>
        <td>
        Choose a password:
        </td> 
        <td>
        <input type='password' name='password'>
        </td>

    </tr>

    <tr>
        <td>
        Repeat your password:
        </td> 
        <td>
        <input type='password' name='repeatpassword'>
        </td>
    </tr>
    <tr>
        <td>
        Email:
        </td> 
        <td>
        <input type='text' name='email'>
        </td>


    </tr>

     <table>
     <p>
     <input type='submit' name='submit' value='Register'>

 </form>
4

4 回答 4

1

您可以将 phpmailer 用于 smtp 邮件

http://code.google.com/a/apache-extras.org/p/phpmailer/wiki/UsefulTutorial

于 2012-04-16T04:33:28.483 回答
1
<?php

    require_once "Mail.php";

    $from = "ryansinclair14@gmail.com";
    $to = "ryansinclair14@gmail.com";
    $subject = "Test";
    $body = "Hello World";

    $host = "ssl://smtp.gmail.com";
    $port = "465";
    $username = "ryansinclair14";
    $password = "PASSWORD";

    $headers = array ('From' => $from,
      'To' => $to,
      'Subject' => $subject);
    $smtp = Mail::factory('smtp',
      array ('host' => $host,
        'port' => $port,
        'auth' => true,
        'username' => $username,
        'password' => $password));

    $mail = $smtp->send($to, $headers, $body);

    if (PEAR::isError($mail)) {
      echo("<p>" . $mail->getMessage() . "</p>");
     } else {
      echo("<p>Message successfully sent!</p>");
     }

?>

尝试这个。可能需要包含Mail.php安装位置的完整路径。

于 2012-04-16T05:01:49.073 回答
0

您必须正确配置 smtp。您必须提供密码和用户名。

您可以通过以下链接。

http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm

于 2012-04-16T04:33:24.430 回答
0

我敢肯定,如果您使用的是 gmail 服务器,则需要正确进行身份验证。

谷歌弹出了一些看起来可能有用的东西How to Send Email from a PHP Script Using SMTP Authentication

于 2012-04-16T04:33:50.037 回答