列举常用的 swaks
参数,随用随记。
临时邮箱
本文大部分测试在 24mail 下进行;剩余测试均使用个人邮箱。
下载
(Ubuntu)使用以下代码下载 swaks
:
--to
使用 --to
指定目标邮箱。例如
你大概会看到类似这样的日志
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
| === Trying mx.chacuo.net:25... === Connected to mx.chacuo.net. <- 220 web1905 chcuo.net server 0.2 -> EHLO LAPTOP-Q0JIQNAL.localdomain <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> -> Date: Sun, 22 Jun 2025 00:32:48 +0800 -> To: [email protected] -> From: [email protected] -> Subject: test Sun, 22 Jun 2025 00:32:48 +0800 -> Message-Id: <[email protected]> -> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/ -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye === Connection closed with remote host.
|
顺便,这里列出每行的三个前缀字符的含义:
提示符 |
含义 |
=== |
表示Swaks生成的信息行 |
*** |
表示Swaks内部产生的错误 |
-> |
表示Swaks向目标服务器发送的预期行 |
~> |
表示Swaks向目标服务器发送的TLS加密预期行 |
**> |
表示Swaks向目标服务器发送的意外行 |
*~> |
表示Swaks向目标服务器发送的TLS加密意外行 |
<- |
表示目标服务器向Swaks发送的预期行 |
<~ |
表示目标服务器向Swaks发送的TLS加密预期行 |
<** |
表示目标服务器向Swaks发送的意外行 |
<~* |
表示目标服务器向Swaks发送的TLS加密意外行 |
这种情形下,通常 From
字段被标记为 <用户>@<机器>
的形式;Subject
被标记为 test <时间>
;X-Mailer
被标记为 swaks
的名称和版本;正文部分为 This is a test mailing
。
--from
使用 --from
指定发件人的邮箱。
例如
为了方便比较,这里直接列出本次输出和上一次输出的 diff
:
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 30 31 32 33 34 35 36 37 38 39 40 41
| <- 220 web1905 chcuo.net server 0.2 -> EHLO LAPTOP-Q0JIQNAL.localdomain <- 250 web1905 - -> MAIL FROM:<[email protected]> + -> MAIL FROM:<[email protected]> <- 250 Ok - -> RCPT TO:<[email protected]> ? ^^^^^^^ ^ + -> RCPT TO:<[email protected]> ? + ^^^^^ ^^ <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 00:32:48 +0800 ? ^^ ^ ^^ + -> Date: Sun, 22 Jun 2025 12:39:33 +0800 ? ^^ ^ ^^ - -> To: [email protected] - -> From: [email protected] + -> To: [email protected] + -> From: [email protected] - -> Subject: test Sun, 22 Jun 2025 00:32:48 +0800 ? ^^ ^ ^^ + -> Subject: test Sun, 22 Jun 2025 12:39:33 +0800 ? ^^ ^ ^^ - -> Message-Id: <[email protected]> ? ^^ ^^^ ^^ ^ + -> Message-Id: <[email protected]> ? ^^ ^^^ ^^ ^ -> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/ -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
正规的邮箱服务里,一些域名会被检查 SPF 记录,如果发件 ip 与记录不符,无法通过验证,会被拒绝。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| === Trying mx3.qq.com:25... === Connected to mx3.qq.com. <- 220 newxmmxszc23-0.qq.com MX QQ Mail Server. -> EHLO qq.com <- 250-newxmmxszc23-0.qq.com <- 250-STARTTLS <- 250-8BITMIME <- 250-SMTPUTF8 <- 250-SIZE 73400320 <- 250 OK -> MAIL FROM:<[email protected]> <** 550 SPF check failed. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1001445 [MPdC3ariWK7GZndWaXfsa4eLTsQMO+LiHnoPqVrDu0UG6GBeQl5+eZOslGc9ekY1xQ== IP: 60.233.9.39] -> QUIT *** Remote host closed connection unexpectedly.
|
这里的 ip 验证并非你的 ip 地址,而是你使用的 SMTP 服务器的地址。
顺带一提,Spamhaus 反垃圾邮件组织直接将 swaks
的默认邮箱服务的 ip 地址列入黑名单,而微软的 Outlook 邮箱会检查这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| === Trying outlook-com.olc.protection.outlook.com:25... === Connected to outlook-com.olc.protection.outlook.com. <- 220 CH3PEPF00000015.mail.protection.outlook.com Microsoft ESMTP MAIL Service ready at Sun, 22 Jun 2025 05:58:00 +0000 [08DDB07650EC6878] -> EHLO test.com <- 250-CH3PEPF00000015.mail.protection.outlook.com Hello [120.221.100.232] <- 250-SIZE 49283072 <- 250-PIPELINING <- 250-DSN <- 250-ENHANCEDSTATUSCODES <- 250-STARTTLS <- 250-8BITMIME <- 250-BINARYMIME <- 250-CHUNKING <- 250 SMTPUTF8 -> MAIL FROM:<[email protected]> <** 550 5.7.1 Service unavailable, Client host [120.221.100.232] blocked using Spamhaus. To request removal from this list see https://www.spamhaus.org/query/ip/120.221.100.232 (AS3130). [Name=Protocol Filter Agent][AGT=PFA][MxId=11BB60EC9FF1E732] [CH3PEPF00000015.namprd21.prod.outlook.com 2025-06-22T05:58:01.072Z 08DDB07650EC6878] -> QUIT *** Remote host closed connection unexpectedly.
|
--ehlo
使用 --ehlo
指定发送网址,用来进一步伪装。
例如
diff
文件:
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 30 31 32 33 34 35 36
| <- 220 web1905 chcuo.net server 0.2 - -> EHLO LAPTOP-Q0JIQNAL.localdomain + -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 12:39:33 +0800 ? ^ - ^^ + -> Date: Sun, 22 Jun 2025 13:43:01 +0800 ? ^ + ^^ -> To: [email protected] -> From: [email protected] - -> Subject: test Sun, 22 Jun 2025 12:39:33 +0800 ? ^ - ^^ + -> Subject: test Sun, 22 Jun 2025 13:43:01 +0800 ? ^ + ^^ - -> Message-Id: <[email protected]> ? - ^ ^ ^^ ^ + -> Message-Id: <[email protected]> ? ^ ^^ ^^ ^ -> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/ -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
--head
使用 --head
设置邮件头。
Subject
例如,以下命令指定邮件标题为 foo
:
1 2 3 4
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --head "Subject: foo"
|
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 30 31 32 33
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 13:43:01 +0800 ? ^^^^^^ + -> Date: Sun, 22 Jun 2025 15:28:37 +0800 ? +++++ ^ -> To: [email protected] -> From: [email protected] - -> Subject: test Sun, 22 Jun 2025 13:43:01 +0800 + -> Subject: foo - -> Message-Id: <[email protected]> ? ^^^^ ^^^ + -> Message-Id: <[email protected]> ? +++ ^ + ^^ -> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/ -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
也可以使用 --h-Subject
直接指定文件头部分的 Subject
项。
1 2 3 4
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --h-Subject "foo"
|
X-Mailer
X-Mailer
用来标记发出邮件的应用程序,默认情况下是 swaks <version> <url>
。
1 2 3 4 5
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --h-Subject "foo" \ --h-X-Mailer "QQMail 2.x"
|
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 30 31 32 33
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 15:28:37 +0800 ? ^^^^ + -> Date: Sun, 22 Jun 2025 15:39:20 +0800 ? +++ ^ -> To: [email protected] -> From: [email protected] -> Subject: foo - -> Message-Id: <[email protected]> ? ^^^ ^^^ + -> Message-Id: <[email protected]> ? ++ ^ ^^^ - -> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/ + -> X-Mailer: QQMail 2.x -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
X-Priority
X-Priority
用来标记邮件的重要性。
X-Priority: 1
(或 Urgent
):最高优先级,表示紧急或非常重要的邮件。
X-Priority: 2
(或 High
):高优先级邮件。
X-Priority: 3
(或 Normal
):正常优先级邮件,这是默认级别。
X-Priority: 4
(或 Low
):低优先级邮件。
X-Priority: 5
(或 Bulk
):批量邮件或垃圾邮件,可能会被邮件客户端视为不太重要的邮件。
1 2 3 4 5 6
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --h-Subject "foo" \ --h-X-Mailer "QQMail 2.x" \ --h-X-Priority 1
|
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 30 31 32 33
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 15:39:20 +0800 ? ^ ^^ ^ + -> Date: Sun, 22 Jun 2025 16:10:40 +0800 ? ^ ^^ ^ -> To: [email protected] -> From: [email protected] -> Subject: foo - -> Message-Id: <[email protected]> ? ^^^^ - + -> Message-Id: <[email protected]> ? ^^^^ + -> X-Mailer: QQMail 2.x + -> X-Priority: 1 -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
Message-Id
用来给出一个唯一的邮件标识符。
一般来说,要求:
- 首尾分别为
<
和 >
;
- 中间包含字符
@
;
@
的左右均为由 .
分割的、非空可打印 ASCII 串。
一个满足上述要求的正则表达式如下:
1
|
<[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-](?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-])@[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-](?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-])>
|
另外,@
的右侧通常为发件人的邮箱域名,例如:
1 2 3 4 5 6 7
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --h-Subject "foo" \ --h-X-Mailer "QQMail 2.x" \ --h-X-Priority 1 \ --h-Message-Id "<[email protected]>"
|
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 30 31
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 16:10:40 +0800 ? ^ ^^ + -> Date: Sun, 22 Jun 2025 16:15:23 +0800 ? ^ ^^ -> To: [email protected] -> From: [email protected] -> Subject: foo - -> Message-Id: <[email protected]> + -> Message-Id: <[email protected]> -> X-Mailer: QQMail 2.x -> X-Priority: 1 -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
From
From
标记发件人,可以用来设置发件人的别名。另外,这个字段比 --from
指定的字段受到检查的强度更小。但是,若 --from
与 --h-From
指定的邮箱地址不一致,邮件服务在标记发件人为后者的同时,还会标记邮件由前者代发;并且可能对此进行警告。
这里 =?gb2312?B?udzA7dSx?=
是 MIME 编码,格式为 =?charset?encoding?encoded_string?=
:
charset
:字符集,本例中为 gb2312
;
encoding
:编码方式,本例中为 B
,代指 Base64 编码;
encoded_string
:编码串,本例中为 udzA7dSx
。
因此这段字符翻译出来为 管理员
。
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 30 31
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 16:15:23 +0800 ? ^^^^ + -> Date: Sun, 22 Jun 2025 16:42:10 +0800 ? +++ ^ -> To: [email protected] - -> From: [email protected] + -> From: =?gb2312?B?udzA7dSx?= <[email protected]> -> Subject: foo -> Message-Id: <[email protected]> -> X-Mailer: QQMail 2.x -> X-Priority: 1 -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
To
To
标记收件人,与 --to
指定的不同,这条字段不会改变实际的收信人,结合字段 cc
,应该可以模拟出抄送或密送的效果。没有测试。
cc
cc
标记抄送人,但是只是让收信者看到你指定的抄送人,不会实际发送。
1 2 3 4 5 6 7 8 9
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --h-From "=?gb2312?B?udzA7dSx?= <[email protected]>" \ --h-Subject "foo" \ --h-X-Mailer "QQMail 2.x" \ --h-X-Priority 1 \ --h-Message-Id "<[email protected]>" \ --h-cc "weilycoder <*********@qq.com>"
|
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 30 31
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 16:15:23 +0800 ? ^^^ + -> Date: Sun, 22 Jun 2025 16:21:55 +0800 ? + + ^ -> To: [email protected] -> From: =?gb2312?B?udzA7dSx?= <[email protected]> -> Subject: foo -> Message-Id: <[email protected]> -> X-Mailer: QQMail 2.x -> X-Priority: 1 + -> cc: weilycoder <*********@qq.com> -> -> This is a test mailing -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
如果不打算伪装抄送者名称,也可以只写邮件地址,例如 --h-cc "*********@qq.com"
。
--body
使用 --body
指定邮件内容。
1 2 3 4 5 6 7 8 9 10
| swaks --to [email protected] \ --from test@test.com \ --ehlo test.com \ --h-From "=?gb2312?B?udzA7dSx?= <[email protected]>" \ --h-Subject "foo" \ --h-X-Mailer "QQMail 2.x" \ --h-X-Priority 1 \ --h-Message-Id "<[email protected]>" \ --h-cc "weilycoder <*********@qq.com>" \ --body "Test email"
|
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 30 31 32
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 16:21:55 +0800 ? ^ ^^ + -> Date: Sun, 22 Jun 2025 16:26:26 +0800 ? ^ ^^ -> To: [email protected] -> From: =?gb2312?B?udzA7dSx?= <[email protected]> -> Subject: foo -> Message-Id: <[email protected]> -> X-Mailer: QQMail 2.x -> X-Priority: 1 -> cc: weilycoder <*********@qq.com> -> - -> This is a test mailing + -> Test email -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|
--cc
/--bcc
使用 --cc
/--bcc
指定抄送/密送。
与在 To
/cc
字段指定不同,使用这两个参数时,邮件确实会发送到指定的邮箱。
24mail 似乎不会显示以抄送/密送方法到达的邮件,但是 QQ 邮箱是可以的。
如果使用 QQ 邮箱接收,则 --cc
和 --h-cc
指定的抄送人都会显示,但是实际上只有前者指定的地址真的被发送了邮件。
Html 格式邮件
使用 --attach
参数。
1 2 3 4 5 6 7 8 9 10 11 12 13
| swaks --to [email protected] \ --cc [email protected] \ --bcc [email protected] \ --from test@test.com \ --ehlo test.com \ --h-From "=?gb2312?B?udzA7dSx?= <[email protected]>" \ --h-Subject "foo" \ --h-X-Mailer "QQMail 2.x" \ --h-X-Priority 1 \ --h-Message-Id "<[email protected]>" \ --h-cc "weilycoder <*********@qq.com>" \ --attach-type "text/html" \ --attach-body "<html><body><b>HTML Test</b></body></html>"
|
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <- 220 web1905 chcuo.net server 0.2 -> EHLO test.com <- 250 web1905 -> MAIL FROM:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> RCPT TO:<[email protected]> <- 250 Ok -> DATA <- 354 End data with <CR><LF>.<CR><LF> - -> Date: Sun, 22 Jun 2025 17:27:22 +0800 ? - - + -> Date: Sun, 22 Jun 2025 17:42:42 +0800 ? + + -> To: [email protected] -> Cc: [email protected] -> From: =?gb2312?B?udzA7dSx?= <[email protected]> -> Subject: foo -> Message-Id: <[email protected]> -> X-Mailer: QQMail 2.x + -> MIME-Version: 1.0 + -> Content-Type: multipart/mixed; boundary="----=_MIME_BOUNDARY_000_15844" -> X-Priority: 1 -> cc: weilycoder <*********@qq.com> -> - -> Test email + -> ------=_MIME_BOUNDARY_000_15844 + -> Content-Type: text/html + -> Content-Transfer-Encoding: BASE64 + -> + -> PGh0bWw+PGJvZHk+PGI+SFRNTCBUZXN0PC9iPjwvYm9keT48L2h0bWw+ + -> + -> ------=_MIME_BOUNDARY_000_15844-- -> -> -> . <- 250 Ok -> QUIT <- 221 Bye
|