我在Windows Server 2012 r2中安装了SMTP虚拟服务器。后来我使用以下PowerShell脚本发送电子邮件。哪个成功
$email = "xxxxxxxxxx@xxxxxx.com"
$pass = "xxxxxxx"
$smtpServer = "smtp.office365.com"
$smtpPort = "25"
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.EnableSsl = $true
$msg.From = "$email"
$attachment = New-Object Net.Mail.Attachment("C:abcd/123.txt");
$msg.Attachments.Add($attachment);
$msg.To.Add("xxxx@xxxxx.com")
$msg.BodyEncoding = [system.Text.Encoding]::Unicode
$msg.SubjectEncoding = [system.Text.Encoding]::Unicode
$msg.IsBodyHTML = $true
$msg.Subject ="List of users"
$msg.Body=$msg.Body = "<h2> hi everyone </h2>
$SMTP.Credentials = New-Object System.Net.NetworkCredential("$email", "$pass");
$smtp.Send($msg)
这里我的问题是我可以在不使用上述脚本中的地址的情况下发送电子邮件(是否有机会在SMTP虚拟服务器设置中的某处保存电子邮件地址和凭据,以便脚本可以直接获取凭据)。我不想使用上面脚本中的电子邮件地址和凭据
答案 0 :(得分:2)
我建议使用Send-MailMessage
而不是手动.NET操作:
$Creds = Import-CliXml -Path 'C:\mycreds.xml'
$MailArgs = @{ 'SmtpServer' = 'smtp.office365.com'
'Port' = 25
'To' = 'xxxx@xxxxx.com'
'From' = $Creds.UserName
'Subject' = 'List of users'
'Attachments' = 'C:\abcd\123.txt'
'Body' = '<h2> hi everyone </h2>'
'Encoding' = [Text.Encoding]::Unicode
'BodyAsHtml' = $true
'UseSsl' = $true
'Credential' = $Creds
}
Send-MailMessage @MailArgs
您可以按如下方式创建$Creds
对象:
Get-Credential -Credential 'xxxxxxxxxx@xxxxxx.com' | Export-CliXml -Path 'C:\mycreds.xml'
您可能会感兴趣的一些额外选项(例如交付通知),您可以在上面链接的文档中阅读。
此外,使用特定于该设备和帐户utilizing DPAPI的Export-CliXml
导出密码时会对其进行加密。