2010-04-15 20 views
0

Le code ci-dessous envoie des fichiers CSV à nos clients de l'impression depuis des années. Au début de la semaine, sysadmin est passé de sendmail à qmail pour des raisons liées aux recettes procmail que nous voulons utiliser. Probablement pas par coïncidence, nous avons commencé à entendre dire que les gens de l'accomplissement voyaient des CSV vides même lorsque d'autres CCED sur le courrier voyaient les enregistrements. Les gens avec le problème voyaient la pièce jointe et pouvaient l'ouvrir mais leur MUI l'énumérait comme 131 octets ou zéro octet.Certains clients de messagerie voient la pièce jointe au format CSV vide de PHP mail() après le passage de sendmail à qmail

Nous avons commencé à envoyer à une adresse Yahoo avec les mêmes résultats. Cependant, Gmail voit une pièce jointe avec des lignes correctes. Rappelez-vous ceci est tout un email CCed avec des résultats différents en fonction des clients de messagerie.

J'ai parcouru le code de vi et vérifié qu'il n'y avait pas de caractères^M ou d'autres caractères de contrôle.

Quiconque a déjà vu ça? Toutes les suggestions sont les bienvenues!

Merci!

$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); 

Répondre

1

Je pense qu'il est un problème CR/LF, qui est un bug connu en php pendant environ trois ans et -autant que je savoir- n'a pas été fixée jusqu'à présent

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

L'email généré n'est pas valide (l'explication peut être trouvée ici: http://cr.yp.to/docs/smtplf.html), en raison de l'utilisation d'un format de ligne non-conforme RFC. D'autres MTA comme sendmail et postfix corrigent automatiquement ce problème; qmail ne le fait pas.

Vous pouvez: écrire corriger mails avec php (lol), ou demandez à votre qmail-administrateur d'utiliser le QmailScanner (http://qmail-scanner.sourceforge.net/), qui est en train de faire ce travail aussi.

La meilleure solution serait de php et utiliser deinstall perl dans le futur canard;)

+0

Je suis originaire moi-même l'homme Perl. Quand Perl est votre marteau, le monde ressemble au monde. Merci pour les liens et les informations! – jerrygarciuh