在Haskell中使用简单邮件抛出损坏的pipe道错误

我有一年前写过的Haskell程序,运行良好,直到几个月前。

什么改变了? 该程序使用SpreadsheetML(我是贡献者)构build一系列Excel报告文件,并以附件的forms通过电子邮件发送给用户列表。 该程序由逗号分隔的文本文件控制,每行代表一个报告,并包含报告标题,数据库关键字列表(用|分隔)以及收件人电子邮件地址列表(也用|分隔)。

三个月前,这个文件进行了重组,以改变生成的报告和分发给谁。 从那以后,文件中的一行将会破坏pipe道错误的程序。 该程序的错误信息是:

CreateExcel: fd:7: hPutBuf: resource vanished (Broken pipe) 

该程序接受一个命令行参数来控制是否发送报告。 如果此参数为False,则不会调用sendReport方法(以下),也不会报告错误。 因此,我相信在sendReport调用之前的一切都是可靠的。 这是产生错误的代码:

 makeAddress :: String -> Address makeAddress addr = Address Nothing (T.pack addr) sendReport :: String -> [String] -> String -> IO () sendReport file to title = do simplemail <- simpleMail (Address Nothing (T.pack "")) (Address Nothing (T.pack "")) (T.pack ("CDC/Groth Training Report: " ++ title)) (L.pack ("The attachment contains your training report for" ++ title ++ ".")) (L.pack ("The attachment contains your training report for <u>" ++ title ++ "</u>.")) [(T.pack "application/xml", file)] let mail = simplemail { mailFrom = Address (Just (T.pack "Order Fulfillment")) (T.pack "order_fulfillment@brindlewaye.com"), mailTo = map makeAddress to, mailCc = [], mailBcc = [Address (Just(T.pack "Dave Smith")) (T.pack "dave@brindlewaye.pair.com")] } mailStream <- renderMail' mail sendmail mailStream 

当报告错误时,电子邮件确实发送,但没有Excel文件附件。 而且,在报告错误之后,程序退出并且不在其下面的行被处理。

报告驱动程序文件导致崩溃的行是:

 Sales-Europe-Africa, Sales/Thijssen|Sales/Pecqueur|Sales/van den Bos|Sales/Zuyderduyn|Sales/Marksman, user1@example.com|user2@example.com 

…这意味着“销售 – 欧洲 – 非洲”的报告标题以及数据库关键字和电子邮件收件人列表。 如果我将报告标题更改为“testing”,则可以使用; 但是,报告标题为“Sales-North-South-Americas”并且报告运行良好的同一文件中还有另一行。

有人看到我错过了什么?

解决了!

通过一个迂回的过程,我发现简单地从原始源重build应用程序已经解决了这个问题。 为了完成重build,我不得不重新安装一些依赖项,但原始代码中没有一个字符被改变了。

新的可执行文件没有在这里报告的问题。 感谢大家的build议。

Interesting Posts