Некоторые почтовые клиенты видят пустое CSV-вложение из PHP mail() после переключения с sendmail на qmail

StackOverflow https://stackoverflow.com/questions/2647196

  •  27-09-2019
  •  | 
  •  

Вопрос

Приведенный ниже код уже много лет рассылает CSV нашим специалистам по выполнению печатных работ.В начале недели системный администратор переключился с sendmail на qmail по причинам, связанным с рецептами procmail, которые мы хотим запустить.

Вероятно, не случайно мы начали слышать, что люди из fulfillment видят пустые CSV, даже когда другие пользователи, зарегистрированные по почте, видят записи.Люди с проблемой видели вложение и могли открыть его, но их MUI указывал его как 131 байт или ноль байт.

Мы начали отправлять сообщения на адрес Yahoo с теми же результатами.Однако Gmail видит вложение с правильными строками.Имейте в виду, что это все одно зашифрованное электронное письмо с разными результатами в зависимости от почтовых клиентов.

Я просмотрел код в vi и убедился, что там нет символов ^M или другого ненужного управляющего символа.

Кто-нибудь видел это раньше?Любые предложения приветствуются!

Спасибо!

$message = "Here is the file (comma-separated values) of addresses for\n";
$message .= $pm_row['title'] . " Requests ($now_YmdHMS).\n\n";
$data_email = $pm_row['fulfillment_data_email'];
$data_email_cc = "$pm_row[fulfillment_data_email_cc],$developer_email";
$subject = $pm_row['title'] . " Requests ($now_YmdHMS)";
$random_hash = md5(date('r', time()));
$headers = "From: XXX <tourism@xxx.org>\r\nReply-To: tourism@xxx.org\r\nCc:$data_email_cc"; 
$headers .= "\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents($filename)));
$output = "
--PHP-mixed-$random_hash; 
Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
--PHP-alt-$random_hash
Content-Type: text/plain; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

$message

--PHP-alt-$random_hash 
Content-Type: text/html; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

$message

--PHP-alt-$random_hash--

--PHP-mixed-$random_hash
Content-Type: application/zip; name=$now_YmdHMS.$pm_row[handle].csv
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment
--PHP-mixed-$random_hash--";

mail($data_email, $subject, $output, $headers);
Это было полезно?

Решение

Я думаю, что это проблема CR / LF, которая является известной ошибкой в php около трех лет и, насколько я знаю, до сих пор не исправлена:

http://bugs.php.net/bug.php?id=15841

Сгенерированное электронное письмо недействительно (объяснение можно найти здесь: http://cr.yp.to/docs/smtplf.html ), из-за использования не соответствующего RFC формата прерывания строки.Другие MTA, такие как sendmail и postfix, исправляют эту проблему автоматически;qmail этого не делает.

Вы можете либо:пишите правильные письма с помощью php (лол), или попросите вашего qmail-администратора использовать QmailScanner ( http://qmail-scanner.sourceforge.net/ ), который тоже выполняет эту работу.

Лучшим решением было бы деинсталлировать php и использовать perl в будущем утка ;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top