У меня возникли проблемы с получением 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 в этом случае), но я также не уверен точно, как и где их реализовать.
Кроме того, я только поменял $ и $ на электронные письма. Почему это всегда будет не в состоянии отправить? Все, что я хочу сделать, это отправить текстовое электронное письмо либо с приложением электронной почты, либо без него.
У меня создалось впечатление, что файл должен быть помещен где-то как папка для загрузки, прежде чем отправлять его по электронной почте. Я просто попытался передать в $ tmp_name, как вы сказали, и письмо наконец прошло, но без вложения (после комментирования бит move_uploaded_file). – glitchbox
Файл, загруженный пользователями и файлами, отправленными в виде вложений электронной почты с помощью phpmailer, полностью независим. PHPMailer должен знать, где находится файл - полный путь, чтобы прочитать его и прикрепить. Итак, ваша задача - передать правильный путь к методу AddAttachment. Если вы перемещали файл только для его отправки, полностью удалите этот код обработки файлов и просто используйте '$ _FILES ['file'] ['tmp_name']' в качестве параметра. –
Спасибо! Меня это раздражало на прошлый день. – glitchbox