it-swarm-tr.com

PowerShell V2'nin Send-MailMessage ile e-posta yoluyla posta gönderin

PowerShell V2'nin Send-MailMessage dosyasını gmail ile nasıl kullanacağımı bulmaya çalışıyorum.

İşte şimdiye kadar sahip olduğum şey.

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

Aşağıdaki hatayı alıyorum

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

Yanlış bir şey mi yapıyorum, yoksa Send-MailMessage henüz tam olarak pişirilmemiş mi (CTP 3'teyim)?

Bazı ek kısıtlamalar

  1. Bunun etkileşimli olmamasını istiyorum, bu yüzden get-credential çalışmayacak
  2. Kullanıcı hesabı, gmail etki alanında değil, bir google apps kayıtlı etki alanında
  3. Bu soru için, sadece Send-MailMessage cmdlet ile ilgileniyorum, normal .Net API'sinden mail gönderiyoruz.
39
Scott Weinstein

Sadece bu soruyu buldum .. İşte benim Gmail için PowerShell Send-MailMessage Örneği .. Test edilmiş ve çalışan bir çözüm: 

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

Sadece $ EmailTo değiştirin ve $ SMTPClient.Credentials .. içindeki kullanıcı adı/şifrenizi girin. Kullanıcı adınıza @ gmail.com dahil etmeyin. 

belki de bu, bu soruya karşı karşıya gelmek için başka bir yardımdır .. 

45
Christian Casutt

Bu sorunu çözmeli

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

Ardından Send-MailMessage -From $From -To $To -Body $Body $Body -SmtpServer {$smtpServer URI} -Credential $credentials -Verbose -UseSsl çağrısında kimlik bilgilerini kullanın.

13
Jstar

ben de aynı sorunu yaşadım ve bu yazıya rastladım. Aslında yerel Send-MailMessage komut-let ile çalışmasını sağlamak için bana yardımcı oldu ve işte benim kod:

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

Ancak, Gmail’in SMTP sunucusunu kullanmama izin vermesini sağlamak için, gmail hesabıma giriş yapmak zorunda kaldım ve bu bağlantı altında https://www.google.com/settings/security "Daha az erişim sağla" uygulamaları "Etkin" olarak güvenli hale getirin. Sonra nihayet işe yaradı!

ciao marco

7
Marco Mirandola

Gmail 587 numaralı bağlantı noktasında çalıştığı için Send-MailMessage ile bağlantı noktası numaralarını değiştirebileceğinizden emin değilim.

$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

Christian'ın 12 Şubat çözümünü kullandım ve ayrıca PowerShell'i öğrenmeye yeni başladım. Ekler kadar Get-Member'in nasıl çalıştığını öğrendiğini ve Send () 'in iki tanımı olduğunu fark ettim ... ikinci tanım, Ekler ve daha birçok eke izin veren bir System.Net.Mail.MailMessage nesnesi alır ve Cc ve Bcc gibi kullanışlı özellikler. İşte ekleri olan bir örnek (yukarıdaki örneğiyle karıştırılacak):

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

Keyfini çıkarın!

4
core

Birçok testten sonra ve uzun bir çözüm arayışından sonra. http://www.powershellmagazine.com/2012/10/25/pstip-sending-emails-using-your-gmail-account/ adresinde işlevsel ve ilginç bir komut dosyası kodları buldum.

$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

Keyfini çıkarın

3
BSF

Bu, burada zil çalmak için çok geç bir tarih, ancak belki bu başka birine yardımcı olabilir.

Powershell'de gerçekten yeniyim ve PS'den gmailing'i araştırıyordum. Sizin yukarıda yaptığınız şeyi aldım ve biraz değiştirdim, eklemeden önce ekleri kontrol edecek bir komut dosyası ve ayrıca bir alıcılar almak için geldim. Daha sonra hata kontrolü ve bazı şeyler ekleyeceğim, ancak buraya göndermenin yeterince iyi (ve yeterince temel) olabileceğini düşündüm. 

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

Elbette, GMAIL_USERNAME ve GMAIL_PASSWORD değerlerini kendi kullanıcı olarak değiştirin ve iletin.

3
Rodney Fisk

Powershell kullanarak ekli e-posta gönder -

      $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

Bir Windows 8.1 Makinasında, aşağıdaki betiği kullanarak GMail üzerinden ekli bir e-posta göndermek için Send-MailMessage kullandım:

$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

İşte burada 

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

Sanırım ayrıca San. 'De ayrıca posta-posta adresini de kullanıp kullanmadığını bana bildirin. Www.techjunkie.tv

1

Hristiyan Muggli'nin çözümüne katılıyorum, ancak ilk başta hala Scott Weinstein'ın bildirdiği hatayı aldım. Bunu nasıl geçtiniz:

EITHER, belirtilen hesabı kullanarak bu makinenin çalışacağı makineden gmail'e ilk giriş yapın. (Internet Explorer Gelişmiş Güvenlik Yapılandırması etkin olsa bile, Google sitelerini Güvenilen Siteler bölgesine eklemek gerekmez.)

VEYA, ilk denemenizde hatayı alırsınız ve gmail hesabınız şüpheli giriş hakkında bir uyarı alır, bu nedenle makinenin gelecekteki oturum açmasına izin verecek talimatları uygulayın.

0
Tom Keller

PowerShell V2 gönderme posta kutusunu kullanmadım, ancak V1'deki System.Net.Mail.SMTPClient sınıfını demo amaçlı bir gmail hesabına mesaj göndermek için kullandım. Bu overkill olabilir, ancak Vista dizüstü bilgisayarımda bir smtp sunucusunu çalıştırın, bu bağlantıyı görün , eğer bir kurumdaysanız, zaten bir postaya bağlı sunucuya sahip olacaksınız ve bu adım gerekli değildir. Bir smtp sunucusuna sahip olmak, aşağıdaki kodla gmail hesabıma e-posta gönderebiliyorum:

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