我想通过自己的OCaml代码发送电子邮件。
电子邮件将采用HTML格式,因此MIME
将为Content-Type: Multipart/Alternative
。
在我的服务器中,电子邮件smtp服务器由我自己设置并保持私有,这意味着,我不需要任何身份验证或任何身份验证。可能我的ocaml代码只能连接并发送html电子邮件。
我的问题是如何在OCaml中编写此发送电子邮件代码?我应该使用哪个库?
我已考虑Netsmtp
(http://docs.camlcity.org/docs/godipkg/4.00/godi-ocamlnet/lib/ocaml/pkg-lib/smtp/netsmtp.mli)中的OCamlNet
,但似乎无法让我将MIME
设为Content-Type: Multipart/Alternative
。
还有其他建议吗?
答案 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;