2016-07-27 27 views
0

我有一個包含用戶的電子郵件,並自動生成用戶名數據庫的電子郵件,我必須在用戶輸入自己的電子郵件找回自己的用戶名形式,這裏是我的代碼試圖發送用戶名使用PHP

<html> 
<body> 
    <form method="post" action="retrievedetails.php"> 
    <p><label for="email">Email:</label> 
    <input name="email" type="text"/> 
    </p> 
    <input type="submit" name="submit" value="submit"/> 
    </form> 

<?php 
session_start(); 
$connect=mysql_connect("localhost","dfarrelly","1234") or die("Could not connect to database"); 
mysql_select_db("game", $connect) or die("Couldn't find db"); 

    if(isset($_POST['submit'])) { 
     $email=$_POST['email']; 
     $email_check=mysql_query("SELECT user_name FROM details WHERE user_email='$email'"); 
     $name=mysql_num_rows($email_check); 
     $subject="Login Info"; 
     $message="Your username is .$name"; 
     $from="From: [email protected]"; 
     mail($email, $subject, $message, $from); 
     echo "your username has been emailed to you"; 
    } 
?> 
</body> 
</html> 

我沒有收到任何錯誤,我只是沒有收到電子郵件,任何人都可以幫助我?

+0

也許涉及到您的垃圾郵件? – Danielius

+0

在本地服務器上工作? – Dave

+1

此代碼開放給SQL注入攻擊:https://stackoverflow.com/documentation/php/275/using-a-database/2685/sql-injection-and-prevention –

回答

2

假設您尚未指定SMTP服務器,這是您無法發送電子郵件的原因。像谷歌這樣的公司擁有這些SMTP服務器,它們允許您作爲電子郵件服務客戶通過SMTP服務器接收和發送電子郵件。如果沒有訪問SMTP服務器,您將無法發送電子郵件。

解決方案是在您的php.ini中指定SMTP詳細信息,您可以通過Windows搜索或聚光燈(如果您在Mac上工作)找到這些詳細信息。

我推薦你使用PHPMailer,這使得使用f.e的SMTP細節變得更容易。您的個人Google郵件。

只是檢查接受答案的例子: Sending email with PHP from an SMTP server

+1

有可能運行您自己的SMTP服務器,您並不總是需要使用外部提供程序。只需安裝[這些]之一(https://en.wikipedia.org/wiki/List_of_mail_server_software#SMTP)。 – gregn3

+0

@ gregn3不知道這一點。 +1 – 2016-07-27 23:58:30

1

你應該永遠不要在你的SQL語句中盲目地使用表單的值。

$email=$_POST['email']; 
$email_check=mysql_query("SELECT user_name FROM details WHERE user_email='$email'"); 

您正在請求某人將一些非常討厭的SQL作爲電子郵件地址注入。

http://www.w3schools.com/sql/sql_injection.asp

除此之外,我認爲你應該檢查你的服務器可以發送電子郵件。 mail()只會將您的消息轉發到您的服務器用來發送電子郵件的任何地方。最有可能的是沒有設置,所以你不能發送電子郵件,直到修復。

0

展望由什麼PHP文件說的郵件功能和@BeAnonymous,你需要定義一個SMTP服務器。

我使用PEAR郵件通過PHP發送電子郵件。

此外,@Carl Casbolt說,你正在與你的表單直接交互數據庫,這是要求注入攻擊。考慮使用PDO的數據庫交互:

-1

你應該配置你的php.ini文件:你應該尋找[郵件功能]並添加有關您的郵件服務器的信息。對我來說,在UNIX上,它的工作原理和這裏的配置:

[郵件功能]

;僅適用於Unix。您也可以提供參數(默認值:「sendmail -t -i」)。 ; http://php.net/sendmail-path sendmail_path =/usr/sbin目錄/ sendmail的-t -i

;強制添加指定參數作爲額外參數 ;到sendmail二進制文件。這些參數將始終取代 的值; mail()的第5個參數,即使在安全模式下也是如此。 ; mail.force_extra_parameters =

;添加X-PHP原產腳本:將包括腳本,然後在文件名 mail.add_x_header的UID =在

0

,如果你是本地服務器上的「本地主機」,應先配置SMTP服務器的工作,否則這doens將工作,如果你在web服務器上工作,請檢查你的垃圾郵件框,郵件功能。爲了解決垃圾郵件問題,使用phpMailer而不是php的郵件功能。