FileZilla Server上传触发的PowerShell邮件通知脚本无法发信如何解决
问题排查与解决方案
一、邮件发送失败的原因及修复方法
- SMTP配置错误:你当前填写的
$SMTPServer = "127.0.0.1"、端口21是本地FTP服务的地址和端口,和邮件服务完全无关。如果使用Gmail发送邮件,正确配置为:$SMTPServer = "smtp.gmail.com" $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) - 代码语法错误:
New-Object和System.Net.NetworkCredential分两行写没有续行标识,PowerShell会将其识别为两个独立命令,导致凭证未正确赋值,需要合并为一行或者添加续行符:# 正确写法1:合并为一行 $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("GMAIL_ADDRESS", "GMAIL_PASSWORD") # 正确写法2:添加续行符 $SMTPClient.Credentials = New-Object ` System.Net.NetworkCredential("GMAIL_ADDRESS", "GMAIL_PASSWORD") - Gmail认证规则问题:Gmail早已禁止使用账号普通密码直接登录SMTP服务,你需要先为Google账号开启两步验证,之后生成应用专用密码,替换掉
GMAIL_PASSWORD的取值才能正常认证。 - 排查小技巧:修改配置后可手动在PowerShell中执行该脚本,查看具体的报错信息,自动触发时窗口闪退无法展示报错,会导致问题定位困难。
二、关于SENDER_EMAIL和GMAIL_ADDRESS的关联说明
两个值必须完全一致,Gmail SMTP服务不允许使用与认证账号不一致的发件人地址发送邮件,否则请求会被直接拦截。
三、修改后可直接使用的完整脚本
$EmailFrom = "你的Gmail地址" $EmailTo = "收件人邮箱" $Subject = "New File Uploaded to FileZilla" $Body = "A new file has been uploaded to the FTP server on FileZilla" $SMTPServer = "smtp.gmail.com" $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) $SMTPClient.EnableSsl = $true $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("你的Gmail地址", "你生成的Gmail应用专用密码") $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
内容的提问来源于stack exchange,提问作者Nairda123
相关产品推荐
相关产品推荐

