如何通过设置`Content-Type:Multipart / Alternative`在OCaml中发送电子邮件

时间:2013-06-17 21:43:51

标签: ocaml

我想通过自己的OCaml代码发送电子邮件。

电子邮件将采用HTML格式,因此MIME将为Content-Type: Multipart/Alternative

在我的服务器中,电子邮件smtp服务器由我自己设置并保持私有,这意味着,我不需要任何身份验证或任何身份验证。可能我的ocaml代码只能连接并发送html电子邮件。


我的问题是如何在OCaml中编写此发送电子邮件代码?我应该使用哪个库?


我已考虑Netsmtphttp://docs.camlcity.org/docs/godipkg/4.00/godi-ocamlnet/lib/ocaml/pkg-lib/smtp/netsmtp.mli)中的OCamlNet,但似乎无法让我将MIME设为Content-Type: Multipart/Alternative

还有其他建议吗?

2 个答案:

答案 0 :(得分:3)

使用Ocamlnet / NetSendMail

let s_html = "<html>...</html>";;

let body = (Netsendmail.wrap_attachment ~content_type:("text/html", [])
                                        (new Netmime.memory_mime_body s_html))::[];;

let email = Netsendmail.wrap_mail
        ~from_addr:fa
        ~to_addrs:ta
        ~out_charset:`Enc_utf8
        ~subject:subject
               (
                Netsendmail.wrap_parts 
                ~content_type:("multipart/mixed",[])
                body);;

 Netsendmail.sendmail ~mailer:"/usr/sbin/sendmail" email;;

您可以添加单独的部分:

let add_part other_parts =  (Netsendmail.wrap_parts ~content_type:("multipart/mixed",[]))@other_parts

答案 1 :(得分:0)

在SMTP协议中,消息的正文和标题是使用DATA命令发送的,因此您可以在同一个字符串中伪造标题和正文,并使用Netsmtp库使用data命令发送它们。

let email_header = "\
From: John <john@example.com>\r\n\
To: Rob <rob@example.com>\r\n\
Subject: Hello\r\n\
Content-Type: Multipart/Alternative" in
let email_msg = "<h1>Hi Rob</h1>" in
let data = email_header ^ "\r\n\r\n" ^ email_msg;