2011-08-04 126 views
-6

这是我第四次问这个查询。这个脚本有什么问题?

我有一个联系表格,我从互联网上获得的文件附件。它没有显示任何错误,但是当我尝试使用附加的文件发送邮件时,它不起作用。你能告诉我什么是问题,或者你可以建议一个好的简单联系表格与文件附件?我已经在互联网上尝试了大多数带有文件附件的联系表格,但大多数文件附件都不起作用。

以下是属于脚本的HTML代码的一小部分。我的网站在线,因此我面临问题。

<form action="" method="post" name="form1" enctype="multipart/form-data"> 
<input name="txtTo" type="text" id="txtTo"> 
<input name="txtSubject" type="text" id="txtSubject"> 
<textarea name="txtDescription" cols="30" rows="4" id="txtDescription"> 
<input name="txtFormName" type="text"> 
    <input name="txtFormEmail" type="text"> 
    <input name="fileAttach" type="file"> 
    <input type="submit" name="Submit" value="Send"> 
    </form> 

php脚本

<?php 
if(isset($_POST["submit"])){ 
$strTo = $_POST["txtTo"]; 
$strSubject = $_POST["txtSubject"]; 
$strMessage = nl2br($_POST["txtDescription"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
    $strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
    $strHeader .= $strMessage."\n\n"; 

//*** Attachment ***// 
    if($_FILES["fileAttach"]["name"] != "") 
    { 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"] ["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 

$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo "Mail send completed."; 
} 
    else 
{ 
echo "Cannot send mail."; 
} 
} 
?> 
+8

为什么你不干脆雇人来为你做的? – zerkms

+1

你错过了一些关键的步骤。你需要做更多的研究。你快到了。看看 http://www.tizag.com/phpT/fileupload。php和 http://php.net/move_uploaded_file – micha

+0

感谢micha为你的出色答复 – test

回答

1

这是我谦虚的回答。我将你的代码格式化了一些,并创建了它的独立版本(有一些简单的样式^^)。

现场演示:http://kopli.pri.ee/stackoverflow/6935517.php
(请不要滥用我的小邮件发送服务)

在这似乎是一个简单地说,该$_POST["submit"]是主要问题。但是,我可能会修正其他一些关键方面,并忘记记下它。

注意:也许您的脚本在某些方面有效,但您的电子邮件提供商反垃圾邮件系统将其标记为垃圾邮件?此外,如果你的页面中的编码不正确,则可能已经与电子邮件的UTF-8格式的冲突......

我想给一些指点您:

  • 有一个与$ _ POST一个关键问题的形式[“提交”],没有这样的输入..这意味着它不是一个有效的触发
  • <textarea>没有关闭,并造成问题。
  • 我使用XHTML在我的例子,所以<input>的需要与/
  • 结束在<input>为PHP,你不需要有id="txtSubject"
  • 有(ID与JS打交道时非常有用)没有在<form>
  • name=""有在你的PHP代码中的一些怪异的空间点。例如:$_FILES["fileAttach"] ["tmp_name"]。这不是很正确的代码!
  • 在字符串的结尾添加. ""是非常没有意义的

完全独立的代码:

<?php 

if (isset($_POST["submit_trigger"])) { 
    $strTo = $_POST["txtTo"]; 
    $strSubject = $_POST["txtSubject"]; 
    $strMessage = nl2br($_POST["txtDescription"]); 

    //*** Uniqid Session ***// 
    $strSid = md5(uniqid(time())); 

    $strHeader = ""; 
    $strHeader .= "From: " . $_POST["txtFormName"] . "<" . $_POST["txtFormEmail"] . ">\nReply-To: " . $_POST["txtFormEmail"]; 

    $strHeader .= "MIME-Version: 1.0\n"; 
    $strHeader .= "Content-Type: multipart/mixed; boundary=\"" . $strSid . "\"\n\n"; 
    $strHeader .= "This is a multi-part message in MIME format.\n"; 

    $strHeader .= "--" . $strSid . "\n"; 
    $strHeader .= "Content-type: text/html; charset=utf-8\n"; 
    $strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
    $strHeader .= $strMessage . "\n\n"; 

    //*** Attachment ***// 
    if ($_FILES["fileAttach"]["name"] != "") { 
     $strFilesName = $_FILES["fileAttach"]["name"]; 
     $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
     $strHeader .= "--" . $strSid . "\n"; 
     $strHeader .= "Content-Type: application/octet-stream; name=\"" . $strFilesName . "\"\n"; 
     $strHeader .= "Content-Transfer-Encoding: base64\n"; 
     $strHeader .= "Content-Disposition: attachment; filename=\"" . $strFilesName . "\"\n\n"; 
     $strHeader .= $strContent."\n\n"; 
    } 

    // @ = No Show Error // 
    $flgSend = @mail($strTo, $strSubject, null, $strHeader); 

    if ($flgSend) { 
     $posting_message = '<div class="success_message">Mail send completed :)</div>'; 
    } else { 
     $posting_message = '<div class="error_message">Cannot send mail :(</div>'; 
    } 
} 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>Can you tell me what is the problem with this script - Kalle H. Väravas</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <style> 
     html, body {margin: 0px; padding: 0px; background: #B3D9FF;} 
     label {font-weight: bold; width: 140px; display: inline-block; padding: 10px;} 
     .success_message, 
     .error_message {display: inline-block; padding: 2px 5px; font-weight: bold; margin-bottom: 5px;} 
     .success_message {background: #A9F5AB;} 
     .error_message {background: #FF8080;} 
     #main_container {width: 500px; -moz-border-radius: 5px; background: #FFFFFF; margin: 20px auto; padding: 20px;} 
    </style> 
</head> 
<body> 
    <div id="main_container"> 
     <?php echo $posting_message; ?> 
     <form action="" method="post" enctype="multipart/form-data"> 
      <input name="submit_trigger" value="1" type="hidden" /> 
      <label>To:</label><input name="txtTo" type="text" /><br /> 
      <label>Subject:</label><input name="txtSubject" type="text" /><br /> 
      <label>Message:</label><textarea name="txtDescription" cols="30" rows="4"></textarea><br /> 
      <label>From name:</label><input name="txtFormName" type="text" /><br /> 
      <label>From email</label><input name="txtFormEmail" type="text" /><br /> 
      <label>Attachment:</label><input name="fileAttach" type="file" /><br /> 
      <input type="submit" name="Submit" value="Send" /><br /> 
     </form> 
    </div> 
</body> 
</html> 
0
file name = "php_sendmail_upload1" 
     <form action="#" method="post" name="form1" class="blocks" enctype="multipart/form-data" class="blocks"> 
     <p> 
      <label>Name</label> 
      <input name="txtFormName" class="text" type="text"> 
     </p> 
     <p> 
      <label>Email</label> 
      <input name="txtFormEmail" type="text" class="text"> 
     </p> 
     <p> 
      <label>Position Applying For</label> 
      <input type="text" name="txtDescription" id="txtDescription" class="text"> 
     </p> 
     <p class="area"> 
      <label>Upload CV</label> 
      <input name="fileAttach" type="file" > 
     </p> 
     <p> 
      <label>&nbsp;</label> 
      <input type="submit" class="submit" name="Submit" value="SEND" /> 

     </p> 
    </form> 



    <? 
$strTo = "[email protected]"; 
$strSubject = $_POST["txtSubject"]; 
$strMessage = nl2br($_POST["txtDescription"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
$strHeader .= $strMessage."\n\n"; 

//*** Attachment ***// 
if($_FILES["fileAttach"]["name"] != "") 
{ 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 


$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo ""; 
} 
else 
{ 
    echo "Cannot send mail."; 
} 
?> 



file name="php_sendmail_upload2" 


    <? 
$strTo = "[email protected]"; 
$strSubject = $_POST["txtSubject"]; 
$strMessage = nl2br($_POST["txtDescription"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
$strHeader .= $strMessage."\n\n"; 

//*** Attachment ***// 
if($_FILES["fileAttach"]["name"] != "") 
{ 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 


$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo "Mail send completed."; 
} 
else 
{ 
    echo "Cannot send mail."; 
} 
?>   
+0

你能解释你的改变吗? – Korcholis