Задать вопрос
@yookky

Attachment и mail.ru?

Добрый день, возникла такая проблема.
Я формирую xls файл при помощи PHPexel и отправляю его на почту пользователя.
На gmail, файл приходит целым и читабельным, а вот на mail.ru
в xls файле я наблюдаю следующие:
а@ApЂА`1@@`ЂCАDрC*@APAРAЂBC*AаA AA°APAРA*Aа@Ђ0CаDCаC@C*`аA@APBBA@°@CаDD CC C*CC*ђCCАCаC D°C CаCp@PРCаCАCPD@0*CаC@A0РCCЂCАCPCРCаC CCРCЂCPB CаC CDC@`*CаC°BР Cа@`C*CЂC@C*C@@`CPCРC@р`CPCРCBCаBC*CЂC@C*CаCђ@PD0CАCАCAD0CАCАCBCаBC*CЂC@C*CаCђ@PpЂpЂ0DB CаCАCDCPDCаB `p@Ђ ђ ЂAРB APA°A*AаAАB `рCDCаDpCPC*B°*D0C°CPC*EР РCCCаDBрCаC0DCPCАD0DЂCPC*Bp*PЂЂђ ЂD B BCPD C*CPB°CPD C*CEР рCаC0DCPCАD0DЂC*CBBЂ0Ђ0`ђрDCаDCPCpD°C CD CPC°DАBА CЂC@CBААCЂDЂC*CBАC°CаCРCЂC*BАРCB°CЂDD CPB°РCB°CЂDD CPEРР`ђ@`` 0`` ђ DCPC0CаBрCаBpCC*CCpD0C**ђЃa°ЬА}`@* ° Ђ A@0P00 @ `ЂfffffncтpЂfffffncтЂЂѓтђЂѓъ @ Ђ%Ђ#33333=3у33333=3рP ЂРААрРА`рРА 0рРА00pрРА@@pрРАPP`рРА`` рРАpp`рРАЂЂр а°*Р*@Р*P ` P `0P `@P `PP ``P `pP `ЂPР* @ Р* P0 ` P ` 0P ` @P ` PP ` `P ` pP ` ЂPР*0@@Р*0PP `0 P `00P `0@P `0PP `0`P `0pP `0ЂPР*P`Р*PpР*P ЂР*P0ђР*P@*Р*PP°Р*P`АР*PpРР*PЂа0 а`яР*`рР*` 0 а`0р0 а`@D0 а`Pф0 а``ffffncґ0 а`pф0 а`Ђffffncґ0 аp0 аp.4Р*p 0 аp0р0 аp@D0 аpP?R…Иф#”0 аp`±Jд~Јd0 аpp?R…Иф#”0 аpЂ±Jд~Јd0 аЂ„0 аЂ

На сервере если открыть сгенерированный xls файл, он там тоже впорядке.
Вот мои хедеры:
$path = '../tmp';
      $filename = "$random_hash.xls";
      $mailto = user@mail.ru;
      $message = "example";
      $subject = "subject text";
      
 
      $file = $path . "/" . $filename;
      $file_size = filesize($file);
      $handle = fopen($file, "r");
      $content = fread($handle, $file_size);
      fclose($handle);
      $content = chunk_split(base64_encode($content));
 
      $separator = md5(time());
 
      // конец строки, константа
      $eol = PHP_EOL;
 
      $headers = "MIME-Version: 1.0" . $eol;
      $headers .= "From: Example <noreply@example.com>" . $eol;
      $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
      $headers .= "Content-Transfer-Encoding: 7bit" . $eol;
      $headers .= "This is a MIME encoded message." . $eol;
 
      // письмо
      $headers .= "--" . $separator . $eol;
      $headers .= "Content-Type: text/plain;  charset=\"utf-8\"" . $eol;
      $headers .= "Content-Transfer-Encoding: 8bit" . $eol;
      $headers .= $message . $eol;
 
      // прикрепление 
      $headers .= "--" . $separator . $eol;
      $headers .= "Content-Type: application/vnd.ms-excel; name=\"" . $filename . "\"" . $eol;
      $headers .= "Content-Transfer-Encoding: base64" . $eol;
      $headers .= "Content-Disposition: attachment; filename=\"" . $filename . "\"" . $eol;
      $headers .= $content . $eol;
      $headers .= "--" . $separator . "--";
 
      //отправка письма
      if (mail($mailto, $subject, "", $headers, "-fnoreply@example.com")) {
         echo "ok!";
      } else {
          echo "mail send ... ERROR!";
      }

Подскажите пожалуйста в чем может быть причина, и как с этим бороться?
  • Вопрос задан
  • 493 просмотра
Подписаться 1 Оценить 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
У multipart/mixed не может быть Content-Transfer-Encoding.
После каждого заголова должна идти пустая строка - перед
$headers .= "This is a MIME encoded message." . $eol;
перед
$headers .= $message . $eol;
и перед
$headers .= $content . $eol;
После конечного сепаратора - тоже.
Строки должны разделяться CRLF, PHP_EOL в Linux это просто LF.
Если это не поможет - опубликуйте конечный eml.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы