Powershell中使用SmtpClient的FQDN

时间:2016-05-24 10:14:15

标签: .net powershell smtp

我正在使用Powershell中的.Net类System.Net.Mail.SmtpClient发送包含一些附加文档的邮件。这一切在我们的测试环境中都很有效,但在生产中失败了。

问题是,生产中需要一个完全指定的域名才能发送邮件。但据我所知,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)

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

1 个答案:

答案 0 :(得分:3)

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

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>

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

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

有关SMTP客户端网络设置的详细信息,请参阅here

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