it-swarm.com.de

Senden Sie E-Mails über Google Mail mit der Send-MailMessage von PowerShell V2

Ich versuche herauszufinden, wie Sie Send-MailMessage von PowerShell V2 mit Google Mail verwenden können.

Hier ist was ich bis jetzt habe.

$ss = new-object Security.SecureString
foreach ($ch in "password".ToCharArray())
{
    $ss.AppendChar($ch)
}
$cred = new-object Management.Automation.PSCredential "[email protected]", $ss
Send-MailMessage    -SmtpServer smtp.gmail.com -UseSsl -Credential $cred -Body...

Ich erhalte folgende Fehlermeldung

Send-MailMessage : The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn
 more at                              
At foo.ps1:18 char:21
+     Send-MailMessage <<<<      `
    + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

Mache ich etwas falsch oder ist Send-MailMessage noch nicht vollständig gebacken (ich bin auf CTP 3)?

Einige zusätzliche Einschränkungen

  1. Ich möchte, dass dies nicht interaktiv ist, so dass get-credential nicht funktioniert
  2. Das Benutzerkonto befindet sich nicht in der Google Mail-Domäne, sondern in einer bei Google Apps registrierten Domäne
  3. Für diese Frage interessiere ich mich nur für das Send-MailMessage-Cmdlet. Das Senden von E-Mails über die normale .Net-API ist selbstverständlich.
39
Scott Weinstein

Ich habe gerade diese Frage gefunden ... hier ist mein PowerShell-Beispiel für Send-MailMessage für Google Mail. Getestete und funktionierende Lösung: 

$EmailFrom = "[email protected]"
$EmailTo = "[email protected]" 
$Subject = "Notification from XYZ" 
$Body = "this is a notification from XYZ Notifications.." 
$SMTPServer = "smtp.gmail.com" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username", "password"); 
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Ändern Sie einfach $ EmailTo und Benutzername/Passwort in $ SMTPClient.Credentials. Fügen Sie @ gmail.com nicht in Ihren Benutzernamen ein. 

vielleicht ist dies eine Hilfe für andere, die auf diese Frage stoßen. 

45

Dies sollte Ihr Problem beheben

$credentials = new-object Management.Automation.PSCredential “[email protected]”, (“password” | ConvertTo-SecureString -AsPlainText -Force)

Verwenden Sie dann den Berechtigungsnachweis in Ihrem Aufruf an Send-MailMessage -From $From -To $To -Body $Body $Body -SmtpServer {$smtpServer URI} -Credential $credentials -Verbose -UseSsl.

13
Jstar

ich hatte gerade das gleiche Problem und stieß auf diesen Beitrag. Es hat mir tatsächlich geholfen, es mit dem nativen Send-MailMessage-Kommando-let zum Laufen zu bringen, und hier ist mein Code:

$cred = Get-Credential
Send-MailMessage ....... -SmtpServer "smtp.gmail.com" -UseSsl -Credential $cred -Port 587 

Damit Google Mail den SMTP-Server verwenden kann, musste ich mich bei meinem Google Mail-Konto anmelden und unter diesem Link https://www.google.com/settings/security den "Zugriff für weniger" einstellen sichere Apps "auf" Aktiviert ". Dann hat es endlich funktioniert !!

ciao marco

7
Marco Mirandola

Ich bin nicht sicher, ob Sie Port-Nummern mit Send-MailMessage ändern können, da Google Mail an Port 587 funktioniert. Wie auch immer, E-Mails über Google Mail mit .NET SmtpClient senden:

$smtpClient = new-object system.net.mail.smtpClient 
$smtpClient.Host = 'smtp.gmail.com'
$smtpClient.Port = 587
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = [Net.NetworkCredential](Get-Credential GmailUserID) 
$smtpClient.Send('[email protected]','[email protected]','test subject', 'test message')
6
Shay Levy

Ich habe die Lösung vom 12. Februar von Christian verwendet und fange gerade an, PowerShell zu lernen. Was Anhänge angeht, stöberte ich bei Get-Member herum, wie es funktioniert, und stellte fest, dass Send () zwei Definitionen hat ... die zweite Definition erfordert ein System.Net.Mail.MailMessage-Objekt, das Anhänge und vieles mehr ermöglicht und nützliche Funktionen wie Cc und Bcc. Hier ist ein Beispiel mit Anhängen (mit dem obigen Beispiel zu mischen):

# append to Christian's code above --^
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = $EmailFrom
$emailMessage.To.Add($EmailTo)
$emailMessage.Subject = $Subject
$emailMessage.Body = $Body
$emailMessage.Attachments.Add("C:\Test.txt")
$SMTPClient.Send($emailMessage)

Genießen!

4
core

Nach vielen Tests und einer langen Suche nach Lösungen. Ich habe einen funktionalen und interessanten Skriptcode gefunden unter http://www.powershellmagazine.com/2012/10/25/pstip-sending-emails-using-your-gmail-account/ .

$param = @{
    SmtpServer = 'smtp.gmail.com'
    Port = 587
    UseSsl = $true
    Credential  = '[email protected]'
    From = '[email protected]'
    To = '[email protected]'
    Subject = 'Sending emails through Gmail with Send-MailMessage'
    Body = "Check out the PowerShellMagazine.com website!"
    Attachments = 'D:\articles.csv'
}

Send-MailMessage @param

Genießen

3
BSF

Dies ist ein wirklich spätes Datum, an dem man hier klingeln kann, aber vielleicht kann dies jemand anderem helfen.

Ich bin ein Neuling in Powershell und habe über PSmailing nach Gmailing gesucht. Ich habe das, was Sie oben gemacht haben, etwas geändert und ein wenig modifiziert. Ich habe ein Skript entwickelt, in dem nach Anhängen gesucht wird, bevor Sie sie hinzufügen, und außerdem eine Reihe von Empfängern. Ich werde später noch ein paar Fehlerprüfungen hinzufügen, aber ich dachte, es wäre gut genug (und grundlegend genug), um hier zu posten. 

## Send-Gmail.ps1 - Send a gmail message
## By Rodney Fisk - [email protected]
## 2 / 13 / 2011

# Get command line arguments to fill in the fields
# Must be the first statement in the script
param(
    [Parameter(Mandatory = $true,
                    Position = 0,
                    ValueFromPipelineByPropertyName = $true)]
    [Alias('From')] # This is the name of the parameter e.g. -From [email protected]
    [String]$EmailFrom, # This is the value [Don't forget the comma at the end!]

    [Parameter(Mandatory = $true,
                    Position = 1,
                    ValueFromPipelineByPropertyName = $true)]
    [Alias('To')]
    [String[]]$Arry_EmailTo,

    [Parameter(Mandatory = $true,
                    Position = 2,
                    ValueFromPipelineByPropertyName = $true)]
    [Alias( 'Subj' )]
    [String]$EmailSubj,

    [Parameter(Mandatory = $true,
                    Position = 3,
                    ValueFromPipelineByPropertyName = $true)]
    [Alias( 'Body' )]
    [String]$EmailBody,

    [Parameter(Mandatory = $false,
                    Position = 4,
                    ValueFromPipelineByPropertyName = $true)]
    [Alias( 'Attachment' )]
    [String[]]$Arry_EmailAttachments

)

# From Christian @ StackOverflow.com
$SMTPServer = "smtp.gmail.com" 
$SMTPClient = New-Object Net.Mail.SMTPClient( $SmtpServer, 587 )  
$SMTPClient.EnableSSL = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( "GMAIL_USERNAME", "GMAIL_PASSWORD" ); 

# From Core @ StackOverflow.com
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = $EmailFrom
foreach ( $recipient in $Arry_EmailTo )
{
    $emailMessage.To.Add( $recipient )
}
$emailMessage.Subject = $EmailSubj
$emailMessage.Body = $EmailBody
# Do we have any attachments?
# If yes, then add them, if not, do nothing
if ( $Arry_EmailAttachments.Count -ne $NULL ) 
{
    $emailMessage.Attachments.Add()
}
$SMTPClient.Send( $emailMessage )

Ändern Sie natürlich die Werte für GMAIL_USERNAME und GMAIL_PASSWORD in Ihren jeweiligen Benutzer und übergeben Sie diese.

3
Rodney Fisk

E-Mail mit Anhang mit Powershell senden -

      $EmailTo = "[email protected]"  // [email protected]
      $EmailFrom = "[email protected]"  //[email protected]
      $Subject = "zx"  //subject
      $Body = "Test Body"  //body of message
      $SMTPServer = "smtp.gmail.com" 
      $filenameAndPath = "G:\abc.jpg"  //attachment
      $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("[email protected]", "xxxxxxxx");    // xxxxxx-password
      $SMTPClient.Send($SMTPMessage)
2
udit043

Auf einem Windows 8.1-Computer erhielt ich Send-MailMessage, um eine E-Mail mit einem Anhang über GMail zu senden, wobei das folgende Skript verwendet wird:

$EmFrom = "[email protected]"    
$username = "[email protected]"    
$pwd = "YOURPASSWORD"    
$EmTo = "[email protected]"    
$Server = "smtp.gmail.com"    
$port = 587    
$Subj = "Test"    
$Bod = "Test 123"    
$Att = "c:\Filename.FileType"    
$securepwd = ConvertTo-SecureString $pwd -AsPlainText -Force    
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $securepwd    
Send-MailMessage -To $EmTo -From $EmFrom -Body $Bod -Subject $Subj -Attachments $Att -SmtpServer $Server -port $port -UseSsl  -Credential $cred
2
Andy Urban

Hier ist es 

$filename = “c:\scripts_scott\test9999.xls”
$smtpserver = “smtp.gmail.com”
$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($filename)
$smtp = new-object Net.Mail.SmtpClient($smtpServer )
$smtp.EnableSsl = $True
$smtp.Credentials = New-Object System.Net.NetworkCredential(“username”, “password_here”); # Put username without the @GMAIL.com or – @gmail.com
$msg.From = “[email protected]”
$msg.To.Add(”[email protected]”)
$msg.Subject = “Monthly Report”
$msg.Body = “Good MorningATTACHED”
$msg.Attachments.Add($att)
$smtp.Send($msg)

Lassen Sie mich wissen, ob es Ihnen hilft, die send-mail-Nachricht auch unter Www.techjunkie.tv .__ zu verwenden. Für diesen Weg denke ich auch, dass es viel besser und reiner ist

1

Ich stimme der Lösung von Christian Muggli zu, obwohl ich zunächst immer noch den von Scott Weinstein gemeldeten Fehler bekam. Wie kommst du an das ist:

WEDER das erste Mal bei gmail angemeldet wird, von dem Rechner aus, auf dem dieser ausgeführt wird, und zwar mit dem angegebenen Konto. (Es ist NICHT erforderlich, Google-Sites zur Zone der vertrauenswürdigen Sites hinzuzufügen, auch wenn die erweiterte Sicherheitskonfiguration von Internet Explorer aktiviert ist.)

ODER beim ersten Versuch wird der Fehler angezeigt, und Ihr Google Mail-Konto wird über eine verdächtige Anmeldung informiert. Folgen Sie den Anweisungen, um zukünftige Anmeldungen von der Maschine zuzulassen, auf der dieser ausgeführt wird.

0
Tom Keller

Ich habe PowerShell V2 send-mailmessage nicht verwendet, aber ich habe die Klasse System.Net.Mail.SMTPClient in V1 verwendet, um Nachrichten zu Demo-Zwecken an ein Google Mail-Konto zu senden. Dies kann ein Übermaß sein, aber einen SMTP-Server auf meinem Vista-Laptop ausführen. Siehe diesen Link . Wenn Sie sich in einem Unternehmen befinden, verfügen Sie bereits über einen Mail-Relay-Server. Mit einem SMTP-Server kann ich eine E-Mail mit folgendem Code an mein Google Mail-Konto senden:

$smtpmail = [System.Net.Mail.SMTPClient]("127.0.0.1")
$smtpmail.Send("[email protected]", "[email protected]", "Test Message", "Message via local smtp")
0
Chad Miller