You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Blat与批处理脚本按组读取XML邮件地址并发送邮件?

当然可行!用批处理脚本配合Blat完全能实现按组筛选XML里的邮箱并发送邮件的需求,下面我一步步给你拆解实现方法:

1. 先确定你的XML结构参考

首先得有一个清晰的XML结构,这样批处理才能准确提取指定组的邮箱。给你一个示例结构,你可以对齐调整自己的文件:

<emailGroups>
  <group id="IT">
    <email>it_user1@example.com</email>
    <email>it_user2@example.com</email>
  </group>
  <group id="ADMIN">
    <email>admin_user@example.com</email>
  </group>
  <group id="OTHER">
    <email>other_user@example.com</email>
    <email>another_user@example.com</email>
  </group>
</emailGroups>

要是你的XML结构和这个差异较大,可能需要微调后面的解析逻辑哦。

2. 核心批处理脚本实现

下面是完整的批处理脚本,我加了详细注释,你只需要根据自己的实际情况修改配置参数即可:

@echo off
setlocal enabledelayedexpansion

:: -------------------------- 配置参数(请根据实际修改) --------------------------
set "XML_FILE=email_groups.xml"  :: 你的XML文件路径(相对或绝对路径都可以)
set "TARGET_GROUP=IT"            :: 要发送邮件的目标组ID(比如IT、ADMIN)
set "BLAT_PATH=blat.exe"         :: Blat程序的路径,如果已加入系统环境变量,直接写blat就行
set "SMTP_SERVER=smtp.example.com"  :: 你的SMTP服务器地址(比如smtp.qq.com、smtp.gmail.com)
set "FROM_EMAIL=sender@example.com" :: 发件人邮箱地址
set "EMAIL_SUBJECT=【组通知】测试邮件"     :: 邮件主题
set "EMAIL_BODY=这是发送给%TARGET_GROUP%组的测试邮件,请注意查收!" :: 邮件正文
:: -----------------------------------------------------------------------------

:: 提取目标组下的所有邮箱地址
echo 正在提取%TARGET_GROUP%组的邮箱列表...
for /f "tokens=2 delims=<>" %%a in ('findstr /C:"<group id=\"%TARGET_GROUP%\"" /C:"<email>" %XML_FILE% ^| findstr /V "<group"') do (
    set "RECIPIENT=%%a"
    :: 调用Blat发送邮件给当前收件人
    echo 正在发送邮件到!RECIPIENT!...
    "%BLAT_PATH%" -body "%EMAIL_BODY%" -subject "%EMAIL_SUBJECT%" -to "!RECIPIENT!" -server "%SMTP_SERVER%" -f "%FROM_EMAIL%"
    :: 如果SMTP需要认证,把下面这行注释去掉并填写账号密码
    :: "%BLAT_PATH%" -body "%EMAIL_BODY%" -subject "%EMAIL_SUBJECT%" -to "!RECIPIENT!" -server "%SMTP_SERVER%" -f "%FROM_EMAIL%" -u "你的SMTP账号" -pw "你的SMTP密码"
)

echo 所有邮件发送任务已完成!
endlocal
3. Blat的关键配置说明
  • 如果你的SMTP服务器需要身份验证(比如QQ、Gmail邮箱的SMTP),要取消脚本里认证行的注释,填写你的SMTP账号和密码
  • 第一次使用Blat时,可以先执行blat -install smtp.example.com sender@example.com配置默认的SMTP服务器和发件人,这样后续脚本里可以省略-server和-f参数
  • 要是需要发送带附件的邮件,在Blat命令里加上-attach "附件路径"即可
4. 注意事项
  • 确保XML文件的标签格式和示例一致,比如<email>标签不要有多余的空格,否则findstr可能提取不到正确的邮箱地址
  • 邮件正文或主题里如果有特殊字符(比如&、<、>),一定要用双引号包裹,避免批处理报错
  • 测试阶段可以把Blat命令改成echo 准备发送到!RECIPIENT!,先确认提取的邮箱是否正确,再实际发送邮件

内容的提问来源于stack exchange,提问作者ashim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:26