我一直在阅读Network.Mail.SMTP的文档,以发送电子邮件。我的问题出现在代码开始运行之后我收到一条消息说
socket 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 :(得分: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
"myemailaddress@gmail.com"
"password"
conn
when success
$ sendPlainTextMail "to" "from" "Test" "test" conn
使用非常简单建立连接,通过身份验证发送电子邮件,如果您有附件使用sendMimeMail
或sendMimeMail'
,或者如果您想使用现有的Mail
类型已构建使用sendMimeMail2
。
如果您还没有看到bracket
它是try..finally
的(相当优雅的)haskell变体 - 它只是确保连接已关闭。