【问题标题】:How to send email with PowerShell如何使用 PowerShell 发送电子邮件
【发布时间】:2016-07-21 04:44:50
【问题描述】:

我想从 PowerShell 发送电子邮件, 所以我使用这个命令:

$EmailFrom = "customer@yahoo.com"
$EmailTo = "receiver@ymail.com"  
$Subject = "today date"
$Body = "TODAY SYSTEM DATE=01/04/2016  SYSTEM TIME=11:32:05.50"
$SMTPServer = "smtp.mail.yahoo.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)   
$SMTPClient.EnableSsl = $true    
$SMTPClient.Credentials = New-Object 
System.Net.NetworkCredential("customer@yahoo.com", "password")    
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

此命令不适用于 Yahoo 邮件或 Outlook 邮件,但适用于我的 Gmail。 我做错了什么吗?

【问题讨论】:

  • 任何理由不use Send-MailMessage?
  • 我刚学PS,不知道有这个命令
  • 只想指出 Send-MailMessage 现在已被弃用。

标签: powershell smtp


【解决方案1】:

下面的代码 sn-p 真的很适合我:

$Username = "MyUserName";
$Password = "MyPassword";
$path = "C:\attachment.txt";

function Send-ToEmail([string]$email, [string]$attachmentpath){

    $message = new-object Net.Mail.MailMessage;
    $message.From = "YourName@gmail.com";
    $message.To.Add($email);
    $message.Subject = "subject text here...";
    $message.Body = "body text here...";
    $attachment = New-Object Net.Mail.Attachment($attachmentpath);
    $message.Attachments.Add($attachment);

    $smtp = new-object Net.Mail.SmtpClient("smtp.gmail.com", "587");
    $smtp.EnableSSL = $true;
    $smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
    $smtp.send($message);
    write-host "Mail Sent" ; 
    $attachment.Dispose();
 }
Send-ToEmail  -email "reciever@gmail.com" -attachmentpath $path;

【讨论】:

  • 顺便说一句,您需要在您的 gmail 帐户设置中允许访问不太安全的应用程序。它至少适用于 gmail。
  • 嗨,我试图在 email.ps1 文件中使用 Sean 的解决方案,并使用此 PowerShell.exe -NoProfile -ExecutionPolicy Bypass C:\email.ps1 从命令行运行它,但我不断收到关于身份验证的错误。我使用了正确的密码,对于用户名,我尝试了使用 @gmail.com 和没有使用我的 gmail 用户名。希望你能帮忙
  • 好吧,这不是 Google 的代码,我必须使用我的 gmail 帐户登录并从这里 myaccount.google.com/security#activity 找到“允许不太安全的应用程序:”以打开“允许不太安全的应用程序:”并收到了我的邮件!谢谢!
  • 嗨,我如何添加 CC 到这个?我尝试了$message.Cco.Add("emailaddress") 的多种组合,但无法正常工作
  • 如何添加多个附件?
【解决方案2】:

我用这个:

Send-MailMessage -To hi@abc.com -from hi2@abc.com -Subject 'hi' -SmtpServer 10.1.1.1

【讨论】:

  • 如何设置具体时间,例如使用上面的代码 - 例如在下午 4:00 发送电子邮件
  • 仅供参考,此命令已过时,因为它不能保证安全连接。有关更多信息,请参阅此页面:docs.microsoft.com/en-us/powershell/module/…
【解决方案3】:

您可以简单地使用 Gmail smtp。

以下是发送带有附件的 gmail 消息的 powershell 代码:

    $Message = new-object Net.Mail.MailMessage 
    $smtp = new-object Net.Mail.SmtpClient("smtp.gmail.com", 587) 
    $smtp.Credentials = New-Object System.Net.NetworkCredential("From@gmail.com", "password"); 
    $smtp.EnableSsl = $true 
    $smtp.Timeout = 400000  
    $Message.From = "From@gmail.com" 
    $Message.To.Add("To@gmail.com") 
    $Message.Attachments.Add("C:\foo\attach.txt") 
    $smtp.Send($Message)

在发件人 Google 帐户 (From@gmail.com) 上,

确保您已为安全性较低的应用打开访问权限选项, 来自谷歌帐户安全仪表板。

最后,将此脚本另存为 mail.ps1

要在命令提示符或批处理文件上调用上述脚本简单运行:

    Powershell.exe -executionpolicy remotesigned -File mail.ps1

默认情况下,发送大型附件的超时时间约为 100 秒左右。 在这个脚本中,它增加到大约 5 或 6 分钟

【讨论】:

  • 这怎么比Send-MailMessage更安全?
【解决方案4】:

有时您可能需要将 EnableSsl 设置为 false(在这种情况下,消息将通过网络不加密发送)

【讨论】:

  • 参数确实存在
  • 它对我有用。这就是我写这篇文章的原因。如果这些解决方案都不适合您,请查找另一篇文章。
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2015-05-15
  • 2023-03-18
  • 2018-03-12
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多