使用 SMTP 从 powershell 发送邮件时访问被拒绝

问题描述 投票:0回答:1

我正在尝试从 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,但我没有看到他们使用任何类型的身份验证。堆栈线程表示,在同一域内发送邮件时可能不需要身份验证。我们将非常感谢您的帮助。谢谢。

powershell email stored-procedures smtp
1个回答
0
投票

这是脚本的修改版本,其中包括身份验证(假设 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 服务器上的问题
    错误。

© www.soinside.com 2019 - 2024. All rights reserved.