我正在尝试从 powershell 脚本发送邮件。我正在尝试使用的 SMTP 服务器
mail.xyz.com
,其他一些人已经在使用它在 sql 过程中从我正在使用的同一系统发送邮件。所以我们知道它有效。
但是当我尝试从我的 powershell 脚本执行此操作时,我收到一条错误消息
Exception calling "Send" with 1 argument(s) - "Mailbox unavailable: The server response was 5.7.1"
<[email protected]>..."Access denied"
我的代码是
function Send-mail([string]$email){
$message = new-object Net.Mail.MailMessage;
$message.From = "[email protected]";
$message.To.Add($email);
$message.Subject = "subject text here...";
$message.Body = "body text here...";
$smtp = new-object Net.Mail.SmtpClient("mail.xyz.com", "25");
$smtp.EnableSSL = $true;
$smtp.Send($message);
}
Send-mail -email "[email protected]";
我不确定为什么会发生这种情况,我浏览了旧的 sql 过程代码,它正在工作,看起来他们正在使用 UTL_SMTP,然后切换到 UTL_MAIL,但我没有看到他们使用任何类型的身份验证。堆栈线程表示,在同一域内发送邮件时可能不需要身份验证。我们将非常感谢您的帮助。谢谢。
这是脚本的修改版本,其中包括身份验证(假设 SMTP 服务器需要它):
function Send-mail([string]$email){
$message = new-object Net.Mail.MailMessage;
$message.From = "[email protected]";
$message.To.Add($email);
$message.Subject = "subject text here...";
$message.Body = "body text here...";
$smtp = new-object Net.Mail.SmtpClient("mail.xyz.com", "587"); # Using port 587 for TLS
$smtp.EnableSSL = $true; # Enable TLS
$smtp.Credentials = New-Object System.Net.NetworkCredential("your_username", "your_password"); # Provide your SMTP credentials here
$smtp.Send($message);
}
Send-mail -email "[email protected]";
请同时检查并确认以下几点。
端口:确保您使用正确的端口发送电子邮件。 端口 25 是 SMTP 的默认端口,但某些服务器可能会使用 不同的端口,特别是在启用 SSL 的情况下
SSL/TLS:如果 SMTP 服务器
,请确保您使用的是 SSL 或 TLS
需要它。但是,在您当前的脚本中,您正在设置
$smtp.EnableSSL = $true;,但您使用的是端口 25,通常
不使用 SSL。您应该使用端口 587 (TLS) 或删除
$smtp 行。启用 SSL = $true;如果不需要 SSL。
发件人电子邮件:确保您使用的“发件人”电子邮件地址
([电子邮件受保护]) 允许通过 SMTP 服务器发送电子邮件。
权限:检查是否设置了任何权限或限制
可能导致“访问被拒绝”的 SMTP 服务器上的问题
错误。