2014-02-03 12 views
0

У меня возникли проблемы с получением PHPMailer для отправки электронной почты с вложением изображения, которое пользователь представляет. Я просто получаю сообщение «Ошибка почты» каждый раз, когда он пытается отправить. Я просто не вижу, что происходит. Ошибок в error_log нет, он просто терпит неудачу каждый раз.Отправка электронной почты с приложением через PHPMailer

HTML ввода дело с приложением изображения:

<input type="file" name="file" placeholder="Choose an image." id="imageupload" accept="image/jpeg" /> 

PHP код:

<?php 

// Make sure logged in 
include('../php_scripts/login-required.php'); 
// Make sure posted 
if (!$_POST) { 
    header('location: ./404.php'); 
} 
// Include PHPmailer 
require 'site_includes/PHPMailer/class.phpmailer.php'; 

// Get variables 
$offertype = $_POST['ot']; 
if ($offertype == 1) { 
    $offertype = 'Discount'; 
} elseif ($offertype == 2) { 
    $offertype = 'Free'; 
} else { 
    $offertype = 'Not set'; 
} 
$offerdetail = $_POST['od']; 
// Check for errors 
if (!isset($offertype) || empty($offertype)) { 
    $errors = 1; 
    header('location: ./create-advert.php?errors=' . $errors . '&ot=' . $offertype . '&od=' . $offerdetail); 
} elseif (!isset($offerdetail) || empty($offerdetail)) { 
    $errors = 2; 
    header('location: ./create-advert.php?errors=' . $errors . '&ot=' . $offertype . '&od=' . $offerdetail); 
} 

// Get variables from database 
include('../php_scripts/db-connect.php'); 
include('../php_scripts/get-userinfo.php'); 

// Set mail variables 
$reply  = $email; 
$replyname = $fullname; 
$to   = '[email protected]'; 
$toname  = 'John Doe'; 
$from  = '[email protected]'; 
$subject = 'New Advert Request'; 
$message = 'Name: ' . $fullname . "\r\n" . "Company: " . $company . "\r\n" . "Phone: " . $phone . "\r\n" . "Email: " . $email . "\r\n\r\n" . $offertype . "\r\n" . "--------------------------------------------------" . "\r\n\r\n" . $offerdetail; 

if (isset($_FILES['file'])) { 

    // Get attachment and upload 
    $tmp_name = $_FILES['file']['tmp_name']; 
    $name = $_FILES['file']['name']; 
    move_uploaded_file($tmp_name, "uploads/$name"); 

    // Send email with attachment 
    $mail = new PHPMailer; 

    $mail->From = $from; 
    $mail->addAddress($to, $toname); 
    $mail->addReplyTo($reply, $replyname); 
    $mail->WordWrap = 50; 
    $mail->addAttachment(
     '/uploads/' . $name, 
     $name, 
     'base64', 
     'mime/type' 
    ); 
    $mail->Subject = $subject; 
    $mail->AltBody = $message; 

    if (!$mail->send()) { 
     echo 'Mail Error!'; 
     exit; 
    } else { 
     echo 'Message has been sent!'; 
    } 
} 

>

Я также знаю, что я должен создать массив для допустимых расширений файлов (только?. jpg или .jpeg в этом случае), но я также не уверен точно, как и где их реализовать.

Кроме того, я только поменял $ и $ на электронные письма. Почему это всегда будет не в состоянии отправить? Все, что я хочу сделать, это отправить текстовое электронное письмо либо с приложением электронной почты, либо без него.

ответ

1

Похоже, вы пытаетесь отправить файл из корневой директории /uploads:

$mail->addAttachment(
    '/uploads/' . $name, 

будет легче отправить по электронной почте перед перемещением файла, передавая $tmp_name в качестве первого параметра addAttachment() метода. Или, необязательно, обязательно укажите правильный путь к файлу после того, как вы переместили его для загрузки каталога. (wild guess: "./uploads/$name" - точка означает текущий каталог).

Кроме того, вы можете попробовать проверить $mail->ErrorInfo для получения более подробной информации об ошибке.

+0

У меня создалось впечатление, что файл должен быть помещен где-то как папка для загрузки, прежде чем отправлять его по электронной почте. Я просто попытался передать в $ tmp_name, как вы сказали, и письмо наконец прошло, но без вложения (после комментирования бит move_uploaded_file). – glitchbox

+0

Файл, загруженный пользователями и файлами, отправленными в виде вложений электронной почты с помощью phpmailer, полностью независим. PHPMailer должен знать, где находится файл - полный путь, чтобы прочитать его и прикрепить. Итак, ваша задача - передать правильный путь к методу AddAttachment. Если вы перемещали файл только для его отправки, полностью удалите этот код обработки файлов и просто используйте '$ _FILES ['file'] ['tmp_name']' в качестве параметра. –

+1

Спасибо! Меня это раздражало на прошлый день. – glitchbox

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