Send mail via Gmail with PowerShell V2's Send-MailMessage

前端 未结 13 1985
一生所求
一生所求 2020-11-30 21:07

I\'m trying to figure out how to use PowerShell V2\'s Send-MailMessage with Gmail.

Here\'s what I have so far.

$ss = New-Object Security         


        
相关标签:
13条回答
  • 2020-11-30 21:24

    This should fix your problem:

    $credentials = New-Object Management.Automation.PSCredential “mailserver@yourcompany.com”, (“password” | ConvertTo-SecureString -AsPlainText -Force)
    

    Then use the credential in your call to Send-MailMessage -From $From -To $To -Body $Body $Body -SmtpServer {$smtpServer URI} -Credential $credentials -Verbose -UseSsl

    0 讨论(0)
  • 2020-11-30 21:25

    I just had the same problem and ran into this post. It actually helped me to get it running with the native Send-MailMessage command-let and here is my code:

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

    However, in order to have Gmail allowing me to use the SMTP server, I had to log in into my Gmail account and under this link https://www.google.com/settings/security set the "Access for less secure apps" to "Enabled". Then finally it did work!!

    0 讨论(0)
  • 2020-11-30 21:25

    I'm not sure you can change port numbers with Send-MailMessage since Gmail works on port 587. Anyway, here's how to send email through Gmail with .NET SmtpClient:

    $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('GmailUserID@gmail.com', 'yourself@somewhere.com', 'test subject', 'test message')
    
    0 讨论(0)
  • 2020-11-30 21:30

    Here it is:

    $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 = “username@gmail.com”
    $msg.To.Add(”boss@job.com”)
    $msg.Subject = “Monthly Report”
    $msg.Body = “Good MorningATTACHED”
    $msg.Attachments.Add($att)
    $smtp.Send($msg)
    

    Let me know if it helps you San. Also use the send-mailmessage also at Www.techjunkie.tv

    For that way also that I think is way better and pure to use.

    0 讨论(0)
  • 2020-11-30 21:30

    I had massive problems with getting any of those scripts to work with sending mail in powershell. Turned out you need to create an app-password for your gmail-account to authenticate in the script. Now it works flawlessly!

    0 讨论(0)
  • 2020-11-30 21:31

    I am really new to PowerShell, and I was searching about gmailing from PowerShell. I took what you folks did in previous answers, and modified it a bit and have come up with a script which will check for attachments before adding them, and also to take an array of recipients.

    ## Send-Gmail.ps1 - Send a gmail message
    ## By Rodney Fisk - xizdaqrian@gmail.com
    ## 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 user@mail.com
        [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)
    

    Of course, change the GMAIL_USERNAME and GMAIL_PASSWORD values to your particular user and password.

    0 讨论(0)
提交回复
热议问题