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

PowerShell发送带附件邮件报错:调用Send方法失败,求故障原因

问题分析:PowerShell调用Gmail SMTP发送带附件邮件失败

你编写的PowerShell代码在调用Send方法时出现「调用‘send’时使用‘1’个参数失败:‘发送邮件失败’」异常,且未收到邮件,可能的原因及修正方案如下:

一、Gmail账户权限配置问题

  • 未启用应用访问权限:Gmail默认限制非官方应用的SMTP访问,若未开启2步验证,需在Google账户设置中开启「不太安全的应用访问」;若开启了2步验证,必须生成应用专用密码替代原账户密码,直接用原密码会验证失败。
  • 安全拦截未处理:登录Google账户查看安全记录,若存在服务器IP的登录拦截提示,需手动允许该设备访问。

二、代码本身的错误

  • Subject重复赋值:代码中$Subject = "Log file from server"后又被覆盖为$Subject = "Subject",属于冗余错误,建议删除重复赋值行。
  • SecureString兼容性问题:ConvertTo-SecureString生成的SecureString类型,部分PowerShell版本与NetworkCredential构造函数兼容不佳。可改为直接读取明文(仅测试用),或转换为普通字符串:
    $pass = Get-Content "C:\Folder\Password.txt"
    # 或转换SecureString为明文(测试场景)
    $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)
    $plainPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $plainPass);
    
  • 附件路径或权限问题:确认C:\Folder\LogFile.txt文件存在,且PowerShell进程有读取该文件的权限,否则添加附件会导致发送失败。

三、SMTP客户端配置遗漏

  • 默认凭据冲突:设置自定义凭据前,建议先清空默认凭据:
    $SMTPClient.UseDefaultCredentials = $false
    
  • 超时设置缺失:若附件较大,可添加超时设置避免发送中断:
    $SMTPClient.Timeout = 100000 # 100秒超时
    

四、网络环境限制

  • 端口或代理拦截:确认服务器的587端口未被防火墙、安全组或代理拦截,Gmail SMTP服务依赖587端口的TCP连接。
  • IP信誉问题:若服务器IP频繁发送邮件,可能被Google反垃圾机制拦截,需检查IP的信誉状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:32:03