Отправить почту через gmail с помощью PowerShell V2 Send-MailMessage
Я пытаюсь выяснить, как использовать PowerShell V2 Send-MailMessage
с gmail.
Вот что я до сих пор.
$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...
Я получаю следующую ошибку
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
Я делаю что-то неправильно или Send-MailMessage
еще не полностью запечен (я на CTP 3)?
Некоторые дополнительные ограничения
- Я хочу, чтобы это было неинтерактивным, поэтому
get-credential
не будет работать
- Учетная запись пользователя не входит в домен gmail, но зарегистрированный домен google apps
- Для этого вопроса меня интересует только командлет
Send-MailMessage
, отправка почты через обычный .Net API хорошо понятна.
Ответы
Ответ 1
Просто нашел этот вопрос.. вот мой PowerShell Send-MailMessage Образец для Gmail.. Протестированное и работающее решение:
$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)
Просто измените $EmailTo и имя пользователя/пароль в $SMTPClient.Credentials.. не включайте @gmail.com в свое имя пользователя.
Возможно, это помощь другим, кто сталкивается с этим вопросом.
Ответ 2
Это должно решить вашу проблему.
$credentials = new-object Management.Automation.PSCredential "[email protected]", ("password" | ConvertTo-SecureString -AsPlainText -Force)
Затем используйте учетные данные в своем вызове Send-MailMessage -From $From -To $To -Body $Body $Body -SmtpServer {$smtpServer URI} -Credential $credentials -Verbose -UseSsl
Ответ 3
Я не уверен, что вы можете изменить номера портов с помощью Send-MailMessage, поскольку gmail работает на порту 587. В любом случае, здесь, как отправлять электронную почту через gmail с помощью .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('[email protected]','[email protected]','test subject', 'test message')
Ответ 4
У меня была такая же проблема, и я столкнулся с этим сообщением. Это действительно помогло мне запустить его с помощью команды Send-MailMessage-let и вот мой код:
$cred = Get-Credential
Send-MailMessage ....... -SmtpServer "smtp.gmail.com" -UseSsl -Credential $cred -Port 587
Однако, чтобы Gmail разрешил мне использовать SMTP-сервер, мне пришлось войти в мою учетную запись gmail и по этой ссылке https://www.google.com/settings/security установить "Доступ для менее безопасных приложений" на "Включено". Затем, наконец, это сработало!
чао
марко
Ответ 5
Я использовал решение Christian Feb 12, и я также только начинаю изучать PowerShell. Что касается привязанностей, я уже думал, что Get-Member изучает, как это работает, и заметил, что Send() имеет два определения... второе определение принимает объект System.Net.Mail.MailMessage, который позволяет добавлять вложения и многие более мощные и полезные функции, такие как Cc и Bcc. Вот пример, который имеет вложения (которые должны быть смешаны с его примером):
# append to Christian 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)
Наслаждайтесь!
Ответ 6
Это действительно поздняя дата, когда можно прослушивать здесь, но, возможно, это может помочь кому-то другому.
Я действительно новичок в powershell, и я искал gmailing от PS. Я взял то, что вы делали выше, и немного изменил его, и придумал script, который будет проверять вложения, прежде чем добавлять их, а также взять массив получателей. Я собираюсь добавить еще некоторые проверки ошибок и прочее позже, но я подумал, что это может быть достаточно хорошо (и достаточно основательно) для публикации здесь.
## 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 )
Конечно, измените значения GMAIL_USERNAME и GMAIL_PASSWORD вашему конкретному пользователю и пройдите.
Ответ 7
После многих тестов и длительного поиска решений. Я нашел функциональные и интересные коды script на 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
Enjoy
Ответ 8
На машине с Windows 8.1 я получил Send-MailMessage
, чтобы отправить электронное письмо с прикрепленным файлом через GMail, используя следующий script:
$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
Ответ 9
Отправить электронное письмо с приложением с помощью 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)
Ответ 10
Здесь
$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 также использовала send-mailmessage также в
Www.techjunkie.tv
Для этого также я считаю, что лучше и чище использовать
Ответ 11
Я не использовал PowerShell V2 send-mailmessage, но я использовал класс System.Net.Mail.SMTPClient в V1 для отправки сообщений в учетную запись gmail для демонстрационных целей. Это может быть излишним, но запустить smtp-сервер на моем ноутбуке Vista см. эта ссылка, если вы на предприятии, у вас уже будет почта rely server, и этот шаг не требуется. Имея smtp-сервер, я могу отправить электронное письмо в свою учетную запись gmail со следующим кодом:
$smtpmail = [System.Net.Mail.SMTPClient]("127.0.0.1")
$smtpmail.Send("[email protected]", "[email protected]", "Test Message", "Message via local smtp")
Ответ 12
Я согласен с решением Christian Muggli, хотя поначалу я все еще получил ошибку, о которой сообщил Скотт Вайнштейн. Как вы прошли мимо:
КАК ПЕРВЫЙ вход в систему Gmail с компьютера будет выполняться с использованием указанной учетной записи. (Не нужно добавлять сайты Google в зону "Надежные узлы", даже если включена Расширенная настройка безопасности Internet Explorer.)
ИЛИ, с первой попытки, вы получите сообщение об ошибке, и ваш gmail acct получит уведомление о подозрительном входе в систему, поэтому следуйте их инструкциям, чтобы позволить будущим входам с этого устройства работать.
Ответ 13
ознакомьтесь с этой записью, чтобы отправить вложения с помощью gmail Примеры Powershell, чтобы вы могли видеть, как отправлять вложения с помощью gmail
Дайте мне знать, если это поможет вам
Скотт А
www.techjunkie.tv