我是Powershell开发人员,对社区建议电子邮件提供商发送每日通知感到好奇。
这是供个人使用,但我知道Google的2FA会阻止自动化这类事情。
基本上只是希望能够通过电子邮件la Send-MailMessage
向我发送每日提醒,我们将不胜感激。
答案 0 :(得分:1)
如果您创建了应用密码,可以使用gmail启用双因素身份验证。请参阅my answer here和Googles documentation here。
答案 1 :(得分:0)
Gmail用户可以在官方网站上访问其帐户,也可以使用第一方或第三方应用和服务。第一方应用程序是Google的Android官方Gmail应用程序,而Thunderbird和Windows 8的邮件客户端应用程序是第三方应用程序。
Google announced早在2014年4月,它将改善其服务的登录安全性,并影响向公司发送用户名和密码的任何应用程序。
该公司建议当时切换到OAuth 2.0,但直到现在才强制执行。
如果您在Google上的安全设置下打开新的less secure应用页面,您会发现Google默认禁用了访问权限。
注意:只有在您未使用Google Apps或已为该帐户启用双因素身份验证时才能看到该页面。
您可以在此处翻转开关以再次启用安全性较低的应用程序,以便重新获得访问权限。
这是一个使用混合代码批处理和Powershell脚本发送带有SSL身份验证的电子邮件的示例。
只需将其另存为 Gmail_PS_Batch_Sender.bat
<# : Batch portion
@rem # The previous line does nothing in Batch, but begins a multiline comment block
@rem # in PowerShell. This allows a single script to be executed by both interpreters.
@echo off & Mode 100,5 & color 0A
Title Sending E-mail with SSL Authentification with an Hybrid code Batch and Powershell Script by Hackoo
echo(
rem # This a Powershell command executes the hybrid portion at the bottom of this script
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0}|out-string)"') do set "%%I"
exit /b
rem # End multi-line PowerShell comment block. Begin PowerShell scripting.
: end Batch / begin PowerShell hybrid code #>
#################################### First 1 Step ###########################################
# First Step we encrypt the Plain Text Password to an encrypted one using the key AES.key
# Première étape, nous cryptons le mot de passe en clair vers un mot de passe chiffré
# à l'aide de la clé AES.key
$AppData = [Environment]::GetFolderPath('ApplicationData')
$KeyFile = $AppData+"\AES.key"
$Key = New-Object Byte[] 32 # You can use 16, 24, or 32 for AES
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | out-file $KeyFile
$AppData = [Environment]::GetFolderPath('ApplicationData')
$PasswordFile = $AppData+"\Password.txt"
$Key = Get-Content $KeyFile
$GmailUserName = Read-Host "Please enter your Gmail Account without ""@gmail.com"" "
$Password = Read-Host "Please enter your Gmail Password to be encrypted " -AsSecureString `
| ConvertFrom-SecureString -key $Key | Out-File $PasswordFile
#################################### First 1 Step ###########################################
#################################### Second 2 Step ##########################################
# We send the email with our encrypted Credentials
# Nous envoyons le courrier électronique avec les informations d'identification cryptés
#############################################################################################
Function Show-BalloonTip {
[CmdletBinding(SupportsShouldProcess = $true)]
param (
[Parameter(Mandatory=$true)]$Text,
[Parameter(Mandatory=$true)]$Title,
[ValidateSet('None', 'Info', 'Warning', 'Error')]$Icon = 'Info',
$Timeout = 10000
)
Add-Type -AssemblyName System.Windows.Forms
if ($script:balloon -eq $null) { $script:balloon = New-Object System.Windows.Forms.NotifyIcon }
$path = Get-Process -id $pid | Select-Object -ExpandProperty Path
$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.BalloonTipIcon = $Icon
$balloon.BalloonTipText = $Text
$balloon.BalloonTipTitle = $Title
$balloon.Visible = $true
$balloon.ShowBalloonTip($Timeout)
Start-Sleep -s 10
$balloon.Dispose()
}
################################################################################################
function Show-Message {
param (
[string]$Message = "Veuillez entrer votre message",
[string]$Titre = "Titre de la fenêtre",
[switch]$OKCancel,
[switch]$AbortRetryIgnore,
[switch]$YesNoCancel,
[switch]$YesNo,
[switch]$RetryCancel,
[switch]$IconErreur,
[switch]$IconQuestion,
[switch]$IconAvertissement,
[switch]$IconInformation
)
# Affecter la valeur selon le type de boutons choisis
if ($OKCancel) { $Btn = 1 }
elseif ($AbortRetryIgnore) { $Btn = 2 }
elseif ($YesNoCancel) { $Btn = 3 }
elseif ($YesNo) { $Btn = 4 }
elseif ($RetryCancel) { $Btn = 5 }
else { $Btn = 0 }
# Affecter la valeur pour l'icone
if ($IconErreur) {$Icon = 16 }
elseif ($IconQuestion) {$Icon = 32 }
elseif ($IconAvertissement) {$Icon = 48 }
elseif ($IconInformation) {$Icon = 64 }
else {$Icon = 0 }
# Charger la biblithèque d'objets graphiques Windows.Forms
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
# Afficher la boite de dialogue et renvoyer la valeur de retour (bouton appuyé)
$Reponse = [System.Windows.Forms.MessageBox]::Show($Message, $Titre , $Btn, $Icon)
Return $Reponse
}
################################################################################################
$SuccessMsg = "The email was sent successfully ; Please, check your email !"
$FailureMsg = "ERROR occurred while sending the email"
$AppData = [Environment]::GetFolderPath('ApplicationData')
$PasswordFile = $AppData+"\Password.txt"
$keyFile = $AppData+"\AES.Key"
$key = Get-Content $KeyFile
$GmailEncryptedPassword = Get-Content $PasswordFile | ConvertTo-SecureString -Key $key
$Credentials = New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList($GmailUserName,$GmailEncryptedPassword)
$EmailFrom = $GmailUserName+"@gmail.com"
$EmailTo = $EmailFrom
$Subject = "Sending E-mail with SSL Authentification with an Hybrid code Batch and Powershell Script"
$Body = (Get-Date -format F) + " Hello ! the sending email is working now with PowerShell and Batch Script!"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer,587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = $Credentials
try
{
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
Show-Message -Message $SuccessMsg -Titre $SuccessMsg -IconInformation
Show-BalloonTip -Text $SuccessMsg -Title $SuccessMsg -Icon 'Info'
}
catch
{
Show-Message -Message $_.Exception.Message -Titre $FailureMsg -IconErreur
Show-BalloonTip -Text $_.Exception.Message -Title 'ERROR occurred while sending the email' -Icon 'Error'
}
exit(1)