2013-07-21 2 views
17

У меня есть следующий фрагмент кода PHPMailer. Проблема заключается в том, что файл успешно загружается на сервер, но вложение не отправляется по почте. Код вложения кажется правильным, насколько мне известно. Пожалуйста, просмотрите код и сообщите мне, где я ошибся.Добавить приложение через PHPMailer

Форма

<form name="contactform" method="post" action="send1.php" enctype="multipart/form-data"> 
<table width="100%" border="0"> 
<tr> 
<td id="ta"> 
<label for="title">Title *</label> 
</td> 
<td id="ta"> 
<select name="title"> 
<option value="0">Title</option> 
<option value="1">Mr.</option> 
<option value="2">Ms.</option> 
<option value="3">Mrs.</option> 
</select></td></tr><tr><td id="ta"> 
    <label for="first_name">First Name *</label> 
</td> 
<td id="ta"> 
    <input type="text" name="first_name" maxlength="50" size="30" required="required"> 
</td> 
</tr> 
<tr> 
<td id="ta"> 
    <label for="last_name">Last Name *</label> 
</td> 
<td id="ta"> 
    <input type="text" name="last_name" maxlength="50" size="30" required="required"> 
</td> 
</tr> 
<tr> 
<td id="ta"> 
    <label for="email">Email Address *</label> 
</td> 
<td id="ta"> 
    <input type="text" name="email" maxlength="80" size="30" required="required"> 
</td> 
</tr> 
<tr> 
<td id="ta"> 
    <label for="telephone">Telephone Number *</label> 
</td> 
<td id="ta"> 
    <input type="text" name="telephone" maxlength="30" size="30" required="required"> 
</td> 
</tr> 
<tr> 
<td id="ta"> 
    <label for="comments">Details</label> 
</td> 
<td id="ta"> 
    <textarea name="comments" maxlength="100000" cols="25" rows="6"></textarea> 
</td> 
</tr> 
<tr> 
<td id="ta"> 
    <label for="file">Or upload a file (only word, excel or pdf)</label> 
</td> 
<td id="ta"> 
<input type="file" name="file"> 
</td> 
</tr> 
<tr> 
<td colspan="2" style="text-align:center" id="ta"> 
    <input type="submit" value="Submit"> 
</td> 
</tr> 
</table> 
</form> 

send1.php

<?php 

require('PHPMailer/class.phpmailer.php'); 

if(isset($_POST['email'])) { 

    // EDIT THE 2 LINES BELOW AS REQUIRED 
    //$email_to = "hidden"; 
    //$email_subject = "Request for Portfolio check up from ".$first_name." ".$last_name; 

    $title = array('Title', 'Mr.', 'Ms.', 'Mrs.'); 
    $selected_key = $_POST['title']; 
    $selected_val = $title[$_POST['title']]; 

    $first_name = $_POST['first_name']; // required 
    $last_name = $_POST['last_name']; // required 
    $email_from = $_POST['email']; // required 
    $telephone = $_POST['telephone']; // not required 
    $comments = $_POST['comments']; // required 

    if(($selected_key==0)) 
    echo "<script> alert('Please enter your title')</script>"; 
    function clean_string($string) { 
     $bad = array("content-type","bcc:","to:","cc:","href"); 
     return str_replace($bad,"",$string); 
    } 
    $email_message = ""; 
    $email_message .="Title: ".$selected_val."\n"; 
    $email_message .= "First Name: ".clean_string($first_name)."\n"; 
    $email_message .= "Last Name: ".clean_string($last_name)."\n"; 
    $email_message .= "Email: ".clean_string($email_from)."\n"; 
    $email_message .= "Telephone: ".clean_string($telephone)."\n"; 
    $email_message .= "Comments: ".clean_string($comments)."\n"; 

    $allowedExts = array("doc", "docx", "xls", "xlsx", "pdf"); 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
if ((($_FILES["file"]["type"] == "application/pdf") 
|| ($_FILES["file"]["type"] == "application/msword") 
|| ($_FILES["file"]["type"] == "application/excel") 
|| ($_FILES["file"]["type"] == "application/vnd.ms-excel") 
|| ($_FILES["file"]["type"] == "application/x-excel") 
|| ($_FILES["file"]["type"] == "application/x-msexcel") 
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) 

&& in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "<script>alert('Error: " . $_FILES["file"]["error"] ."')</script>"; 
    } 
    else 
    { 
     $d='upload/'; 
     $de=$d . basename($_FILES['file']['name']); 
    move_uploaded_file($_FILES["file"]["tmp_name"], $de); 
$fileName = $_FILES['file']['name']; 
    $filePath = $_FILES['file']['tmp_name']; 
    //add only if the file is an upload 
    } 
    } 
else 
    { 
    echo "<script>alert('Invalid file')</script>"; 
    } 

// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
//Create a new PHPMailer instance 
$mail = new PHPMailer(); 
//Tell PHPMailer to use SMTP 
$mail->IsSMTP(); 
//Enable SMTP debugging 
// 0 = off (for production use) 
// 1 = client messages 
// 2 = client and server messages 
$mail->SMTPDebug = 0; 
//Ask for HTML-friendly debug output 
$mail->Debugoutput = 'html'; 
//Set the hostname of the mail server 
$mail->Host  = "hidden"; 
//Set the SMTP port number - likely to be 25, 465 or 587 
$mail->Port  = 25; 
//Whether to use SMTP authentication 
$mail->SMTPAuth = true; 
//Username to use for SMTP authentication 
$mail->Username = "hidden"; 
//Password to use for SMTP authentication 
$mail->Password = "hidden"; 
//Set who the message is to be sent from 
$mail->SetFrom($email_from, $first_name.' '.$last_name); 
//Set an alternative reply-to address 
//$mail->AddReplyTo('[email protected]','First Last'); 
//Set who the message is to be sent to 
$mail->AddAddress('hidden', 'hidden'); 
//Set the subject line 
$mail->Subject = 'Request for Profile Check up'; 
//Read an HTML message body from an external file, convert referenced images to embedded, convert HTML into a basic plain-text alternative body 
$mail->MsgHTML($email_message); 
//Replace the plain text body with one created manually 
$mail->AltBody = 'This is a plain-text message body'; 
//Attach an image file 
//$mail->AddAttachment($file); 
$mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']); 
//Send the message, check for errors 
if(!$mail->Send()) { 
    echo "<script>alert('Mailer Error: " . $mail->ErrorInfo."')</script>"; 
} else { 
    echo "<script>alert('Your request has been submitted. We will contact you soon.')</script>"; 
    Header('Location: main.php'); 
} 
} 
?> 

EDIT Почта успешно отправляет со всеми деталями тоже. Просто, что приложение не отправит.

EDIT 2: решаемые Изменено $mail->MsgHTML к $mail->Body и это сработало!

+0

да файл получает закачанный правильно, я уже проверил –

+5

** решаемые **: Изменено '$ mail- > MsgHTML() 'to' $ mail-> Body', и он работает! SO запрещает мне отвечать/задавать вопросы, поэтому, пожалуйста, поддержите меня! : P –

+0

да ... спасибо! SO не позволит мне больше отвечать :( –

ответ

10

Изменить

$mail->MsgHTML(); 

в

$mail->Body; 

Источник: here

+0

по какой-то причине я не получаю, это действительно сработало. Должна быть проблема с дополнительными заголовками, создаваемыми PhpMailer при добавлении тела – Asped

Смежные вопросы