Swaks介绍
Swaks(Swiss Army Knife for SMTP)是一个非常强大的命令行工具(由perl语言编写),主要用于测试、调试和诊断SMTP邮件服务器的配置。它支持多种SMTP功能,包括身份验证、加密连接、TLS、邮件内容构造、附件发送等,因此非常适合邮件管理员、开发者、安全渗透测试人员和系统运维人员进行邮件系统的测试和排错。
该项目由John 维护,遵循GNU GPLv2开源协议。
安装部署Swaks
进入该项目的主页可以下载程序包,目前(2025年4月)最新版为.0 。下载地址参考文末“Swaks下载地址”(如因网络原因无法下载,也可以关注公众号回复“swaks下载”获取)。
下载之后得到swaks-.0.tar.gz压缩包,解压之后将其中swaks文件拷贝到/usr/bin目录,并设置可执行权限。示例命令:
# 解压文件
tar -zxvf swaks-20240103.0.tar.gz
# 拷贝文件至/usr/bin目录
cd swaks-20240103.0 && cp swaks /usr/bin
# 设置可执行权限
chmod 755 /usr/bin/swaks
# 执行swaks命令查看帮助
swaks --help
Swaks常用选项
指定SMTP服务器:
指定收件人和发件人:
邮件主题:
邮件正文:
使用身份验证:Swaks支持通过SMTP认证(例如:PLAIN、LOGIN、CRAM-MD5等)来连接邮件服务器。如果你的SMTP服务器需要认证,可以使用以下选项:
启用TLS加密:Swaks也支持通过TLS加密与SMTP服务器的连接。关于TLS部分,Swaks提供了诸多功能,建议查看帮助文档获取更多信息。
指定SMTP端口:如果SMTP服务器使用非默认端口(默认是25).net 发邮件,你可以指定端口号:
发送带附件的邮件:Swaks支持发送带附件的邮件。
Swaks发信示例
注意:目前像网易163邮箱、腾讯QQ邮箱等主流邮箱平台默认不启用SMTP服务,如果需要使用这些邮箱进行测试,建议参考之前的文章开启SMTP功能。
使用LOGIN认证发邮件
示例命令如下:
swaks --to t1@mailabc.cn --from demo@mailabc.cn --server mail.mailabc.cn --auth LOGIN --auth-user "demo@mailabc.cn" --auth-password "BiC9E7YjbdDI7TkH" --header "Subject: Test" --body "This is a test message"
执行输出示例(输出内容太长,后续示例不再展示):
[root@localhost ~]
*** DEPRECATION WARNING: Relying on IO::Socket::INET to send via inet sockets. Install IO::Socket::IP instead.
=== Trying mail.mailabc.cn:25...
=== Connected to mail.mailabc.cn.
<- 220 mailabc.cn
-> EHLO localhost
<- 250-mail
<- 250-PIPELINING
<- 250-AUTH LOGIN PLAIN
<- 250-AUTH=LOGIN PLAIN
<- 250-STARTTLS
<- 250-SMTPUTF8
<- 250 8BITMIME
-> AUTH LOGIN
<- 334 dXNlcm5hbWU6
-> ZGVtb0BtYWlsYWJjLmNu
<- 334 UGFzc3dvcmQ6
-> QmlDOUU3WWpiZERJN1RrSA==
<- 235 Authentication successful
-> MAIL FROM:
<- 250 Mail OK
-> RCPT TO:
<- 250 Mail OK
-> DATA
<- 354 End data with .
-> Date: Thu, 17 Apr 2025 21:10:05 +0800
-> To: t1@mailabc.cn
-> From: demo@mailabc.cn
-> Subject: Test
-> Message-Id: <20250417211005.011543@localhost>
-> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
->
-> This is a test message
->
->
-> .
<- 250 Mail OK queued as AQAAfwDnTiYNcQBoUAEAAA--.32S2
-> QUIT
<- 221 Bye
=== Connection closed with remote host.
邮件显示效果
启用TLS/SSL加密
示例命令如下:
swaks --to t1@mailabc.cn --from demo@mailabc.cn --server mail.mailabc.cn --auth LOGIN --auth-user "demo@mailabc.cn" --auth-password "BiC9E7YjbdDI7TkH" --tls --header "Subject: Test2" --body "This is a TLS test message"
需要注意:swaks采用perl编写,启用TLS需要依赖Net::库,安装命令如下(如果系统上没有cpan,可以通过yum或者apt-get安装):
cpan install Net::SSLeay
发送带附件的邮件
发送单个附件,示例命令如下:
swaks --to t1@mailabc.cn --from demo@mailabc.cn --server mail.mailabc.cn --auth LOGIN --auth-user "demo@mailabc.cn" --auth-password "BiC9E7YjbdDI7TkH" --header "Subject: Test3" --body "This is a attach test message" --attach @/tmp/file.txt
邮件显示效果
发送多个附件,示例命令如下:
swaks --to t1@mailabc.cn --from demo@mailabc.cn --server mail.mailabc.cn --auth LOGIN --auth-user "demo@mailabc.cn" --auth-password "BiC9E7YjbdDI7TkH" --header "Subject: Test4" --body "This is a attach test message" --attach @/tmp/file.txt --attach @/tmp/file1.txt
发送HTML邮件
示例命令如下.net 发邮件,其中"---type text/html ---body"搭配使用表示创建HTML格式的信体内容。
swaks --to t1@mailabc.cn --from demo@mailabc.cn --server mail.mailabc.cn --auth LOGIN --auth-user "demo@mailabc.cn" --auth-password "BiC9E7YjbdDI7TkH" --tls --header "Subject: HTML TEST" --attach-type text/html --attach-body "This is a html test
"
邮件显示效果
基于EML文件发送邮件
假设通过其他邮件客户端组好了一封邮件保存为eml格式(邮件信体组信标准可以参考往期文章:),swaks可以将eml文件作为DATA指令内容进行发信。
下面给一个示例,将如下eml内容保存到文件test.eml。
Date: Thu, 17 Apr 2025 20:56:09 +0800
From: "demo"
To: t1 <t1@163.com>
Subject: =?GB2312?B?suLK1GVtbLei0MU=?=
X-Priority: 3
X-Has-Attach: no
X-Mailer: Foxmail 7.2.25.375[cn]
Mime-Version: 1.0
Message-ID: <202504171256097486540@mailabc.cn>
Content-Type: multipart/alternative;
boundary="----=_001_NextPart683426000518_=----"
This is a multi-part message in MIME format.
------=_001_NextPart683426000518_=----
Content-Type: text/plain;
charset="GB2312"
Content-Transfer-Encoding: base64
1eLKx9K7t+JIVE1MuPHKvbLiytTTyrz+oaMNCg==
------=_001_NextPart683426000518_=----
Content-Type: text/html;
charset="GB2312"
Content-Transfer-Encoding: quoted-printable
<meta http-equiv=3D"content-type" content=3D"text/html; charse=
t=3DGB2312">body { line-height: 1.5; }body { font-size: 14px; font-=
family: "Microsoft YaHei UI"; color: rgb(0, 0, 0); line-height: 1.5; }</st=
yle>=0A
<font color=3D"#ff0000"><span id=3D"_FoxCURSOR"><==0A/span>=D5=E2=CA=C7=D2=BB=B7=E2HTML=B8=F1=CA=BD=B2=E2=CA=D4=D3=CA=BC=FE=A1=
=A3
------=_001_NextPart683426000518_=------
示例命令如下:
其中--data "$(cat /tmp/test.eml)" 表示将/tmp/test.eml 作为DATA指令的内容发送。
swaks --to t1@mailabc.cn --from demo@mailabc.cn --server mail.mailabc.cn --auth LOGIN --auth-user "demo@mailabc.cn" --auth-password "BiC9E7YjbdDI7TkH" --tls --data "$(cat /tmp/test.eml)"
通过上述命令,将/tmp/test.eml原始内容发给了用户。查看该邮件发现信头中的收件人是t1,表明通过该命令发信不会改变eml文件中的信头信息。这正是发送伪造邮件的方法之一。
邮件显示效果
关于swaks发信示例先提供这些,如果还需要了解更多关于swaks的命令用法,建议您查阅帮助文档(下载的tar.gz压缩包中包含帮助文档)。
最后,感兴趣的同学可以思考下面的问题:
1.邮件系统该如何拒绝这种MAIL FROM用户和信头中用户不一致的发信呢?
2.针对上述示例,启用SPF检查可以阻断这个发信吗?
如果想了解答案或进一步探讨该工具的用法,可以关注公众号留言。
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh