2017-04-04 1 views
0

J'essaie de tester l'envoi d'un e-mail, mais je ne veux pas avoir un mot de passe en clair dans mon script.Envoyer un e-mail via Powershell en utilisant le mot de passe sécurisé

Voici ce que j'ai, et cela fonctionne:

$SmtpServer = 'smtp.office365.com' 
$SmtpUser = '[email protected]' 
$smtpPassword = 'Hunter2' 
$MailtTo = '[email protected]' 
$MailFrom = '[email protected]' 
$MailSubject = "Test using $SmtpServer" 
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $SmtpUser, $($smtpPassword | ConvertTo-SecureString -AsPlainText -Force) 
Send-MailMessage -To "$MailtTo" -from "$MailFrom" -Subject $MailSubject -SmtpServer $SmtpServer -UseSsl -Credential $Credentials 

Cela fonctionne.

J'ai suivi le conseil de this stackoverflow thread, car je voudrais que ce script s'exécute sans demander d'informations d'identification (ou en entrant du texte en clair), afin que je puisse l'exécuter en tant que tâche planifiée.

J'ai un mot de passe sécurisé J'ai créé en exécutant:

read-host -assecurestring | convertfrom-securestring | out-file C:\Users\FubsyGamr\Documents\mysecurestring_fubsygamr.txt 

Mais si je remplace mon entrée $ SMTPPASSWORD avec l'entrée suggéré:

$SmtpServer = 'smtp.office365.com' 
$SmtpUser = '[email protected]' 
$smtpPassword = cat C:\Users\FubsyGamr\Documents\mysecurestring_fubsygamr.txt | convertto-securestring 
$MailtTo = '[email protected]' 
$MailFrom = '[email protected]' 
$MailSubject = "Test using $SmtpServer" 
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $SmtpUser, $($smtpPassword | ConvertTo-SecureString -AsPlainText -Force) 
Send-MailMessage -To "$MailtTo" -from "$MailFrom" -Subject $MailSubject -SmtpServer $SmtpServer -UseSsl -Credential $Credentials 

Alors l'e-mail ne pas envoyer plus. Je reçois l'erreur suivante:

Send-MailMessage : The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

Des conseils? Je souhaite exécuter ce script d'e-mail en tant que tâche planifiée, mais je ne souhaite pas que mon mot de passe soit enregistré en texte brut.

Répondre

1

Collègue m'a aidé à réaliser l'objet $Credentials essayait de convertir mon mot de passe en texte brut. J'ai enlevé le modificateur ConvertTo-SecureSTring -AsPlainText -Force, et l'e-mail a été envoyé avec succès!

Le script fonctionnement:

$SmtpServer = 'smtp.office365.com' 
$SmtpUser = '[email protected]' 
$smtpPassword = cat C:\Users\FubsyGamr\Documents\mysecurestring_fubsygamr.txt | convertto-securestring 
$MailtTo = '[email protected]' 
$MailFrom = '[email protected]' 
$MailSubject = "Test using $SmtpServer" 
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $SmtpUser, $smtpPassword 
Send-MailMessage -To "$MailtTo" -from "$MailFrom" -Subject $MailSubject -SmtpServer $SmtpServer -UseSsl -Credential $Credentials