使用 Nim 语言发送邮件

255 阅读1分钟

Nim编程早茶

这一节我们介绍如何使用 Nim 语言发送邮件。

同步程序

最近尝试了 smtp 标准库发送邮件。首先尝试了 163 邮箱,可以登录账户,却不能发送邮件。如果有人尝试成功了,欢迎在群里分享方案。

之后尝试了 QQ 邮箱,发送成功,在此记录几点注意事项。首先需要到 QQ 邮箱的设置中,开启 IMAP/SMTP服务 ,并记录授权码,这是你登陆的密码。

使用 -d:ssl 编译程序,安全登录邮箱,对应端口 465

import smtp

# 连接 ssl 开启 debug 模式
var client = newSmtp(useSsl=true, debug=true)
echo "start"
# 连接 qq smtp 服务器 
client.connect("smtp.qq.com", Port(465))
echo "connect"
# 账号 密码
client.auth("你的 qq 邮箱账号", "你申请的的授权码")
echo "auth"
# 标题 内容 目标邮箱
let msg = createMessage("你好, from Nim's SMTP", "让我们学习 Nim 语言", @["目标邮箱"])
client.sendMail("你的 qq 邮箱账号", @["目标邮箱"], $msg)
echo "finish"

输出:

start
S:220 smtp.qq.com Esmtp QQ Mail Server
C:HELO smtp.qq.com

S:250 smtp.qq.com
connect
C:AUTH LOGIN

S:334 VXNlcm5hbWU6
C:MTE2OTMzNjE5OEBxcS5jb20=

S:334 UGFzc3dvcmQ6
C:Y3lvb2lrYW5hZnF3aWdqYg==

S:235 Authentication successful
auth
C:MAIL FROM:<@qq.com>

S:250 Ok
C:RCPT TO:<@qq.com>

S:250 Ok
C:DATA

S:354 End data with <CR><LF>.<CR><LF>
C:.

S:250 Ok: queued as
finish

异步函数

异步程序和同步程序基本没有区别。

import smtp, asyncdispatch


proc test_async_stmp() {.async.} =
  var client = newAsyncSmtp(useSsl=true, debug=true)
  echo "start"
  await client.connect("smtp.qq.com", Port(465))
  echo "connect"
  await client.auth("你的 qq 邮箱账号", "你申请的的授权码")
  echo "auth"
  let msg = createMessage("你好, from Nim's SMTP", "让我们学习 Nim 语言", @["目标邮箱"])
  await client.sendMail("你的 qq 邮箱账号", @["目标邮箱"], $msg)
  echo "finish"