Я использую этот скрипт для отправки электронных писем определенному персоналу, но из-за изменений в моей системе я должен теперь отправлять атташе с помощью электронной почты, и я попытался использовать многоуровневые фрагменты кода для этого, но был неудачным … Я все еще получаю электронной почты, но без прикрепления, которое совершенно бессмысленно в этом случае, я разместил сценарий, который я использую ниже
я удалил реальные адреса, которые я использовал, и smtp-сервер
require("PHPMailer/class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP(); // set mailer to use SMTP $mail->Host = "SMTP.SErver.com"; $mail->From = "From@email.com"; $mail->FromName = "HCSC"; $mail->AddAddress("To@email.com", "Example"); $mail->AddReplyTo("Reply@email.com", "Hcsc"); $mail->WordWrap = 50; $mail->IsHTML(false); $mail->Subject = "AuthSMTP Test"; $mail->Body = "AuthSMTP Test Message!"; $mail->AddAttachment("matt.txt"); //this is basicly what i am trying to attach as a test but will be using excel spreadsheets in the production if(!$mail->Send()) { echo "Message could not be sent. <p>"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent";
Я также попробовал несколько других emtods для прикрепления файла, но никто, похоже, не работает, очень полезно
Ваш код выглядит довольно простым и синтаксически правильным. Является ли сценарий возвращением сообщений об ошибках?
Если вы получаете сообщение без каких-либо проблем, проблема не в вашем коде.
Несколько вещей, чтобы проверить:
Если вы используете более новую версию phpMailer, вы можете попробовать поймать все исключения, которые были выбраны (возможно, это не препятствует выходу сообщения, а просто предотвращает включение вложения) с использованием следующего синтаксиса: ( принято из кода примера phpMailer )
require 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer(true); try { $mail->IsSMTP(); // set mailer to use SMTP $mail->Host = "SMTP.SErver.com"; $mail->From = "From@email.com"; $mail->FromName = "HCSC"; $mail->AddAddress("To@email.com", "Example"); $mail->AddReplyTo("Reply@email.com", "Hcsc"); $mail->WordWrap = 50; $mail->IsHTML(false); $mail->Subject = "AuthSMTP Test"; $mail->Body = "AuthSMTP Test Message!"; $mail->AddAttachment("matt.txt"); echo "Message Sent OK<p></p>\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! }
вам необходимо предоставить полный путь к файлу и функции имени файла, за исключением двух / трех аргументов
// Setup mail class, recipients and body $mailer->AddAttachment('/home/mywebsite/public_html/file.zip', 'file.zip');
Хорошо, это еще не закрыто, поэтому я подумал, так как у меня была такая же проблема, я бы дал вам мое решение, которое сработало для меня. Я считаю, что предыдущая почтальона была права. Вам нужно определить абсолютный путь к вашему файлу. Это не всегда легко сделать, особенно если вы работаете на общем сервере. В любом случае я вложил следующий код на свою страницу, и он повторил точный путь к этой странице. Оттуда было легко разобраться, как сбросить уровень в каталог, в котором хранятся файлы, которые я хотел подключить.
'var_dump(stream_resolve_include_path("Thankyou.php"));'
Просто скопируйте и вставьте эту строку и поместите ее на свою страницу, вставьте имя своей страницы и замените Thankyou.php, который я вставил (сохраняйте речевые метки). Запустите страницу и получите абсолютный путь. Просто удалите его послесловие и вставьте новый путь в сегмент AddAttachment PHPMailer.