我正在学习如何通过电子邮件授权注册用户的教程。我在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>
答案 0 :(得分:1)
您可以将phpmailer用于smtp邮件
http://code.google.com/a/apache-extras.org/p/phpmailer/wiki/UsefulTutorial
答案 1 :(得分: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
的完整路径。
答案 2 :(得分:0)
你正确配置smtp。你提供密码和用户名。
您可以浏览以下链接。
http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm
答案 3 :(得分:0)
我确信如果您使用的是gmail服务器,则需要进行正确的身份验证。
Google弹出了一些看似可能有用的内容How to Send Email from a PHP Script Using SMTP Authentication