2012-10-31 195 views
0

我試圖發送帶有用戶輸入的文件上傳的表單,並且由於某種原因,它似乎不發送郵件。 問題是,我沒有得到一個錯誤,以瞭解我有什麼錯誤。使用文件附件發送表單電子郵件,但不發送電子郵件或報告錯誤

在此之前,我不想使用任何庫來做到這一點,我想保持簡單。

下面是代碼:

<?php 

if(isset($_POST['Submit'])){ 
    $strTo = "[email protected]"; 
    $strSubject = "Purchase request from " . $_POST["formName"] . $_POST["formSurname"]; 
    $strMessage = nl2br($_POST["formName"] . $_POST["formEmail"] . $_POST["formInstitute"] . $_POST["formCourse"] . $_POST["formNotes"]); 

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

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

    $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."; 
    } 
} 
?> 

,這裏是形式:

<form action="#!/studentform.2ndphase" method="post" name="form1" enctype="multipart/form-data"> 
     <table width="500"> 
     <tr> 
      <td>שם פרטי: </td> 
      <td><input name="formName" type="text" id="name"></td> 
     </tr> 
     <tr> 
      <td>שם משפחה: </td> 
      <td><input name="formSurname" type="text" id="surname"></td> 
     </tr> 
     <tr> 
      <td>דואר אלקטרוני: </td> 
      <td><input name="formEmail" type="text"></td> 
     </tr> 
     <tr> 
      <td>מוסד אקדמי: </td> 
      <td><input name="formInstitute" type="text"></td> 
     </tr> 
      <td>מסלול: </td> 
      <td><input name="formCourse" type="text"></td> 
     </tr> 
     <tr> 
      <td>הערות</td> 
      <td><textarea name="formNotes" cols="30" rows="4" id="formNotes"></textarea></td> 
     </tr> 

     <tr> 
     <td>Attachment</td> 
     <td><input name="fileAttach" type="file"></td> 
     </tr> 
     <tr> 
     <td>&nbsp;</td> 
     <td><input type="submit" name="Submit" value="שלח"></td> 
     </tr> 
     </table> 
    </form> 

行動引導到不同的頁面,因爲我使用的是基於PHP框架,這就是爲什麼鏈接設置爲#!studentform.2ndphase

感謝您給予的任何幫助。

+0

您是否嘗試過不同的電子郵件(Gmail時,Hotmail的...)?也許它在您的電子郵件收件箱中被視爲垃圾郵件? – theredled

+0

剛剛嘗試了一個Gmail,沒有發送電子郵件: -/ –

+0

在PHP開關error_reporting和顯示錯誤,然後嘗試..你可能會得到實際的錯誤 –

回答

1

創建一個新的PHP文件,將它添加到它

<?php 
phpinfo(); 
?> 

上傳並在瀏覽器中打開它,向下滾動頁面,並檢查「sendmail_path」爲空或找到禁用的功能沒準郵件功能已被您的主機禁用。

,或者你可以只運行一個小的功能檢查,

<?php 
$to  = '[email protected]'; 
$subject = 'Mail test'; 
$message = 'This is a test email'; 
$headers = 'From: [email protected]' . "\r\n" . 
    'Reply-To: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

mail($to, $subject, $message, $headers); 
?> 

變化 「[email protected]」 到您的電子郵件地址

{} UPDATE

你可以使用另一個電子郵件系統發送它。或使用SMTP腳本

我喜歡:htmlMimeMail5

<?php 
require_once("htmlMimeMail5.php"); 
$mail = new htmlMimeMail5(); 
$mail->setFrom("YourName <[email protected]>"); 
$mail->setSubject('Test email'); 
$mail->setHTML('<body background="background.gif"><b>Sample HTML</b></body>'); 
$mail->send(array('[email protected]')); 
?> 
+0

我sendmail_path是空的,那麼我該怎麼辦? –

+0

已更新的答案 - – Marty