Используйте PHPmailer для отправки вложения

Я использую библиотеку PHPmailer для отправки электронных писем, и мне нужно отправить вложение.

В настоящее время файл хранится на сервере, и у меня есть ссылка на файл, сохраненный в var $link,

Я использую следующее, чтобы попытаться добавить вложение, но письмо приходит без вложения:

$phpmailer->AddAttachment('$link');

Я также попробовал это с жестко закодированным путем вместо моей переменной:

$phpmailer->AddAttachment('http://mysite.co.uk/link/to/my/file.pdf');

Письмо появляется, но не имеет никаких вложений.

Я пытался использовать phpmailerException захватить любые ошибки, но не получить ответа.

Как еще я могу отправить вложение с помощью PHPmailer?

Полный код PHP:

require_once 'library/PHPMailer.php';
$phpmailer = new PHPMailer();
$phpmailer->isSMTP(); //switch to smtp
$phpmailer->Host = 'smtp.sendgrid.net';
$phpmailer->SMTPAuth = true;
$phpmailer->SMTPSecure = 'ssl';
$phpmailer->Port = 465;
$phpmailer->Username = 'username';
$phpmailer->Password = 'password';
$phpmailer->AddAttachment('http://mysite.co.uk/blah/cv.pdf');
//$phpmailer->AddAttachment('$link');

$subject = 'Job Application';

$messageConfirmation = "The <b> 'Apply for Job' </b> form has recently been completed on <b>www.mysite.com.</b><br/><br/> <b>Please see contact details below:<br /><br/> </b>";
$messageConfirmation.= "<b>Applying for:</b> $title <br/><br/>";
$messageConfirmation .= "<b>Name:</b> $name <br/><br/><b>Surname:</b> $surname <br/><br/> <b>Email:</b> $email <br/><br/> <b>Comment:</b> $comment <br/><br/>";
$messageConfirmation .= "<b>CV:</b> $link<br /><br />";
$messageConfirmation .= "Please can you call them back in the next 24 hours. <br/><br/> Thank you \n\nMy Site<br/><br/>";$imgheader = 'http://blah.co.uk/blah/wp-content/uploads/2014/11/header.png';
$imgfooter = 'http://blah.co.uk/blah/wp-content/uploads/2014/11/footer.png';

$message = '<!DOCTYPE HTML>'.
'<head>'.
'<meta http-equiv="content-type" content="text/html">'.
'<title>Email notification</title>'.
'</head>'.
'<body>'.
'<div id="header" style="width: 600px;height: auto;margin: 0 auto;color: #fff;text-align: center;font-family: Open Sans,Arial,sans-serif;">'.
'<img src="'.$imgheader.'" >'.
'</div>'.

'<div id="outer" style="width: 600px;margin: 0 auto;margin-top: 10px;">'.
'<div id="inner" style="width: 600px;margin: 0 auto; padding-left: 20px;background-color: #fff;font-family: Open Sans,Arial,sans-serif;font-size: 13px;font-weight: normal;color: #444;margin-top: 10px;">'.
'<p>'.$messageConfirmation .'</p>'.

'</div>'.
'</div>'.

'<div id="footer" style="width: 600px;height: auto;margin: 0 auto;text-align: center;padding: 10px;font-family: Verdena;">'.
'<img src="'.$imgfooter.'" >'.
'</div>'.
'</body>';$phpmailer->IsHTML(true);
$phpmailer->AddAddress(CONTACTUSFORMEMAIL);
$phpmailer->From = CONTACTUSFORMEMAIL;
$phpmailer->FromName ='blah';
$phpmailer->WordWrap   = 50; // set word wrap to 50 characters
$phpmailer->Subject    = $subject;
$phpmailer->Body       = $message;
$phpmailer->Send();$data['success'] = true;
$data['message'] = 'Thank you for your application';

-1

Решение

Проблема в том, что функция Добавить приложение использует функцию is_file () и если при обращении к URL-адресу файл возвращает false (это также относится к относительным URL-адресам), is_file () принимает только пути к файлам. Поэтому обычно phpmailer должен добавить ошибку в контейнер ошибок.

1

Другие решения

Привет, пожалуйста, попробуйте следующий код

<?php
$mail = new PHPMailer();
$mail->From = $email_from;
$mail->SetFrom($email_from, $name_from);
$mail->AddAddress($email_to, $name_to);
$mail->AddReplyTo($email_from, $name_from);
$mail->MsgHTML($message_goes_here);
$mail->Subject = $your_subject;
$mail->AddAttachment($file_name_goes_here);
if($mail->Send()) {
} else {
echo "\r\nMail not sent. " .  $mail->ErrorInfo;
}
?>
1

Метод Добавить приложение получает путь к файлу.

Если вы увидите исходный код, вы увидите, что он использует функцию fopen для открытия файла, поэтому, я думаю, что он не работает со ссылками, вы должны загрузить файл самостоятельно и указать путь к функции.

0

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

PHPMailer будет генерировать исключения, только если вы включите их при создании $mail = new PHPMailer(true);и, как сказал @TheGreenKey, он установит уведомление об ошибке и выдаст сообщение об ошибке, если вы включите отладку.

Если вы хотите добавить содержимое URL в качестве вложения, вы можете сделать это:

$mail->addStringAttachment(file_get_contents('http://mysite.co.uk/link/to/my/file.pdf'), 'cv.pdf');`

Это никогда не будет быстрым, надежным или эффективным, хотя.

-1
По вопросам рекламы [email protected]