gpt4 book ai didi

powershell - 如何将凭据传递给 Send-MailMessage 命令以发送电子邮件

转载 作者:行者123 更新时间:2023-12-03 07:54:59 27 4
gpt4 key购买 nike

我很难将我的凭据传递给 Send-MailMessage命令

这是我正在运行的:

Send-MailMessage -smtpServer smtp.gmail.com -from 'myself@gmail.com' `
-to 'myself@gmail.com' -subject 'Test' -attachment C:\CDF.pdf

它在消息下方出错,这显然是因为我没有通过我的 gmail 凭据
Send-MailMessage : The SMTP server requires a secure connection or the client was not
authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first.

我用谷歌搜索了一下,还浏览了 Send-MailMessage 的手册页并发现需要传递“-credential”参数。

我的问题是:如何?

我尝试使用 Get-Credentials 如下:
$mycredentials = Get-Credential

然后在弹出的框中输入我的用户名和 gmail 密码。

然后我运行以下命令:
Send-MailMessage -smtpServer smtp.gmail.com -credentail $mycredentials `
-from 'myself@gmail.com' -to 'myself@gmail.com' -subject 'Test' -attachment C:\CDF.pdf

并且仍然以完全相同的错误失败。

所以我需要你们帮助我如何将我的凭据传递给 Send-MailMessage命令。我了解了 PScredentials,但不确定它是什么以及如何在这种情况下使用它。

最佳答案

我找到了这个博客站点:Adam Kahtava
我也发现了这个问题:send-mail-via-gmail-with-powershell-v2s-send-mailmessage
问题是,它们都没有满足您的需求(带密码的附件),所以我将两者结合起来并想出了这个:

$EmailTo = "myself@gmail.com"
$EmailFrom = "me@mydomain.com"
$Subject = "Test"
$Body = "Test Body"
$SMTPServer = "smtp.gmail.com"
$filenameAndPath = "C:\CDF.pdf"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)
$SMTPMessage.Attachments.Add($attachment)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username", "password");
$SMTPClient.Send($SMTPMessage)

因为我喜欢为事物创建函数,并且我需要我能得到的所有实践,所以我继续写了这个:
Function Send-EMail {
Param (
[Parameter(`
Mandatory=$true)]
[String]$EmailTo,
[Parameter(`
Mandatory=$true)]
[String]$Subject,
[Parameter(`
Mandatory=$true)]
[String]$Body,
[Parameter(`
Mandatory=$true)]
[String]$EmailFrom="myself@gmail.com", #This gives a default value to the $EmailFrom command
[Parameter(`
mandatory=$false)]
[String]$attachment,
[Parameter(`
mandatory=$true)]
[String]$Password
)

$SMTPServer = "smtp.gmail.com"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
if ($attachment -ne $null) {
$SMTPattachment = New-Object System.Net.Mail.Attachment($attachment)
$SMTPMessage.Attachments.Add($SMTPattachment)
}
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom.Split("@")[0], $Password);
$SMTPClient.Send($SMTPMessage)
Remove-Variable -Name SMTPClient
Remove-Variable -Name Password

} #End Function Send-EMail

要调用它,只需使用以下命令:
Send-EMail -EmailTo "Myself@gmail.com" -Body "Test Body" -Subject "Test Subject" -attachment "C:\cdf.pdf" -password "Passowrd"

我知道像这样简单地输入密码是不安全的。我会看看我是否可以提出更安全的东西并稍后更新,但至少这应该可以让您获得开始所需的东西。祝您度过愉快的一周!

编辑:添加 $EmailFrom基于 JuanPablo 的评论

编辑:SMTP 在附件中拼写为 STMP。

关于powershell - 如何将凭据传递给 Send-MailMessage 命令以发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com