pengembangan-web-mp-pd.com

Kirim email melalui gmail dengan Send-MailMessage dari PowerShell V2

Saya mencoba mencari cara untuk menggunakan Send-MailMessage PowerShell V2 dengan gmail.

Inilah yang saya miliki sejauh ini.

$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...

Saya mendapatkan kesalahan berikut

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

Apakah saya melakukan sesuatu yang salah, atau Send-MailMessage belum sepenuhnya dipanggang (saya menggunakan CTP 3)?

Beberapa batasan tambahan

  1. Saya ingin ini non-interaktif, jadi get-credential tidak akan berfungsi
  2. Akun pengguna tidak pada domain gmail, tetapi domain google apps terdaftar
  3. Untuk pertanyaan ini, saya hanya tertarik pada cmdlet Send-MailMessage, mengirim email melalui .Net API yang biasa dipahami dengan baik.
39
Scott Weinstein

Baru saja menemukan pertanyaan ini .. inilah Sampel PowerShell Send-MailMessage saya untuk Gmail .. Solusi yang sudah teruji dan berfungsi: 

$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)

Cukup ganti $ EmailTo, dan nama pengguna/kata sandi dalam $ SMTPClient.Credentials .. jangan sertakan @ gmail.com di nama pengguna Anda .. 

mungkin ini adalah bantuan untuk orang lain yang menemukan pertanyaan ini .. 

45
Christian Casutt

Ini akan memperbaiki masalah Anda

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

Kemudian gunakan kredensial di dalam panggilan Anda ke Send-MailMessage -From $From -To $To -Body $Body $Body -SmtpServer {$smtpServer URI} -Credential $credentials -Verbose -UseSsl

13
Jstar

saya baru saja mengalami masalah yang sama dan mengalami posting ini. Ini benar-benar membantu saya untuk menjalankannya dengan perintah send-MailMessage-let asli dan di sini adalah kode saya:

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

Namun, agar Gmail mengizinkan saya menggunakan server SMTP, saya harus masuk ke akun gmail saya dan di bawah tautan ini https://www.google.com/settings/security atur "Akses kurang mengamankan aplikasi "ke" Diaktifkan ". Lalu akhirnya berhasil !!

ciao marco

7
Marco Mirandola

Saya tidak yakin Anda dapat mengubah nomor port dengan Kirim-MailMessage sejak gmail bekerja pada port 587. Bagaimanapun, berikut ini cara mengirim email melalui gmail dengan.

$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

Saya menggunakan solusi Christian 12 Februari dan saya juga baru mulai belajar PowerShell. Sejauh lampiran, saya mencari-cari dengan Get-Member belajar cara kerjanya dan memperhatikan bahwa Kirim () memiliki dua definisi ... definisi kedua mengambil objek System.Net.Mail.MailMailMessage yang memungkinkan untuk Lampiran dan banyak lagi yang lebih kuat dan fitur yang bermanfaat seperti Cc dan Bcc. Berikut adalah contoh yang memiliki lampiran (untuk dicampur dengan contohnya di atas):

# 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)

Nikmati!

4
core

Setelah banyak tes dan pencarian solusi yang panjang. Saya menemukan kode script fungsional dan menarik di 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

Nikmati

3
BSF

Ini adalah tanggal yang sangat terlambat untuk berpadu di sini, tapi mungkin ini bisa membantu orang lain.

Saya benar-benar baru di PowerShell dan saya mencari tentang gmailing dari PS. Saya mengambil apa yang Anda lakukan di atas, dan memodifikasinya sedikit dan telah membuat skrip yang akan memeriksa lampiran sebelum menambahkannya, dan juga untuk mengambil sejumlah penerima. Saya akan menambahkan beberapa pengecekan kesalahan dan lain-lain nanti, tapi saya pikir mungkin cukup bagus (dan cukup mendasar) untuk dikirim ke sini. 

## 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 )

Tentu saja, ubah nilai GMAIL_USERNAME dan GMAIL_PASSWORD ke pengguna khusus Anda dan sampaikan.

3
Rodney Fisk

Kirim email dengan lampiran menggunakan PowerShell -

      $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

Pada Mesin Windows 8.1 saya mendapat Send-MailMessage untuk mengirim email dengan lampiran melalui GMail menggunakan skrip berikut:

$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

Ini dia 

$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)

Beritahu saya jika ini membantu Anda San juga menggunakan pesan-kirim juga di Www.techjunkie.tv Untuk itu juga saya pikir cara ini lebih baik dan murni untuk digunakan

1

Saya setuju dengan solusi Christian Muggli, meskipun pada awalnya saya masih mendapatkan kesalahan yang dilaporkan Scott Weinstein. Bagaimana Anda melewati itu adalah:

BAIK masuk pertama ke gmail dari mesin ini akan berjalan pada, menggunakan akun yang ditentukan. (TIDAK perlu menambahkan situs google apa pun ke zona Situs Tepercaya, bahkan jika Internet Explorer Enhanced Security Configuration diaktifkan.)

ATAU, pada upaya pertama Anda, Anda akan mendapatkan kesalahan, dan akun gmail Anda akan mendapatkan pemberitahuan tentang login yang mencurigakan, jadi ikuti instruksi mereka untuk memungkinkan login selanjutnya dari mesin ini akan berjalan.

0
Tom Keller

Saya belum pernah menggunakan pesan-kirim PowerShell V2, tetapi saya telah menggunakan kelas System.Net.Mail.SMTPClient di V1 untuk mengirim pesan ke akun gmail untuk tujuan demo. Ini mungkin berlebihan tetapi menjalankan server smtp di laptop Vista saya lihat tautan ini , jika Anda berada di perusahaan Anda sudah memiliki server yang mengandalkan surat dan langkah ini tidak diperlukan. Memiliki server smtp saya dapat mengirim email ke akun gmail saya dengan kode berikut:

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