@nikkon82

Как корректно настроить поле From при отправке письма с сайта?

Доброго времени суток!
Есть файл с обработкой и отправкой письма с вложенным файлом.
В нем есть условие
// Отправляем почтовое сообщение 
  if(empty($file_tepl)) mail($mail_to,"=?UTF-8?B?" . base64_encode ($thm). "?=",$msg,"Content-type:text/html; charset = utf-8\r\nFrom:$thm <$email>"); 

  else send_mail($mail_to,"=?UTF-8?B?" . base64_encode ($thm). "?=",$msg,$file_tepl,"Content-type:text/html; charset = utf-8\r\nFrom:$thm <$email>");


где $thm - это и есть то, что должно быть в поле From (От кого) в почтовике.

При отправке без файла, все работает нормально. Но при отправке письма с файлом, "От кого" приходит
noreply@unverified... Подозреваю, что дело в функции send_mail - видимо не хватает или некорректно прописаны заголовки.

Подскажите пожалуйста, что и куда дописать или исправить. Код функции send_mail ниже

function send_mail($to, $thm, $html, $path) 
  { 
    $fp = fopen($path,"r"); 
    if (!$fp) 
    { 
      print "Файл $path не может быть прочитан"; 
      exit(); 
    } 

    $file = fread($fp, filesize($path)); 
    fclose($fp); 
 
    $boundary = "--".md5(uniqid(time())); // генерируем разделитель 
    $headers .= "MIME-Version: 1.0\n"; 
    $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 
    $multipart .= "--$boundary\n"; 
    $kod = 'utf-8'; 
    $multipart .= "Content-Type: text/html; charset=$kod\n"; 
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 
    $multipart .= "$html\n\n"; 
    $message_part = "--$boundary\n"; 
    $message_part .= "Content-Type: application/octet-stream\n"; 
    $message_part .= "Content-Transfer-Encoding: base64\n"; 
    $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; 
    $message_part .= chunk_split(base64_encode($file))."\n"; 
    $multipart .= $message_part."--$boundary--\n"; 

    if(!mail($to, $thm, $multipart, $headers)) 
    { 
      echo "К сожалению, письмо не отправлено"; 
      exit(); 
    } 
  }

Спасибо
  • Вопрос задан
  • 461 просмотр
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас в первом случае (файла нет) функция вызывается с четырьмя аргументами и заголовки попадают в переменную $path, во втором (файл есть) - с пятью, заголовки вообще пропадают.
И ещё, в поле From переменная $thm тоже должна быть закодирована в base64, если в ней есть символы с кодами выше 127.
P.S. Поправил, сначала проглядел количество параметров.
Ответ написан
Комментировать
Если это не одноразовое что то. Лучше сразу поставить https://swiftmailer.symfony.com/ и сделать всего через нее.
Ответ написан
Комментировать
@Vallefor
Еще можно поставить PHPMailer - https://github.com/PHPMailer/PHPMailer
С mail() 100% испытаете боль и не раз.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы