2010-04-15 2 views
0

Код, указанный ниже, отправляет CSV нашим пользователям, выполняющим печать, в течение многих лет. Начиная с недели, sysadmin переключился с sendmail на qmail по причинам, связанным с рецептами procmail, которые мы хотим запустить.Некоторые почтовые клиенты видят пустое вложение CSV из PHP mail() после переключения с sendmail на qmail

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

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

Я перешел коду в 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 <[email protected]>\r\nReply-To: [email protected]\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); 

ответ

1

Я думаю, что это проблема/LF CR, которая является известная ошибка в 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 в будущем утка;)

+0

Я изначально Perl человек сам. Когда Perl - ваш молот, мир выглядит, ну, мир. Спасибо за ссылки и информацию! – jerrygarciuh

Смежные вопросы