无法使用Network.Mail.SMTP发送电子邮件

时间:2017-09-01 04:30:17

标签: email haskell

我一直在阅读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

1 个答案:

答案 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

使用非常简单建立连接,通过身份验证发送电子邮件,如果您有附件使用sendMimeMailsendMimeMail',或者如果您想使用现有的Mail类型已构建使用sendMimeMail2

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