2012-07-30 87 views
2

我有一个表单,用户输入消息,并将消息发送给另一端的收件人。我多次尝试过这个脚本,搜集了教程,但我似乎无法找到问题所在。有任何想法吗?无法通过php发送邮件

HTML表单:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" > 
     <?php 
     if(isset($sent)) 
       echo 'Your message has been sent. '; ?> 
     <label for="Name">Name</label><br />     
     <input type="text" class="textbox" size="35" id="Name" name="Name" <?php if(isset($name)) echo "value=\"$name\"";?> /><br /> 
     <label for="Service">Service</label><br /> 
     <input type="text" size="35" class="textbox" id="Service" name="Service" <?php if(isset($subject)) echo"value=\"$subject\"";?> /><br /> 
     <label for="Email">Email</label><br /> 
     <input type="text" size="35" class="textbox" id="Email" name="Email" <?php if(isset($from)) echo"value=\"$from\""; ?> /><br />  
     <label for="message">Message</label><br /> 
     <textarea rows="95" cols="100" id="message" name="message"><?php if(isset($message)) echo"$message"; ?></textarea><br /> 
     <button type="submit">Send Message</button>    
</form> 

PHP:

if(isset($_POST['Name']) && isset($_POST['Email']) && isset($_POST['Service']) && isset($_POST['message'])) { 
    $name = $_POST['Name']; 
    $from = $_POST['Email']; 
    $subject = $_POST['Service']; 
    $to = "[email protected]"; 
    $message = $_POST['message']; 
    mysql_query("INSERT INTO `Contact`(`Name`, `Email`, `Message`, `Service`) VALUES('$name', '$from', '$message', '$subject')"); 
    $headers = "From:".$from; 
    if(mail($to,$subject,$message,$headers)) 
     $msgsent = true; 
} 

谢谢!

+0

你试过调试吗?你有没有检查邮件()是否工作?Var_dump($ msgsent)检查它是否工作。 – 2012-07-30 05:59:12

+0

你有邮件服务器设置吗? – asprin 2012-07-30 05:59:42

+0

@ Dr.Dan,是的我已经尝试过调试,并且我已经确认脚本不会发送,因为我将所有信息发送回 – Andrew 2012-07-30 06:01:18

回答

3

(道歉,因为这应该是一个评论,但它会在文本框中更容易)

首先,用以下代码进行调试:

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 'on'); 

if (mail('[email protected]', 'test', 'test')) { 
    echo 'Mail Sent'; 
} else { 
    echo 'Mail Failed'; 
} 

?> 

此脚本在发送电子邮件时会给你一个错误信息,以帮助你进行调试。


,但此评论的重要组成部分,是上述电子邮件的脚本是开放的垃圾邮件(以及SQL注入)。我会强烈鼓励您使用可用的功能/类之一,可以帮助您切断邮件脚本中的安全漏洞。

如果您决定自己开发自己的产品,那么请在将此脚本放到服务器上之前,先阅读有关垃圾邮件头注入的电子邮件。垃圾邮件发送者可以在发现这样一个打开的脚本时快速发送数千封电子邮件,他们会定期自动进行测试,因此您必须严密检查。

(和读了关于PHP数据库对象 - PDO - 在同一时间,以节省MySQL的注入)

+0

我想我会去创造我自己的只是一个挑战。我会研究这两个,谢谢!:D所以我尝试调试,但我得到的只是消息说“邮件发送”,但我没有收到任何消息。 – Andrew 2012-07-31 03:10:39

+0

在这种情况下,服务器上的邮件程序(通常为Linux的sendmail)接受了电子邮件。您需要调试为什么不发送邮件 - 转到最低级别(“邮件”)并从那里发送消息;打开日志记录以检查是否正在发送电子邮件;检查接收服务器(如果你有一个你可以控制的)来查看/为什么它可能会被拒绝等。PHP的位看起来很好 - 所以我认为你需要服务器论坛来帮助你进行下一步。 – Robbie 2012-07-31 04:46:11

0
  1. 您的服务提供商可能会阻止您的邮件。

  2. 如果您在专用的服务器,你可能需要配置一台邮件服务器

感谢

Sreeraj

0

使用此方法 这是剂量不需要任何smpt连接php电子邮件的脚本

<?php 
$to = "[email protected]"; 
$subject = "Test mail"; 
$message = "Hello! This is a simple email message."; 
$from = "[email protected]"; 
$headers = "From:" . $from; 
mail($to,$subject,$message,$headers); 
echo "Mail Sent."; 
?>