Отправка почты из powershell - PullRequest
0 голосов
/ 21 марта 2020

У меня есть задача отправить около 500 электронных писем, и я изучаю лучший (самый простой) способ сделать это. Я сталкивался с некоторыми примерами Powershell, но я не могу заставить его работать. Я вижу, что есть 2 подхода: создать скрипт и затем вызвать его из командной строки powershell, или сделать это прямо из командной строки. Второй подход был бы лучше для меня, потому что было бы проще генерировать эти командные строки для 500 электронных писем. Я нашел несколько примеров и пришел к этому:

$smtp = New-Object Net.Mail.SmtpClient("smtp.gmail.com", "465")
$Smtp.EnableSsl = $true
$Smtp.Credentials = New-Object System.Net.NetworkCredential("myusername","mypass")
$Smtp.Attachments.Add("C:\bla.txt")
$smtp.Send("myusername@gmail.com","someusername@gmail.com","Test Email","This is a test")

Для первой попытки я пытаюсь отправить почту из gmail ...

Я не очень хорош в Powershell (лучше скажем, совсем не знаю, но имею общие знания о командной строке из командной строки / MS-DOS, которая мне более знакома).

Также будет, почтовый сервер позволит отправлять 500 электронных писем, например это или он распознает это как какую-то атаку, спам, что угодно ...?

Буду признателен за любую помощь. Спасибо!

РЕДАКТИРОВАТЬ:

Я также пробовал это:

$From = "YourEmail@gmail.com"
$To = "AnotherEmail@YourDomain.com"
$Cc = "YourBoss@YourDomain.com"
$Subject = "Email Subject"
$Body = "Insert body text here"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "465"

Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl -Credential (Get-Credential)

Для $ From, $ To, $ Cc Я поставил свой реальный адрес электронной почты

Ошибка, которую я получил, это:

 Send-MailMessage : Unable to read data from the transport connection: net_io_connectionclosed.
At line:9 char:1
+ Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject -Body  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Согласно странице поддержки Gmail Ограничение Gmail на количество писем, отправляемых через службу ретрансляции SMTP (для учетных записей G Suite), составляет 10 000 писем каждые 24 часа. Если вы превысите лимит, вы получите ошибку HTTP 550 и вам будет запрещено отправлять электронные письма в течение следующих 24 часов. Если у вас нет учетной записи G Suite, ограничение составляет 500 за 24 часа . Превышение этого также приведет к ошибке 550 и запрету на 24 часа использования Gmail. Кроме того, Gmail позволяет только пользователям, не входящим в G Suite, отправлять электронные письма 100 получателям по электронной почте через SMTP-ретранслятор, поэтому, если вы отправите электронное письмо в свой список электронной почты, его придется разделить на несколько электронных писем.

Поэтому я бы не рекомендовал отправлять ваши 500+ писем через службу SMTP Google, если у вас нет учетной записи G Suite, так как ваша учетная запись может быть отключена на 24 часа, а любые сообщения, отправленные с превышением лимита в 500 писем, будут заблокирован.

0 голосов
/ 22 марта 2020

(Я думаю, вы можете использовать почтовый сервер вашей компании или какой-нибудь сервер, позволяющий отправлять более 500 электронных писем.)

Настройка SMTP-сервера Gmail. Вы получите пароль приложения.

шифрование вашего пароля

Read-Host "Enter gmail application password" -AsSecureString | ConvertFrom-SecureString | Out-File "$HOME\Desktop\SendEmailUse.txt"

Чем вы можете отправить электронное письмо (автоматический вход)

$emailFrom = "sendFrom@gmail.com"
$sendto = "sendTo-1@gmail.com"
$sendto2 = "sendTo-2@yahoo.com.tw" # -cc -bcc

$runDateTime = Get-Date
$Subject = "Script Run Completed - $runDateTime" # title
$attachmentLocation = "$HOME\Desktop\ScheduledJobLog.txt"  # -Attachments

$emailBody = @"
This is PowerShell sent mail test.
at $runDateTime
"@

$pwdfile = "$HOME\Desktop\SendEmailUse.txt"
$emailSmtpServer = "smtp.gmail.com"
$port = "587"

$pwd = (Get-Content $pwdfile | ConvertTo-SecureString)
$creds = New-Object System.Management.Automation.PSCredential($emailFrom, $pwd)

Send-MailMessage -From $emailFrom -To $sendto -Cc $sendto2 -SmtpServer $emailSmtpServer -Port $port -Credential $creds -UseSsl -Body $emailBody -Encoding 'utf8' -Subject $Subject -Attachments $attachmentLocation

Write-Output "Email Sented."
...