2017-10-01 1 views
1

Je suis un développeur Powershell, curieux de savoir ce que la communauté recommande aux fournisseurs de messagerie pour l'envoi de notifications quotidiennes.Envoyer un e-mail Powershell avec Google 2FA?

Ceci est pour un usage personnel, mais je sais 2FA Google empêche l'automatisation de ce genre de chose.

Fondamentalement, je veux juste être en mesure de m'envoyer une alerte quotidienne par e-mail à la Send-MailMessage, toute contribution serait appréciée.

Répondre

0

Les utilisateurs de Gmail peuvent accéder à leur compte sur le site Web officiel ou utiliser des applications et des services de première ou de tierce partie. Une application de première partie est par exemple l'application Gmail officielle de Google pour Android, tandis que Thunderbird et l'application client de messagerie de Windows 8 sont des applications tierces. En avril 2014, elle améliorerait la sécurité de connexion de ses services et affecterait toute application qui envoie des noms d'utilisateur et des mots de passe à la société.

La société a suggéré de passer à OAuth 2.0 à l'époque, mais ne l'a pas appliqué jusqu'à maintenant.

Si vous ouvrez la nouvelle page des applications less secure sous les paramètres de sécurité de Google, vous remarquerez que Google a désactivé l'accès par défaut.

Remarque: Vous ne voyez la page que si vous n'utilisez pas Google Apps ou si vous avez activé l'authentification à deux facteurs pour le compte.

Vous pouvez activer le commutateur ici pour activer à nouveau des applications moins sécurisées afin que l'accès soit rétabli.

enter image description here

Voici un exemple pour envoyer l'email avec SSL avec un code Authentification hybride lot et Powershell Script.

Il suffit de l'enregistrer comme 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) 
+0

Impressionnant, merci Hackoo! – trebleCode