如何使用PowerShell实现指定目录.EML文件发件人自动检查与修改
PowerShell 批量替换EML文件发件人域名脚本实现
前置准备
- 提前备份所有待处理的.eml文件,避免编辑失误导致数据丢失
- 如需调整PowerShell执行权限,可运行管理员权限PowerShell执行:
Set-ExecutionPolicy RemoteSigned,选择Y确认即可
完整脚本
# 配置参数,按需修改以下三个变量即可 $scanPath = "C:\你的\扫描\目录\路径" # 要扫描的EML文件所在目录 $oldDomain = "要替换的原域名.com" # 示例:oldcompany.com $newDomain = "替换后的目标域名.com" # 示例:newcompany.com # 递归扫描目录下所有.eml文件,不需要递归删除 -Recurse 参数即可 $emlFiles = Get-ChildItem -Path $scanPath -Filter *.eml -Recurse -File foreach ($file in $emlFiles) { # 读取文件内容,使用UTF-8编码,如需其他编码可修改Encoding参数 $content = Get-Content -Path $file.FullName -Raw -Encoding UTF8 # 匹配发件人字段的域名并替换,忽略域名大小写 $modifiedContent = $content -replace "(?<=^From:.*<.*@)$([regex]::Escape($oldDomain))(?=>.*$)", $newDomain, 'IgnoreCase' # 将修改后的内容写回原文件 Set-Content -Path $file.FullName -Value $modifiedContent -Encoding UTF8 } Write-Host "所有文件处理完成,共处理$($emlFiles.Count)个EML文件"
关键逻辑说明
- 脚本仅修改邮件头的
From:字段内容,不会误修改邮件正文、收件人、抄送等其他字段的同域名内容 - 正则匹配采用后向断言和前向断言锁定域名位置,避免误替换
- 编码默认使用UTF8,若你的EML文件是GBK等其他编码,可将
Encoding参数的值改为Default或者对应编码名称
测试提示:首次运行前建议先复制少量测试文件到单独目录运行脚本,确认替换效果符合预期后再批量处理正式文件。
内容的提问来源于stack exchange,提问作者DANIEL
相关产品推荐
相关产品推荐

