【问题标题】:php contact form not sending email [duplicate]php联系表格不发送电子邮件[重复]
【发布时间】:2016-02-22 11:10:22
【问题描述】:

我已经为我的俱乐部制作了联系表。 here 现在我遇到了一个问题,即表单无法从输入到电子邮件地址的表单中传递信息。 我不知道 html 代码或 PHP 是否有问题,所以两者都发帖。 HTML:

<form action="#" method="post" style="max-width: 75%;">
  <table width="100%" border="0" cellpadding="3" cellspacing="1">
    <tr>
      <td align="right">*Anrede:</td>
      <td align="left">
        <input type="radio" name=Anrede value="Hr.">Herr
        <input type="radio" name=Anrede value="Fr.">Frau</td>
    </tr>
    <tr>
      <td width="140" align="right">*Nachname:</td>
      <td align="left">
        <input type="text" name="nachname" value="" style="width:100%;" />
      </td>
    </tr>
    <tr>
      <td align="right">*Vorname:</td>
      <td align="left">
        <input type="text" name="vorname" value="" style="width:100%" />
      </td>
    </tr>
    <tr>
      <td align="right">Firma:</td>
      <td align="left">
        <input type="text" name="firma" value="" style="width:100%" />
      </td>
    </tr>
    <tr>
      <td align="right">*Postanschrift:</td>
      <td align="left">
        <input type="text" name="strasse" value="" style="width:100%" />
      </td>
    </tr>
    <tr>
      <td align="right">*Telefon:</td>
      <td align="left">
        <input type="text" name="telefon" value="" style="width:100%" />
      </td>
    </tr>
    <tr>
      <td align="right">*E-Mail:</td>
      <td align="left">
        <input type="text" name="email" value="" style="width:100%" />
      </td>
    </tr>
    <tr>
      <td align="right">*Buchungstag:</td>
      <td align="left">
        <input type="text" id="datepicker" />
      </td>
    </tr>
    <tr>
      <td align="right">*Erwachsene:</td>
      <td align="left">
        <select name="Erwachsene" style="width: 145px;">
          <option selected="selected" disabled="disabled">Bitte ausw&auml;hlen</option>
          <?php for ($i=0 ; $i <=3 0; $i++) : ?>
          <option value="<?php echo $i; ?>">
            <?php echo $i; ?>
          </option>
          <?php endfor; ?>
        </select>
      </td>
    </tr>
    <tr>
      <td align="right">*Jugend:</td>
      <td align="left">
        <select name="Jugend" style="width: 145px;">
          <option selected="selected" disabled="disabled">Bitte ausw&auml;hlen</option>
          <?php for ($i=0 ; $i <=2 5; $i++) : ?>
          <option value="<?php echo $i; ?>">
            <?php echo $i; ?>
          </option>
          <?php endfor; ?>
        </select>
      </td>
    </tr>
    <tr>
      <td align="right">*Event:</td>
      <td align="left">
        <input type="radio" name=myradio value="extern" checked>extern
        <input type="radio" name=myradio value="intern">intern</td>
    </tr>
    <tr>
      <td colspan="2">
        <textarea rows="12" style="width:100%" name="text" placeholder="zus&auml;tzliche Informationen ..."></textarea>
      </td>
      <td></td>
    </tr>
    <tr>
      <td colspan="2" align="left" nowrap>
        <br />
        <input type="reset" value="Formular l&ouml;schen" style="width:49%" />
        <input type="submit" name="submit" value="Formular absenden" style="width:49%" />
      </td>
    </tr>
  </table>
</form>
<p>*Pflichtfelder</p>
<br />

PHP:

<?php 
if(isset($_POST['submit'])){


$anrede = $_POST['Anrede'];
$last_name = $_POST['Nachname'];//required
$first_name = $_POST['Vorname'];//required
$Firma = $_POST['Firma'];
$Anschrift = $_POST['Postanschrift'];//required
$tel = $_POST['telefon'];//required
$from = $_POST['email'];//required
$tag = $_POST['buchungstag'];//required
$erwach = $_POST['Erwachsene'];//required
$jugend = $_POST['Jugend'];//required
$zusatz = $_POST['text'];

$to= "kontakt@acherner-bogenclub.de , $from";
$subject = "Anfrage auf belegung des Bogenplatzes";

$error_message = "";

$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';

if(!preg_match($email_exp,$from)) {

$error_message .= 'bitte einen gultige email eingelben.<br />';

}

$string_exp = "/^[A-Za-z .']+$/";

if(!preg_match($string_exp,$F_name)) {

$error_message .= 'Dein vorname ist nicht gültig.<br />';

}

$string_exp = "/^[A-Za-z ']+$/";

if(!preg_match($string_exp,$Anschrift)) {

$error_message .= 'bitte eine gültige addresse eingeben.<br />';

} 

if(!preg_match($string_exp,$L_name)) {

$error_message .= 'Dein nachname ist nicht gültig<br />';

}


if(isset($_REQUEST['Erwachsene']) && $_REQUEST['Erwachsene'] == '0') { 
echo 'Bitte anzahl der Erwachsene auswählen.<br /> '; 

} 
if(isset($_REQUEST['Jugend']) && $_REQUEST['Jugend'] == '0') { 
echo 'Bitte anzahl der Jugendlichen auswählen.<br /> '; 

} 
  //datepicker validation????

if(strlen($error_message) > 0) {

die($error_message);

}

$email_message = "Kontaktformular details siehe unten.\n\n";



function clean_string($string) {

$bad = array("content-type","bcc:","to:","cc:","href");

return str_replace($bad,"",$string);

}

$email_message .= "Anrede: ".clean_string($anrede)."\n";

$email_message .= "First Name: ".clean_string($first_name)."\n";

$email_message .= "Last Name: ".clean_string($last_name)."\n";

$email_message .= "Firma: ".clean_string($Firma)."\n";

$email_message .= "Postanschrift: ".clean_string($Anschrift)."\n";

$email_message .= "Telefonnummer: ".clean_string($tel)."\n";

$email_message .= "Email: ".clean_string($from)."\n";

$email_message .= "Buchungstag: ".clean_string($tag)."\n";

$email_message .= "Anzahl der Erwachsenen: ".clean_string($erwach)."\n";

$email_message .= "Anzahl der Jugendlichen: ".clean_string($jugend)."\n";

$email_message .= "Zusätzliche Informationen: ".clean_string($zusatz)."\n";



// create email headers

$headers = 'From: '.$from."\r\n".

@mail($to, $email_subject, $email_message, $headers);  

?>



<!-- include your own success html here -->


Vielen dank. Wir werden sobald wie möglich mit ihnen in verbindung treten. 


<?php

}

?>

我希望有人能帮我解决这个问题,而且验证由于某种原因无法正常工作,我尝试了很多不同的方法,但都没有成功。

【问题讨论】:

  • 删除邮件命令前面的@,它会抑制可能有用的错误消息。检查包含哪些变量。检查邮件发送是否基本上可以通过使用mail()直接与字符串一起使用,没有变量。
  • 关于您的检查的注意事项:他们将在包含变音符号的姓名和地址上失败。
  • mail 之前的@ 将抑制发送过程中可能发生的任何错误。此外,我个人建议您使用 phpmailer 之类的邮件库:github.com/PHPMailer/PHPMailer。它肯定会解决您的大部分问题,如果邮件在发送时遇到任何问题,它会准确告诉您发生了什么。也就是说,请检查是否正在接收所有 POST 变量。 (另外,我认为php文件开头的编码是必须的,不要忘记它)
  • 什么是print_r($_POST); 打印?如果它是空的,那么下面的 if 甚至都没有被加入。 (另外,请记住,退出仅用于调试目的,退出后 之后的所有内容都不会执行,现在它的目的是检查是否正在接收任何 POST 数据)
  • 至于验证,László Müller(他的母亲是匈牙利人;))不会感谢你告诉他他的名字不是 gültig。 (ü 不会匹配 [A-Za-z ] 等)而且上帝禁止有人实际输入“Etwasstraße”而不是“Etwasstrasse”。

标签: php html forms validation email


【解决方案1】:

由于您的&lt;form action='' 选项卡为空,因此表单在发送和重新加载页面时未提交数据。通过简单地设置action='#',我已经让您的页面在print_r($_POST); 中正确显示表单内容。

P.S> PHPMailer 绝对是 PHP 电子邮件的最佳选择。

补充说明:


 if(strlen($error_message) > 0) {
   died($error_message);
 }

Die funtion 不应该是过去时。


mail(); 函数中看到的$email_subject 是一个未定义的变量。


$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Anzahl der Erwachsenen: ".clean_string($erwach)."\n";

这三个变量($first_name,$ast_name,$erwach)也是未定义的。


在使用 Stack Overflow 之前阅读并检查您自己的代码。我们乐于提供帮助,但不能指望我们成为您的错字检查员和错误检查员。


调试:

if (mail($to, $email_subject, $email_message, $headers)){
    die("Message was sent ok!!");
}

您的 clean_string 函数看起来毫无意义,应该扩展为完整的字符串清理函数,而不是临时删除系统。

【讨论】:

  • 谢谢,但是为什么这不会将电子邮件发送到给定的电子邮件地址?
  • @Mark 我已经为你添加了一些进一步的注释。
  • 感谢提示我的拼写错误 UPS :O 现在至少我正在重定向到感谢页面。但是邮件还是打不通
【解决方案2】:

如果在同一页面上使用,请在 HTML 代码上方使用 PHP 代码。

PHP 代码需要少量修正,如下所述:

<?php 
if(isset($_POST['submit'])){


$anrede = $_POST['Anrede'];
$L_name = $_POST['Nachname'];//required
$F_name = $_POST['Vorname'];//required
$Firma = $_POST['Firma'];
$Anschrift = $_POST['Postanschrift'];//required
$tel = $_POST['telefon'];//required
$from = $_POST['email'];//required
$tag = $_POST['buchungstag'];//required
$ewach = $_POST['Erwachsene'];//required
$jugend = $_POST['Jugend'];//required
$zusatz = $_POST['text'];

$to= "kontakt@acherner-bogenclub.de , $from";
$subject = "Anfrage auf belegung des Bogenplatzes";

$error_message = "";

$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';

if(!preg_match($email_exp,$from)) {

$error_message .= 'bitte einen gultige email eingelben.<br />';

}

$string_exp = "/^[A-Za-z .']+$/";

if(!preg_match($string_exp,$F_name)) {

$error_message .= 'Dein vorname ist nicht gültig.<br />';

}

$string_exp = "/^[A-Za-z ']+$/";

if(!preg_match($string_exp,$Anschrift)) {

$error_message .= 'bitte eine gültige addresse eingeben.<br />';

} 

if(!preg_match($string_exp,$L_name)) {

$error_message .= 'Dein nachname ist nicht gültig<br />';

}


if(isset($_REQUEST['Erwachsene']) && $_REQUEST['Erwachsene'] == '0') { 
echo 'Bitte anzahl der Erwachsene auswählen.<br /> '; 

} 
if(isset($_REQUEST['Jugend']) && $_REQUEST['Jugend'] == '0') { 
echo 'Bitte anzahl der Jugendlichen auswählen.<br /> '; 

} 
  //datepicker validation????

if(strlen($error_message) > 0) {

died($error_message);

}

$email_message = "Kontaktformular details siehe unten.\n\n";



function clean_string($string) {

$bad = array("content-type","bcc:","to:","cc:","href");

return str_replace($bad,"",$string);

}

$email_message .= "Anrede: ".clean_string($anrede)."\n";

$email_message .= "First Name: ".clean_string($first_name)."\n";

$email_message .= "Last Name: ".clean_string($last_name)."\n";

$email_message .= "Firma: ".clean_string($Firma)."\n";

$email_message .= "Postanschrift: ".clean_string($Anschrift)."\n";

$email_message .= "Telefonnummer: ".clean_string($tel)."\n";

$email_message .= "Email: ".clean_string($from)."\n";

$email_message .= "Buchungstag: ".clean_string($tag)."\n";

$email_message .= "Anzahl der Erwachsenen: ".clean_string($erwach)."\n";

$email_message .= "Anzahl der Jugendlichen: ".clean_string($jugend)."\n";

$email_message .= "Zusätzliche Informationen: ".clean_string($zusatz)."\n";



// create email headers

$headers = 'From: '.$from."\r\n".

@mail($to, $email_subject, $email_message, $headers);  

?>



<!-- include your own success html here -->


Vielen dank. Wir werden sobald wie möglich mit ihnen in verbindung treten. 


<?php

}

?>

【讨论】:

  • 至少现在它没有留在联系表格中,但我仍然没有收到表格中的电子邮件。
  • $from 之前写echo 并检查您是否收到电子邮件地址
  • 同时检查您服务器上的“SMTP”设置
【解决方案3】:

尝试添加

print_r($_POST);
exit; 

if(isset($_POST['submit'])){之前就行了

这将显示表单是否甚至发布到 PHP 表单,并显示它发布的内容。

【讨论】:

  • 这应该是评论,而不是答案。声望点数达到 50 时,您可以对任何帖子发表评论,在此之前请不要发布 cmets 作为答案。
  • acherner-bogenclub.de/contakt2.php 所以我刚刚添加了 ure addvice 但我不知道这告诉我什么可能你看看。@user2958426 @Gerald schneider 我改变了你所说的但它不会发送电子邮件,即使点击提交时也只会停留在表单上:/
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多