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

标签 excel email haskell

我有一个一年多前编写的 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/

相关文章:

r - 如何将 R 数据框中的数据附加到已存在的 Excel 工作表

vba - 无法使用 VBA 从 Power Pivot 数据模型创建数据透视表

c# - 在电子邮件标题中列出取消订阅。如何?

c# - 发送 mhtml 电子邮件 - C#

haskell - Haskell 的绑定(bind)运算符 (>>=) 是否等同于 F# 的正向管道运算符 (|>)?

VBA将自身复制到其他位置

excel - 使用 VBA 筛选 Excel 数据透视表

html - outlook 2010 电子邮件背景颜色 html/css 属性不起作用

haskell - 如何简化这个比较符号的类型级函数?

haskell - 某些问题的最有效解决方案是否需要可变数据?