Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在Haskell中使用simplemail会引发断管错误_Excel_Email_Haskell - Fatal编程技术网

Excel 在Haskell中使用simplemail会引发断管错误

Excel 在Haskell中使用simplemail会引发断管错误,excel,email,haskell,Excel,Email,Haskell,我有一个Haskell程序,我在一年多前写的,一直运行良好,直到几个月前 什么改变了?该程序使用SpreadsheetML(我是其中的一个参与者)构建一系列Excel报告文件,并将其作为附件发送到用户列表中。该程序由逗号分隔的文本文件控制,其中每行表示一份报告,并包含报告标题、数据库关键字列表(以|分隔)和收件人电子邮件地址列表(也以|分隔) 三个月前,对该文件进行了重组,以更改生成的报告及其分发对象。从那时起,文件中的一行由于管道中断错误而终止了程序。来自程序的错误消息为: CreateExc

我有一个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
。。。这将转化为报告标题“销售欧洲-非洲”,以及数据库关键字和电子邮件收件人列表。如果我将报告标题更改为“TEST”,它将正常工作;但是,同一文件中还有一行报告标题为“南北美洲销售”,该报告运行良好

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

解决了

通过一个迂回的过程,我发现从原始源代码简单地重建应用程序就解决了这个问题。为了完成重建,我必须重新安装几个依赖项,但原始代码中没有一个字符被更改


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

我认为你建立邮件的方式(一开始地址是空的)有点古怪,但我想这不重要。您是否尝试使用内存中版本的SimpleEmail来排除懒惰IO问题?请澄清,这里的问题发生在14行文件的一行上。如果我把这一行放在文件的最后一行,那么会生成13份报告并通过电子邮件发送,而不会出现问题。如果我更改此行中报告的标题,则不会出现错误。也许我被卡住了,看不到它,但我无法想象更改报告标题的字符串会使程序崩溃。我觉得问这个问题很傻,因为在我看来这个问题不可能存在。然而,我已经与之抗争了三个月,就在今天,我意识到是报告标题导致了这次崩溃。不可能,但确实是。真奇怪!一定是有什么东西出了问题,或者是你升级的软件包中修复了一个bug。
Sales-Europe-Africa, Sales/Thijssen|Sales/Pecqueur|Sales/van den Bos|Sales/Zuyderduyn|Sales/Marksman, user1@example.com|user2@example.com