盒子
盒子
文章目录
  1. Nim编程早茶
    1. 同步程序
    2. 异步函数

使用 Nim 语言发送邮件

Nim编程早茶

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

同步程序

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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"

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

异步函数

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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"