2017-09-01 145 views
2

我一直在阅读Network.Mail.SMTP的文档以发送电子邮件。我的问题而来的代码开始运行,我得到一个消息,说以后无法用Network.Mail.SMTP发送电子邮件

插座11:文件

的Data.ByteString.hGetLine结束当我检查收件人的电子邮件地址和发送的收件箱文件夹发送电子邮件的文件夹,没有消息正在发送。我能做些什么来使这些代码能够完成工作。我发布了代码并省略了一些敏感部分。

import Network.Mail.Mime 

import Network.Mail.SMTP 

import qualified Data.Text as T 

import qualified Data.ByteString as B 

import qualified Data.ByteString.Lazy as BL 

mFrom = Address (Just $ T.pack "FirstName LastName") (T.pack "Sender's Email") 

mTo = [Address Nothing (T.pack "Recipient Email")] 

mCC = [] 

mBCC = [] 

mHeader = [(B.empty, (T.pack "Test Header"))] 

pType = T.empty 

pEncoding = None 

pFilename = Nothing 

pHeader = [(B.empty, T.pack "Test Part Header")] 

pContent = BL.empty 

pPart = Part pType pEncoding pFilename pHeader pContent 

alternative =[pPart] 

mParts = [alternative] 

mMail = Mail mFrom mTo mCC mBCC mHeader mParts 

a = sendMailWithLogin' "smtp.gmail.com" 465 "Sender Email" "Sender Password" mMail 

main = a 
+0

您是否尝试过使用空列表,而不是当前定义的'mParts' – epsilonhalbe

+0

刚刚尝试过,结果没有改变。 –

+0

你尝试过使用'simpleMail'吗? – epsilonhalbe

回答

0

我能重现错误,但老实说,我不知道为什么会这样,也许它与加密该怎么办,我想谷歌禁止不具有(但是,这只是一个猜测)。

但因为我想起了已经发送一些电子邮件,在过去的Haskell - 我翻出了一些旧代码:注意这个使用HaskellNet

{-# LANGUAGE OverloadedStrings #-} 
module Main where 

import Control.Monad (when) 
import Control.Exception (bracket) 
import Network.HaskellNet.SMTP.SSL 

main :: IO() 
main = bracket 
     (connectSMTPSSL "smtp.gmail.com") 
     closeSMTP $ \conn -> 
      do success <- authenticate LOGIN 
             "[email protected]" 
             "password" 
             conn 
       when success 
        $ sendPlainTextMail "to" "from" "Test" "test" conn 

的使用是非常简单的建立一个连接,验证了它送你电子邮件,如果你有附件使用sendMimeMailsendMimeMail'或者如果你想使用现有的Mail类型,你已经建立使用sendMimeMail2

如果你还没有看到bracket这是(相当优雅的)haskell变种try..finally - 它只是确保连接关闭。

+0

所以我复制/粘贴到我的编辑器中,并用它的真实值代替所有东西并运行它。它运行时没有错误,但没有发送电子邮件。有什么我可能做错了吗? –

+0

你可以改变'if success then..else..'并检查验证是否失败 – epsilonhalbe