1

我正在尝试使用以下代码从 Clojure 发送电子邮件:

发送电子邮件的辅助函数:

(defn- send [recipient from subject msg host content-type & attachments]
  (let [att-ds (map (fn [at] {:ds (ByteArrayDataSource. (:source at)
                                                        (:type at))
                              :name (:name at)
                              :description (:description at)})
                    attachments)
        mpmail (MultiPartEmail.)]
    (doto mpmail
      (.setHostName host)
      (.setFrom from)
      (.setSubject subject)
      (.setContent msg content-type)
      (.setCharset "utf-8"))
    (.addTo mpmail recipient)
    (doseq [ds att-ds]
      (.attach mpmail (:ds ds) (:name ds) (:description ds)))
    (.send mpmail)))

用法:

(send "sender@my.domain" 
      "recipient@my.domain" 
      "SUBJECT"
      "MSG"
      "my.smtp.server"
      "text/plain"
      {:source (.getBytes "Attachment") 
      :type "text/plain"
      :name "test.txt"
      :description "test"})

从 REPL(或我的应用程序)运行上述内容会导致接收者@my.domain 收到主题为“SUBJECT”和正文“MSG”但没有任何附件痕迹的电子邮件。任何地方都不会引发异常。

我已经用两个不同的 smtp 服务器试过了。

谢谢你的帮助。

4

2 回答 2

3

尝试替换(.setContent msg)(.setMsg msg). 可能是当您调用setContent它时认为您手动设置内容并忽略以下attach方法。

于 2012-07-30T12:06:05.733 回答
0

尝试使用我的代码片段http://middlesphere-1.blogspot.ru/2014/11/clojure-how-to-send-mail-with-attachment.html

附件文件名可以是 unicode。

于 2014-11-07T18:33:38.337 回答