在 Powershell 中使用 SmtpClient 的 FQDN

G_h*_*hi3 1 .net powershell smtp

System.Net.Mail.SmtpClient在 Powershell 中使用 .Net 类来发送带有一些附加文档的邮件。它在我们的测试环境中运行良好,但在生产中失败。

问题是,在生产中需要一个完全指定的域名来发送邮件。但是,据我所知, SmtpClient 不允许我指定这一点。我在网上看过,你可以在asp.net 中使用web.config 设置来指定域名,但我似乎无法在Powershell 中使用它。

有没有办法解决这个问题,或者我必须用另一种语言来实现它?

编辑:这是我正在使用的代码

$SmtpClient = New-Object System.Net.Mail.SmtpClient "mail.mailserver.com", 25
$Mail = New-Object System.Net.Mail.MailMessage

# Custom (working) Cmdlet for creating a NetworkCredential object
$SmtpClient.Credentials = (GetCredential-FromFile)

$Mail.Subject = "New Import"
$Mail.Body = ""
$Mail.From = "myaddress@mailserver.com"
$Mail.To.Add("myaddress@mailserver.com")
$Mail.Attachments.Add(New-Object System.Net.Mail.Attachment "file.txt")

$SmtpClient.Send($Mail)
Run Code Online (Sandbox Code Playgroud)

SMTP-Server 已设置,但我需要设置客户端(使用脚本的机器)的 FQDN。

Ans*_*ers 5

这是 .NET Framework 实现中的一个错误(或缺失的功能,取决于您希望如何看待它)。默认情况下,主机的 NetBIOS 名称用于 HELO 命令,并且SmtpClient该类没有用于在程序/脚本中配置 HELO 主机名的属性。有关该问题的详细讨论,请参见此处。您需要在客户端上创建/更改配置文件以覆盖默认值。

编辑powershell.exe.config所在目录中的文件powershell.exe。如果文件不存在,则创建该文件。确保它至少包含以下几行:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="network">
        <network clientDomain="mail.example.com" />
      </smtp>
    </mailSettings>
  </system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

替换mail.example.com为您客户的 FQDN。

对于 .NET Framework 2.0,您首先需要应用补丁(或升级到 .NET Framework 4.0 或更高版本),然后才能配置该clientDomain属性。

有关 SMTP 客户端网络设置的更多信息,请参见此处

如果您从一开始就发布了您的代码和错误消息,我们就可以更早地提供此答案。