1

新しい登録ユーザーにユーザー名を記載した確認メールを送信したい コードがあり、すべての詳細が mysql データベースに挿入されています 作業中ですが、登録ユーザーにメールが送信されません

<?php
$email=$_SESSION['email'];
if(!$_SESSION['email'] || $_SESSION['email']){
header('Location:login.php');
}
if(isset($_REQUEST['signup'])){
$signup=$_POST['signup'];   
$username=$_POST['username'];
$password=$_POST['password'];
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$gender=$_POST['gender'];
$datepicker=$_POST['datepicker'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$address=$_POST['address'];
$country=$_POST['country'];
$city=$_POST['city'];

$validemail = eregi("^[a-z0-9_-]+(\.[a-z0-9_-]+)*@([a-z0-9_-]+\.)*[a-z0-9_-]+\.[a-z]{2,}$", $email); //VALID EMAIL PATTERN

 //CHECKS IF ALL FIELDS HAVE BEEN FILLED
 if($username&&$password&&$fname&&$lname){
 //CHECKS IF EMAIL IS VALID
 if($validemail){
 $q = mysql_query("SELECT * FROM customers WHERE email='$email'");
 $r = mysql_fetch_assoc($q);
 $n = mysql_num_rows($q);
//CHECKS IF EMAIL ALREADY EXISTS IN THE DATABASE
if(!$n){
$q = mysql_query("SELECT * FROM customers WHERE username='$username'");
$r = mysql_fetch_assoc($q);
$n = mysql_num_rows($q);
//CHECKS IF USERNAME ALREADY EXISTS IN THE DATABASE
if(!$n){
//CHECKS IF THE PASSWORD AND CONFIRMATION PASSWORD MATCH
if($password){
//IF ALL CONDITIONS ARE TRUE, THE USER IS REGISTERED AND AN ACTIVATION KEY IS PROCESSED   AND SENT VIA EMAIL
$alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$length = 11;
for($i=0; $i<$length; $i++){
$ran = rand(0, strlen($alpha)-1);
$key .= substr($alpha, $ran, 1);
}
//SENDS EMAIL THAT TELLS THE USER TO ACTIVATE THE ACCOUNT
$activation = 'activation.php?key='.$key;
$your_email = 'non-reply@mydomain.com'; //CHANGE TO YOUR SETTINGS
$domain = $_SERVER["HTTP_HOST"]; //YOUR DOMAIN AND EXTENSION
$to = $email;
$subject = 'Activate Account';
$message = 'Welcome, '.$_POST['username'].'. You must activate your account via this message to log in. Click the following link to do so: http://'.$domain.'/'.$activation;
$headers = 'From: My Domain <'.$your_email.'@'.$domain.'>\r\n'; //MODIFY TO YOUR SETTINGS
$headers .= 'Content-type: text/html\r\n';
mail($to, $subject, $message, $headers);
}
}}}}

$sqlquery=mysql_query("INSERT INTO customers   VALUE('','$username','$password','$fname','$lname',
'$gender','$datepicker','$email','$phone','$address','$country','$city','','$key','')")or  die("Error");


 if ($sqlquery)
 {

 header('location:index.php?id=signup-confirmation');
 }
 else {
 header('location:signup.php');
 }
 } 

 ?>
4

2 に答える 2

0

まず、$to は期待どおりにエコーアウトしますか?

2 番目に確認することは、mail() の設定がサーバーの php.ini ファイルで正しく設定されているかどうかを確認するか、mail() を実行する前にさまざまな mail() パラメータに対して ini_set を呼び出して確認することです。

サーバーを所有していない場合は、所有者に連絡して、mail() が有効になっているかどうか尋ねてください。

一部のホストでは、スパムなどを防ぐために無効にされています。PEAR メールは、認証などをサポートしているため、mail() よりもはるかに好まれます。

于 2013-03-02T08:34:55.520 に答える
0

2 つの問題:

まず、ヘッダーの@文字数が多すぎます。From:あなたがやる:

$your_email = 'non-reply@mydomain.com';

そして、あなたはそうします

$headers = 'From: My Domain <'.$your_email.'@'.$domain'>\r\n'

したがって、これは になりnon-reply@mydomain.com@$domainます。

次に、エスケープ シーケンスは単一引用符では解釈されない$headersため、 を割り当てるときは二重引用符を使用する必要があります。\r\n

于 2013-03-02T08:35:04.403 に答える