PowerShell SmtpClient无法认证:RackSpace Emailsrvr发邮件失败求助
解决PowerShell调用RackSpace Emailsrvr SMTP发送邮件的认证问题
作为PHP开发者刚接触PowerShell遇到这个问题很正常,我来帮你梳理下问题所在和解决办法:
问题根源分析
你遇到的5.7.1 Recipient address rejected: Access denied错误,核心原因不是PowerShell默认用了不支持的认证方式,而是你的代码没有启用STARTTLS——从你telnet输出的250 STARTTLS就能看出来,RackSpace的SMTP服务器要求必须先启用TLS加密连接,才能进行认证操作,否则会直接拒绝中继请求。
另外,部分旧版本的PowerShell默认使用的TLS版本(比如TLS 1.0/1.1)可能被RackSpace服务器禁用,这也会导致认证失败。
修正后的完整代码
下面是调整后的代码,我添加了关键的SSL启用和TLS版本强制设置,同时补全了Send调用部分:
# 示例变量定义(替换成你的实际值) $emailFrom = "sender@yourdomain.com" $emailTo = @("recipient1@example.com", "recipient2@example.com") $subject = "Test Email from PowerShell" $emailContent = "This is a test email sent via RackSpace Emailsrvr SMTP" $smtpUser = "your-full-email@yourdomain.com" # RackSpace SMTP用户名需要是完整邮箱地址 $smtpPass = "your-smtp-password" # 创建邮件对象 $emailMessage = New-Object System.Net.Mail.MailMessage $emailMessage.From = $emailFrom foreach ($addr in $emailTo) { $emailMessage.To.Add($addr) } $emailMessage.Subject = $subject $emailMessage.Body = $emailContent # 配置SMTP客户端 $smtpClient = New-Object System.Net.Mail.SmtpClient('smtp.emailsrvr.com', 587) $smtpClient.UseDefaultCredentials = $false $smtpClient.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass) # 启用STARTTLS(必须项) $smtpClient.EnableSsl = $true # 强制使用TLS 1.2,避免旧PowerShell版本的低版本TLS被服务器拒绝 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 try { # 发送邮件 $smtpClient.Send($emailMessage) Write-Host "Email sent successfully!" } catch { Write-Host "Failed to send email: $_" } # 清理资源 $emailMessage.Dispose() $smtpClient.Dispose()
关键调整说明
- 启用
EnableSsl = $true:这是解决问题的核心,RackSpace的587端口要求必须通过STARTTLS加密连接后才能认证,没有这一步,服务器会直接拒绝你的认证请求,导致中继失败。 - 强制TLS 1.2:旧版PowerShell默认的TLS版本可能不被RackSpace支持,通过
[System.Net.ServicePointManager]::SecurityProtocol强制设置为TLS 1.2,确保加密协议兼容。 - 确认SMTP用户名格式:RackSpace的SMTP认证用户名必须是完整的邮箱地址(比如
user@yourdomain.com),不能只填用户名部分,这也是常见的坑。
额外排查点
如果还是报错,可以检查:
- 你的SMTP密码是否正确,有没有特殊字符导致转义问题
- 收件人地址是否在RackSpace允许的中继范围内(比如是否是你域名下的邮箱,或者服务器是否允许外发)
- 你的IP是否被RackSpace列入了黑名单(可以通过他们的管理后台查询)
内容的提问来源于stack exchange,提问作者whiteatom
相关产品推荐
相关产品推荐

