gpt4 book ai didi

excel - 在 Haskell 中使用 simplemail 会引发管道损坏错误

转载 作者:行者123 更新时间:2023-12-02 21:44:30 25 4
gpt4 key购买 nike

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

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

三个月前,该文件进行了重组,以更改生成的报告及其分发对象。从那时起,文件中的一行就因管道损坏错误而终止了程序。程序的错误消息是:

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

...翻译为“销售-欧洲-非洲”报告标题以及数据库关键字和电子邮件收件人的列表。如果我将报告标题更改为“测试”,它就会起作用;但是,同一文件中还有另一行,其中报表标题为“Sales-North-South-Americas”,并且该报表运行良好。

有人看到我错过了什么吗?

最佳答案

解决了!

通过一个迂回的过程,我发现只需从原始源重建应用程序就可以解决问题。为了完成重建,我必须重新安装几个依赖项,但原始代码的一个字符都没有改变。

新的可执行文件没有此处报告的问题。感谢大家的建议。

关于excel - 在 Haskell 中使用 simplemail 会引发管道损坏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30609142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com