0

我不太了解 PHP,正在尝试获取一个非常简单的 PHP 脚本来发送电子邮件。单击提交时,我收到了谢谢消息,但没有电子邮件。

<?php $name = $_POST['name'];
$email = $_POST['email'];
$web = $_POST['web'];
$message = $_POST['message'];
$formcontent="From: $name \n Website: $web \n Message: $message";
$recipient = "myemail@example.com"; // I do have my email here
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!";
    ?>

这是html表单:

<form action="mail.php" method="post" class="form">  

    <p class="name">  
      <label for="name">Name</label>
        <input type="text" name="name" id="name" />  

    </p>  

    <p class="email">  
      <label for="email">E-mail</label> 
        <input type="text" name="email" id="email" />  

    </p>  

    <p class="web">  
      <label for="web">Website</label> 
        <input type="text" name="web" id="web" />  

    </p>  

    <p class="text">  
      <label for="web">Comments</label> 
        <textarea name="message"></textarea>  
    </p>  

    <p class="submit">  
        <input type="submit" value="Send" />  
    </p>        
</form> 
4

4 回答 4

2

嗯……好像不错。尝试:

mail('youremail@hotmail.com', 'aSubject', 'aMessage');

所有参数不是变量,而是带有单引号的实际字符串

应该会在接下来的 5 分钟内出现在您的普通邮件/垃圾邮件中。


如果这不起作用,则意味着脚本没有执行,因此将 mail.php 更改为:

echo 'hi';

以确保脚本路径正确。那会找出问题所在,干杯。

于 2013-03-29T01:38:54.527 回答
1

我建议您为此简单地使用 PHPMAILER 类,这样您就可以休息一下了。

https://code.google.com/a/apache-extras.org/p/phpmailer/

这将很有帮助,因此您无需开始为编辑大量代码而烦恼,因为这会浪费您的时间用于其他工作。

检查示例文件夹中的文件以获取 SMTP 示例,并使用 SMTP 高级或基本。使用 SMTP 高级,您将能够抛出并捕获您的错误。这可以帮助您知道哪里有错误,直到所有错误都得到解决。请参阅 SMTP 基本代码的示例代码。

require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = file_get_contents('contents.html');
$body             = preg_replace('/[\]/','',$body);

$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "mail.yourdomain.com"; // SMTP server
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "mail.yourdomain.com"; // sets the SMTP server
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "yourname@yourdomain"; // SMTP account username
$mail->Password   = "yourpassword";        // SMTP account password

$mail->SetFrom('name@yourdomain.com', 'First Last');

$mail->AddReplyTo("name@yourdomain.com","First Last");

$mail->Subject    = "PHPMailer Test Subject via smtp, basic with authentication";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

当您完成测试并希望现在停止输出 SMTP 缓冲区消息时,请找到显示以下内容的行

$mail->SMTPDebug = 2;

并将其替换为

$mail->SMTPDebug = false;
$mail->do_debug = 0;

那你就可以走了。在必要时提出问题。

于 2013-03-30T02:43:45.933 回答
0

首先,您应该知道您的代码会使用 POST 进行标头注入。您应该使用 filter_var() ( http://php.net/manual/fr/function.filter-var.php ) 来确保 $email 值是无害的。

然后,有几个原因可以阻止 PHP 发送您的邮件。

mail() 函数使用您服务器的 MTA(例如 sendmail、postfix...):您需要正确安装/配置它才能发送邮件。

您的 ISP 也可以阻止 25 端口(以防止垃圾邮件)。

或者,您可以使用 php pear 的 Mail 和 Net_SMTP 类通过 SMTP 发送电子邮件。这些类以方便的方式处理编码、附加文件等。

于 2013-03-29T01:40:44.707 回答
0

我不是后端开发人员,所以我对 php 了解不多,但是这段代码对我有用,所以试一试。

<p><span>Name</span><input class="contact" type="text" name="your_name" value="" /></p>
            <p><span>Email Address</span><input class="contact" type="text" name="your_email" value="" /></p>
			<p><span>Message</span><textarea class="contact textarea" rows="8" cols="50" name="your_message"></textarea></p>
             
            <p style="padding-top: 15px"><span>&nbsp;</span><input class="submit" type="submit" name="contact_submitted" value="Send" /></p>
            <?php
            $your_name = $_POST['your_name'];
            $your_email = $_POST[your_email];
            $your_message = $_POST['your_message'];
            $recipient = "youremailhere@domain.com";
            $subject = "New Message About BikeExcel";
            
            mail($recipient , $subject, $your_message, "From " . $your_email);
            echo "Your Message Has Been Sent";
            ?>

因此,您无需将电子邮件放入邮件字符串中,而是创建一个变量来定义您的电子邮件。这也将使您的代码看起来不错,这将使您在投资组合中看起来不错。我希望这有帮助!!!!

于 2014-12-31T19:06:18.013 回答