Win7 中使用 blat 自动发邮件
CentOS 中内置有 mail 命令,可以直接发邮件. Win7中没有这个功能,但是可以使用 blat 结合批处理来实现. blat 是一个小巧的命令行邮件客户端,可以直接在 cmd 中调用.
下载 blat 软件. http://www.blat.net/
可以把源码和软件都下载下来,点击后,在随后的页面中下载,最后下载下来的是blat3222_32.full.zip 解压后得到 blat3222, 进入后看到两个目录 docs 和 full, 进入 full, 找到blat.exe, 新建目录 D:\Auto_Mail, 把 blat.exe 拷贝进 Auto_Mail.
开始—运行—cmd,使用命令看起来更清晰:
下载 7zip, https://www.7-zip.org
根据需要下载32位或者64位的,我这里下载32位的. 下载安装后, 进入安装目录, 把 7z.exe 复制到 D:\Auto_Mail
进入 D:\Auto_Mail, 在 cmd 中操作如下:
D:\>cd Auto_Mail
D:\Auto_Mail>mkdir 0_pin
D:\Auto_Mail>mkdir pin_bak
D:\Auto_Mail>echo. > 1_write.txt
D:\Auto_Mail>echo. > 2_SentMail.bat
D:\Auto_Mail>
当前, D:\Auto_Mail 中的内容如下:
使用 blat 发邮件, 需要开通 smtp 服务, 以网易 163 邮箱为例:
开通 smtp 服务后, 保存退出即可.
右键 2_SentMail.bat 编辑, 输入以下内容(带 # 的内容不要写进去)
@echo off
color 02 # 设定颜色,黑底暗绿字
ping mail.163.com # 看网络通不通
for /f "tokens=1,2,3 delims=- " %%i in ('date /t') do set date=%%i.%%j.%%k # 获取当前日期
for /f "tokens=1,2 delims=: " %%i in ('time /t') do set time=%%i.%%j # 获取当前时间
#这里要注意, 如果使用 %%i:%%j 的话, 因为在批处理中 : 是特殊符号, 所以会报错, 使用 . 替代 : 不会报错.
echo. >> 1_write.txt # 清空
echo "写信时间: %date%-%time%" >> 1_write.txt # 在邮件正文添加一个时间戳
set /p title="请输入信件标题: " # 邮件标题
set from=sent_address@163.com # 发件邮箱的地址
set user=your_email_id # 发件邮箱的用户名,注意:不要加单/双引号
set pass=your_password # 发件邮箱的密码,注意:不要加单/双引号
set mail=1_write.txt # 以 1_write.txt 文本内容作为邮件正文
set server=smtp.163.com # 设定 smtp 服务器,需要在发件邮箱里面开通此功能
set /p choice="是否有附件? y/n : " # 根据需要选择发附件还是不发
if %choice%==n goto nopin
if %choice%==y goto onepin
:nopin
set to=reception@163.com # 收件邮箱的地址
blat %mail% -to %to% -charset Gb2312 -subject %title% -server %server% -f %from% -u %user% -pw %pass%
# 邮件正文 收件地址 编码 标题 smtp服务器地址 发件地址 用户名 密码
set to=reception@sina.com # 收件邮箱的地址,可以参考这两条配置添加多个收件邮箱地址
blat %mail% -to %to% -charset Gb2312 -subject %title% -server %server% -f %from% -u %user% -pw %pass%
echo. > 1_write.txt
xcopy /s/e/y/r .\0_pin\*.* .\pin_bak >nul 2>nul # 复制附件内容到 pin_bak
echo.
rd /S/Q .\0_pin >nul 2>nul # 删除 0_pin
md 0_pin >nul 2>nul # 新建 0_pin
del /F/Q pin-%date%-%time%.zip >nul 2>nul # 删除附件
echo.
pause
exit
:onepin
7z a pin-%date%-%time%.zip .\0_pin\*.*
# 使用 7zip 压缩文件作为邮件的附件, 使用当前时间作为文件名
set to=reception1@163.com
blat %mail% -to %to% -attach ".\pin-%date%-%time%.zip" -charset Gb2312 -subject %title% -server %server% -f %from% -u %user% -pw %pass%
set to=reception@sina.com
blat %mail% -to %to% -attach ".\pin-%date%-%time%.zip" -charset Gb2312 -subject %title% -server %server% -f %from% -u %user% -pw %pass%
echo. > 1_write.txt
xcopy /s/e/y/r .\0_pin\*.* .\pin_bak >nul 2>nul
echo.
rd /S/Q .\0_pin >nul 2>nul
md 0_pin >nul 2>nul
del /F/Q pin-%date%-%time%.zip >nul 2>nul
echo.
pause
exit
为了确保时间格式正确, 在 win7 中需要做如下设置:
需要发邮件的时候, 可以按照以下三步:
1 把附件放进 0_pin 目录中,若无附件可以不放.
2 打开 1_write.txt 写邮件正文
3 双击 2_SentMail 按照提示写上邮件标题,然后输入 y 表示发送附件,输入 n 表示不发送附件.
pin_bak 中是附件的副本.
使用截图如下:
把 Auto_Mail 放在 U 盘中, 里面的批处理也可以正常使用.
至此,我们实现了 blat 的半自动发送(毕竟邮件标题还是手动输入的),如果想要全自动发送的话,对上面的批处理文件修改,然后配合 win7 的任务计划功能即可.
注意:
邮件的标题可以使用中文,英文,符号,但是不要使用空格,否则会报错如下:
看这句话: Blat saw and processed these options, and was confused by the last one…
大义是说: Blat 看到并且处理了这些选项,并且对最后一个选项感到困惑
这一句:-subject Do not understand argument: 2019.09.20
----------------------------不理解--------参数-----2019.09.20
Blat 不理解 2019.09.20 这个参数
我们写的标题是 测试邮件 2019.09.20, “测试邮件” 和 "2019.09.20"之前有空格. Blat看到这个空格之后,以为空格后面的 2019.09.20 是参数
但这并不是符合 blat 规则的参数,所以报错了.
有些电脑使用的是精简版的 windows 系统,可能精简掉了某些 dll 文件,所以在使用的时候会报错,提示 7z 无法使用.此时可以从 7z 的安装目录中把 dll 文件复制到 blat 所在的目录即可正常发送邮件了.