我正在使用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(使用该脚本的计算机)。
答案 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。
如果您从一开始就发布了代码和错误消息,我们就能够更早地提供此答案。