не могу отправить вложение на phpMailer()

Я использую phpMailer для отправки электронной почты. Когда я прикрепляю $body, электронное письмо отправляется с html в качестве тела, но вложение не отправляется. Затем я удалил $body и установил некоторый текст в тело ($email->Body = 'abcd'), и все было в порядке, вложение и основной текст были отправлены. Я не могу использовать $email->Body = $body; и $email->AddAttachment("img/".$file_name); одновременно.

Это мой код:

<?php 
session_start(); 
$url =  "http://{$_SERVER['HTTP_HOST']}";
$escaped_url = htmlspecialchars( $url, ENT_QUOTES, 'UTF-8' );

if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $tmp=explode('.',$_FILES['image']['name']);
      $file_ext=strtolower(end($tmp));

      $expensions= array("jpeg","jpg","png");

      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }

      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }

      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"img/".$file_name);

      }else{
         print_r($errors);
      }
   }
?>
<?php

$body='<html><body>';
$body.='<img src="'.$escaped_url.'/img/img2.jpg" alt="" height="90" width="200" />'
.$_POST['date'].'';
$body .='<table rules="all" style="border-color: #666;" cellpadding="10">
<tr style="background: #6699FF;">';
$body .='<td><strong>'.$_SESSION["login_user_name"].'</strong> </td>';
$body .='<td>Income (Rs) : '.$_POST['income'].'</td>';
$body .='<td>Expences (Rs) :'.$_POST['expence'].'</td>';
$body .='<td>Balance (Rs) : '.$_POST['balance'].'</td>';
$body .='</tr>
<tr style="background: #eee;">';
$body .='<td><strong>Category</strong> </td>
<td><strong>Item Name</strong></td>
<td><strong>Amount</strong></td>
<td><strong>Image</strong></td>
</tr>
<tr >';
$body .='<td>'.$_POST['cat'].' </td>';
$body .='<td>'.$_POST['name'].'</td>';
$body .='<td>'.$_POST['amount'].'</td>';
$body .='<td>'.$file_name.'</td>';
$body .='</tr>
</table>
</body>
</html>';
?>
<?php
require 'PHPMailer/class.phpmailer.php';
$email = new PHPMailer();
$email->From      = $_SESSION["login_email"];
$email->FromName  = $_SESSION["login_user_name"];
$email->Subject   = 'Daily Summery';
$email->Body      = $body;
$email->IsHTML(true);
$email->AddAddress( '[email protected]' );
$email->AddAttachment($escaped_url."/img/".$file_name);
return $email->Send();
?>

Загрузка файлов работает нормально, я загрузил файл и правильно сохранил его в папке img.


person Tje123    schedule 02.07.2017    source источник
comment
Просто примечание: эта строка в вашем html-коде: <img src="img/img2.jpg"... никогда не будет отображать изображение, когда кто-то откроет электронное письмо. У вас должны быть абсолютные пути в html-письмах. В противном случае пути будут относительными от почтового клиента пользователя.   -  person Magnus Eriksson    schedule 02.07.2017
comment
В вашем заголовке говорится о проблеме с вложениями, в то время как вы, возможно, ищете решение для изображения с внешней ссылкой. Просьба уточнить. Альтернативой тому, что вы ищете, может быть встраивание изображений в тело письма, поэтому не нужно беспокоиться о том, что какое-либо изображение будет перемещено с сервера. Единственным недостатком является то, что размер электронной почты будет увеличиваться.   -  person Mohammed Akhtar Zuberi    schedule 02.07.2017
comment
я обновил свой пост и добавил абсолютные пути для изображений. но та же проблема. я не могу отправить вложение   -  person Tje123    schedule 02.07.2017
comment
Вы не можете использовать URL-адреса в качестве источника для AddAttachment, вы должны использовать абсолютные пути файловой системы. См. github.com/PHPMailer/PHPMailer/wiki/Tutorial.   -  person Josh J    schedule 02.07.2017
comment
Начните с основ — вы не обрабатываете загрузку файлов, как указано в документах PHP, и это небезопасно, потому что вы не проверяете возвращаемое значение move_uploaded_file. Вы можете избавить себя от некоторых проблем, взяв за основу свой код примера send_file_upload, поставляемого с PHPMailer.   -  person Synchro    schedule 03.07.2017


Ответы (1)


Используйте реальный URL-адрес пути в атрибуте src.

<img src="http://example.com/img/img2.jpg" alt="" height="90" width="200" />

Вы должны использовать вот так.

person Sourov Roy Chowdhury    schedule 02.07.2017
comment
Я обновил свой пост и добавил абсолютные пути для изображений. Но та же проблема. - person Tje123; 02.07.2017
comment
Вы используете одинарную цитату prntscr.com/fqpgez, переменная PHP не работает внутри одиночной цитаты. - person Sourov Roy Chowdhury; 02.07.2017
comment
$body.='‹img src='.$escaped_url.'/img/img2.jpg alt= height=90 width=200 /›' Вы можете использовать так. - person Sourov Roy Chowdhury; 02.07.2017