2015-04-01 3 views
0

Я уже давно пытаюсь разобраться в этом, и у меня нет подсказки. Я пытаюсь написать простую форму, чтобы отправить электронное письмо с загруженным файлом (который в конечном итоге будет раскрыт во что-то действительно полезное), и он просто не работает вообще.PHPMailer отказывается отправить вложение

Письма проходят через соответствующий корпус, но вложения не включаются. Я пробовал это с формой загрузки файла, с добавлением AddAttachments к файлу на сервере и с AddAttachments, указывающим на изображение на imgur, и ни одна из них не работает; присоединяется НИКОГДА. Я в конце своего терпения сейчас, кто-нибудь знает, что я делаю неправильно или способ сделать это без phpmailer?

HTML Form

<form action="xxxx.php" id="upload" method="post" name="upload"> 
<input id="fileToUpload" name="fileToUpload" type="file" /> 
<input type="submit" /> 
</form> 

PHP код

require("../../../classes/class.phpmailer.php"); 
$mail = new PHPMailer(); 

$mail->From  = "[email protected]"; 
$mail->FromName = "Uploader"; 
$mail->AddAddress("[email protected]"); 

$mail->Subject = "First PHPMailer Message"; 
$mail->Body  = "Hi! \n\n This is my first e-mail sent through PHPMailer."; 
$mail->WordWrap = 50; 
$mail->AddAttachment($_FILES['fileToUpload']['tmp_name'], $_FILES['fileToUpload']['name']); 

if(!$mail->Send()) { 
    echo 'Message was not sent.'; 
    echo 'Mailer error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent.'; 
+0

Это может быть полезно для вас: http://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data. Я думаю, вам нужно использовать 'enctype =" multipart/form-data "' в вашей форме. – potame

ответ

0

Глядя на вашу форму вы не имеете ENCTYPE = "многослойную/форма-данные", установленным в вашей форме тега.

Кроме того, вам необходимо сделать проверку прикрепленного файла, чтобы убедиться, что она действительно прикреплена перед отправкой электронной почты. Для примера,

if (isset($_FILES['uploaded_file']) && 
    $_FILES['fileToUpload']['error'] == UPLOAD_ERR_OK) { 
    $mail->AddAttachment($_FILES['fileToUpload']['tmp_name'], 
         $_FILES['fileToUpload']['name']); 
} 
+0

Я добавил enctype в форму и эту проверку прикрепления к php, и он все еще не работает. Я по-прежнему получаю тот же адрес электронной почты без привязки к нему. – AlexRS

0

Вы используете какой-то старый пример, и старую версию PHPMailer, поэтому я предлагаю вам update to the latest. Вам также нужно знать how to handle file uploads, что вам не хватает. Вот the example bundled with PHPMailer:

<?php 
/** 
* PHPMailer simple file upload and send example 
*/ 
$msg = ''; 
if (array_key_exists('userfile', $_FILES)) { 
    // First handle the upload 
    // Don't trust provided filename - same goes for MIME types 
    // See http://php.net/manual/en/features.file-upload.php#114004 for more thorough upload validation 
    $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'])); 
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
     // Upload handled successfully 
     // Now create a message 
     // This should be somewhere in your include_path 
     require 'PHPMailerAutoload.php'; 
     $mail = new PHPMailer; 
     $mail->setFrom('[email protected]', 'First Last'); 
     $mail->addAddress('[email protected]', 'John Doe'); 
     $mail->Subject = 'PHPMailer file sender'; 
     $mail->msgHTML("My message body"); 
     // Attach the uploaded file 
     $mail->addAttachment($uploadfile, 'My uploaded file'); 
     if (!$mail->send()) { 
      $msg = "Mailer Error: " . $mail->ErrorInfo; 
     } else { 
      $msg = "Message sent!"; 
     } 
    } else { 
     $msg = 'Failed to move file to ' . $uploadfile; 
    } 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"/> 
    <title>PHPMailer Upload</title> 
</head> 
<body> 
<?php if (empty($msg)) { ?> 
    <form method="post" enctype="multipart/form-data"> 
     <input type="hidden" name="MAX_FILE_SIZE" value="100000"> Send this file: <input name="userfile" type="file"> 
     <input type="submit" value="Send File"> 
    </form> 
<?php } else { 
    echo $msg; 
} ?> 
</body> 
</html> 
+0

Я работаю над тем, чтобы сделать небольшое дополнение на существующем веб-сайте, который имеет достаточную сумму и ограниченное время с ним, поэтому изменение всего на другую версию phpmailer не очень практично. – AlexRS

+0

Я попытался запустить этот пример, и я получаю ответ «Не удалось переместить файл в/tmp/88d542d578b1fc7dae265b22296701a217343830LIhRZ0» – AlexRS

+0

Так что временная папка вашей системы сломана, или ваш веб-сервер не имеет права на запись на нее - исправьте их и он будет работать. Обновление - это вопрос замены старой версии для новой и изменения одной строки кода. – Synchro

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