none
PS Система почтовой рассылки с использованием стороннего почтового сервера (Yandex,Gmail) RRS feed

  • Вопрос

  • Здравствуйте!

    Есть скрипт , спасибо Kazun ! ^

    Function Get-FileName($InitialDirectory,$Title)
    {   
    	$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    	$OpenFileDialog.InitialDirectory = $initialDirectory
    	$OpenFileDialog.Filter = "All files (*.*)| *.*"
    	$OpenFileDialog.Title = $Title
    	$OpenFileDialog.ShowDialog() | Out-Null
    	$OpenFileDialog.Filename
    }
     
    Function Check {
    	$subject = $richTextBox1.Text -match "\w"
    	$addr = Test-Path -LiteralPath $richTextBox2.Text
    	$body = Test-Path -LiteralPath $richTextBox3.Text
    	if ($subject -and $addr -and $body) {
    		$button3.Enabled = $true
    	}
    	else {
    		$button3.Enabled = $false
    	}
    }
     
    Add-Type -Assembly System.Windows.Forms
    Add-Type -Assembly System.Drawing
    #Generated Form Function
    function GenerateForm {
     
    #region Generated Form Objects
    $form1 = New-Object System.Windows.Forms.Form
    $button3 = New-Object System.Windows.Forms.Button
    $button2 = New-Object System.Windows.Forms.Button
    $richTextBox3 = New-Object System.Windows.Forms.RichTextBox
    $button1 = New-Object System.Windows.Forms.Button
    $richTextBox2 = New-Object System.Windows.Forms.RichTextBox
    $label1 = New-Object System.Windows.Forms.Label
    $richTextBox1 = New-Object System.Windows.Forms.RichTextBox
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
    #endregion Generated Form Objects
     
    #----------------------------------------------
    #Generated Event Script Blocks
    #----------------------------------------------
    #Provide Custom Code for events specified in PrimalForms.
    $button3_OnClick= 
    {
    	$Encoding = [System.Text.Encoding]::UTF8
    	$Subject = $richTextBox1.Text
    	$Addr = Get-Content $richTextBox2.Text
    	$Body = Get-Content $richTextBox3.Text | Out-String
            $TLSPWD = ConvertTo-SecureString "Passw0rd2914" -AsPlainText -Force
            $CREDS = New-Object System.Management.Automation.PSCredential ("user@firma.ru", $TLSPWD)
        
            Send-Mailmessage -To $Addr -From "Фирма <user@firma.ru>" ` -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML ` -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer smtp.yandex.ru -credential $CREDS
    }
     
    $button1_OnClick= 
    {
    	$richTextBox2.Text = Get-FileName -Title "Файл расслыки адресов в формате txt"
    	Check
    }
     
    $button2_OnClick= 
    {
    	$richTextBox3.Text = Get-FileName -Title "Файл тела письма в формате html"
    	Check
    }
     
    $handler_label1_Click= 
    {
    #TODO: Place custom script here
     
    }
     
    $handler_form1_Load= 
    {
    #TODO: Place custom script here
     
    }
     
    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    	$form1.WindowState = $InitialFormWindowState
    }
     
    #----------------------------------------------
    #region Generated Form Code
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 239
    $System_Drawing_Size.Width = 512
    $form1.ClientSize = $System_Drawing_Size
    $form1.DataBindings.DefaultDataSourceUpdateMode = 0
    $form1.FormBorderStyle = 2
    $form1.Name = "form1"
    $form1.Text = "Cистема рассылки писем"
    $form1.add_Load($handler_form1_Load)
     
     
    $button3.DataBindings.DefaultDataSourceUpdateMode = 0
    $button3.Enabled = $False
    $button3.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,0)
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 184
    $System_Drawing_Point.Y = 194
    $button3.Location = $System_Drawing_Point
    $button3.Name = "button3"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 33
    $System_Drawing_Size.Width = 118
    $button3.Size = $System_Drawing_Size
    $button3.TabIndex = 6
    $button3.Text = "Отправить"
    $button3.UseVisualStyleBackColor = $True
    $button3.add_Click($button3_OnClick)
     
    $form1.Controls.Add($button3)
     
     
    $button2.DataBindings.DefaultDataSourceUpdateMode = 0
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 412
    $System_Drawing_Point.Y = 146
    $button2.Location = $System_Drawing_Point
    $button2.Name = "button2"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 80
    $button2.Size = $System_Drawing_Size
    $button2.TabIndex = 5
    $button2.Text = "Обзор"
    $button2.UseVisualStyleBackColor = $True
    $button2.add_Click($button2_OnClick)
     
    $form1.Controls.Add($button2)
     
    $richTextBox3.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 20
    $System_Drawing_Point.Y = 148
    $richTextBox3.Location = $System_Drawing_Point
    $richTextBox3.Multiline = $False
    $richTextBox3.Name = "richTextBox3"
    $richTextBox3.ReadOnly = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 373
    $richTextBox3.Size = $System_Drawing_Size
    $richTextBox3.TabIndex = 4
    $richTextBox3.Text = "Выберите файл для тела письма в формате html"
     
    $form1.Controls.Add($richTextBox3)
     
     
    $button1.DataBindings.DefaultDataSourceUpdateMode = 0
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 412
    $System_Drawing_Point.Y = 98
    $button1.Location = $System_Drawing_Point
    $button1.Name = "button1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 80
    $button1.Size = $System_Drawing_Size
    $button1.TabIndex = 3
    $button1.Text = "Обзор"
    $button1.UseVisualStyleBackColor = $True
    $button1.add_Click($button1_OnClick)
     
    $form1.Controls.Add($button1)
     
    $richTextBox2.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 20
    $System_Drawing_Point.Y = 98
    $richTextBox2.Location = $System_Drawing_Point
    $richTextBox2.Multiline = $False
    $richTextBox2.Name = "richTextBox2"
    $richTextBox2.ReadOnly = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 373
    $richTextBox2.Size = $System_Drawing_Size
    $richTextBox2.TabIndex = 2
    $richTextBox2.Text = "Выберите файл для рассылки адресов в формате txt"
     
    $form1.Controls.Add($richTextBox2)
     
    $label1.DataBindings.DefaultDataSourceUpdateMode = 0
    $label1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,0)
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 184
    $System_Drawing_Point.Y = 9
    $label1.Location = $System_Drawing_Point
    $label1.Name = "label1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 118
    $label1.Size = $System_Drawing_Size
    $label1.TabIndex = 1
    $label1.Text = "Тема"
    $label1.TextAlign = 32
    $label1.add_Click($handler_label1_Click)
     
    $form1.Controls.Add($label1)
     
    $richTextBox1.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 20
    $System_Drawing_Point.Y = 45
    $richTextBox1.Location = $System_Drawing_Point
    $richTextBox1.Multiline = $False
    $richTextBox1.Name = "richTextBox1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 19
    $System_Drawing_Size.Width = 480
    $richTextBox1.Size = $System_Drawing_Size
    $richTextBox1.TabIndex = 0
    $richTextBox1.Text = ""
    $richTextBox1.Add_TextChanged({
    	Check
    })
    $form1.Controls.Add($richTextBox1)
     
    #endregion Generated Form Code
     
    #Save the initial state of the form
    $InitialFormWindowState = $form1.WindowState
    #Init the OnLoad event to correct the initial state of the form
    $form1.add_Load($OnLoadForm_StateCorrection)
    #Show the Form
    $form1.ShowDialog()| Out-Null
     
    } #End Function
     
    #Call the Function
    GenerateForm

    При отправки письма выходит ошибка :

    Send-Mailmessage : Не удается прочитать данные из транспортного соединения: net_io_connectionclosed.
    C:\Users\user\Documents\Безымянный1.ps1:53 знак:5
    +     Send-Mailmessage -To $Addr -From "FIRMA <user@firma.ru. ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
        + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

    В скрипт добавил вот эти две строки:

    $TLSPWD = ConvertTo-SecureString "Passw0rd2914" -AsPlainText -Force
    $CREDS = New-Object System.Management.Automation.PSCredential ("user@firma.ru", $TLSPWD)

    Через анонимный релай работает , но из за сокращения бюджета один из доменов почтовых перевели на почту yandex.

    Помогите решить проблему.

    Заранее благодарен !!!

    30 июня 2015 г. 6:37

Ответы

  • Тут либо:

    $Encoding = [System.Text.Encoding]::UTF8
    $Subject = $richTextBox1.Text
    $Addr = Get-Content $richTextBox2.Text
    $Body = Get-Content $richTextBox3.Text | Out-String
    $secpasswd = ConvertTo-SecureString 'DfvYtDjqnb' -AsPlainText -Force
     $smtpcredentials = New-Object System.Management.Automation.PSCredential ('user@firma.ru', $secpasswd)
        Send-Mailmessage -Port 587 -UseSSL -To $Addr -From 'user@firma.ru' -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer "smtp.yandex.ru" -credential $smtpcredentials
    }

    Либо:

    $EmailFrom = 'anketa@xxx.ru
    $EmailTo = Get-Content $richTextBox2.Text 
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('user@firma.ru','DfvYtDjqnb'); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)


    • Помечено в качестве ответа Trusilya 30 июня 2015 г. 8:15
    • Изменено KazunEditor 30 июня 2015 г. 8:17
    30 июня 2015 г. 8:10
    Отвечающий
  • 1)  Должны идти в столбик

    1@1.ru

    2@2.ru

    2) требуется поправить

    $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxxx.com'
    $EmailTo = Get-Content $richTextBox2.Text 
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential('user@firma.ru','DfvYtDjqnb'); 
    $Message = New-Object System.Net.Mail.MailMessage
    $Message.Body = $Body
    $Message.Priority = "High"
    $Message.BodyEncoding = $Encoding 
    $Message.IsBodyHtml = $True
    $Message.Subject = $Subject
    $Message.From = $EmailFrom
    $EmailTo | Where {$_} | Foreach {$Message.To.Add($_)}
    $SMTPClient.Send($Message)


    • Изменено KazunEditor 30 июня 2015 г. 12:42
    • Помечено в качестве ответа Trusilya 30 июня 2015 г. 16:31
    30 июня 2015 г. 12:41
    Отвечающий
  • $button3_OnClick=  
    {
    $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxx.com'
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru"  
    
    
    Get-Content $richTextBox2.Text | Where {$_ -match "@"} | Foreach {
    	Write-Host "Sending to $_" -ForegroundColor Yellow
    	$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    	$SMTPClient.Timeout = 1000
    	$SMTPClient.EnableSsl = $true 
    	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential('anketa@xxx.com','DfvYtDjqnb')
    	$Message = New-Object System.Net.Mail.MailMessage
    	$Message.Body = $Body
    	$Message.Priority = "High"
    	$Message.BodyEncoding = $Encoding 
    	$Message.IsBodyHtml = $True
    	$Message.Subject = $Subject
    	$Message.From = $EmailFrom
    	$Message.To.Add($_)
    	$SMTPClient.Send($Message)
    }
    }


    • Изменено KazunEditor 1 июля 2015 г. 11:04
    • Помечено в качестве ответа Trusilya 1 июля 2015 г. 11:22
    1 июля 2015 г. 11:04
    Отвечающий

Все ответы

  • Что не так делаю ? :

    $smtp = new-object System.Net.Mail.SmtpClient("smtp.yandex.ru",25)

    $secpasswd = ConvertTo-SecureString "Passw0rd" -AsPlainText -Force $smtpcredentials = New-Object System.Management.Automation.PSCredential ("user@firma.ru", $secpasswd) Send-Mailmessage -To $Addr -From "user@firma.ru" ` -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML ` -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer $smtp -credential $smtpcredentials


    Выходит ошибка :

    Send-Mailmessage : Невозможно разрешить удаленное имя: 'System.Net.Mail.SmtpClient'

    30 июня 2015 г. 7:07
  • 1) Убрать все ` из команды Send-Mailmessage

    2) Добавить параметр Send-Mailmessage -Port 587

    3) Так же можно попробовать добавить параметр -UserSsl

    4) "Passw0rd2914"  - Для верности заменить на одинарные кавычки, чтобы избежать попадания спецсимволов

    'Passw0rd2914'

    30 июня 2015 г. 7:07
    Отвечающий
  • Сделал вот так:

    {
    	$Encoding = [System.Text.Encoding]::UTF8
    	$Subject = $richTextBox1.Text
    	$Addr = Get-Content $richTextBox2.Text
    	$Body = Get-Content $richTextBox3.Text | Out-String
            $secpasswd = ConvertTo-SecureString 'DfvYtDjqnb' -AsPlainText -Force
            $smtpcredentials = New-Object System.Management.Automation.PSCredential ('user@firma.ru', $secpasswd)
        Send-Mailmessage -Port 587 -To $Addr -From 'user@firma.ru' -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer "smtp.yandex.ru" -credential $smtpcredentials
    }

    Выдает ошибку:

    Send-Mailmessage : Не удается прочитать данные из транспортного соединения: net_io_connectionclosed.
    C:\Users\user\Documents\Безымянный1.ps1:52 знак:5
    +     Send-Mailmessage -Port 587 -To $Addr -From 'user@firma.ru' -E ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
        + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage
     

    30 июня 2015 г. 7:28
  • Проверить возможность подключения к порту 587,т.к. провайдер может блокировать:

    telnet smtp.yandex.ru 587

    30 июня 2015 г. 7:33
    Отвечающий
  • Работает :

    220 smtp3h.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit
     http://pdd.yandex.ru)
    

    30 июня 2015 г. 7:39
  • Какая ошибка:

    $EmailFrom = 'user@firma.ru'
    $EmailTo = "user01@example.com" 
    $Subject = "Test" 
    $Body = "Test"
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('user@firma.ru','DfvYtDjqnb'); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

    30 июня 2015 г. 7:44
    Отвечающий
  • Какая ошибка:

    $EmailFrom = 'user@firma.ru'
    $EmailTo = "user01@example.com" 
    $Subject = "Test" 
    $Body = "Test"
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('user@firma.ru','DfvYtDjqnb'); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

    Так работает !

    Делаю у себя в скрипте :

    {
    	$Encoding = [System.Text.Encoding]::UTF8
    	$Subject = $richTextBox1.Text
    	$Addr = Get-Content $richTextBox2.Text
    	$Body = Get-Content $richTextBox3.Text | Out-String
            $SMTPServer = "smtp.yandex.ru" 
            $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
            $SMTPClient.Timeout = 1000
            $SMTPClient.EnableSsl = $true 
            $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('user@firma.ru','DfvYtDjqnb'); 
            Send-Mailmessage -To $Addr -From 'user@firma.ru' -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer $SMTPClient
    }

    Выходит ошибка:

    PS C:\Windows\system32> C:\Users\user\Documents\Безымянный1.ps1
    Send-Mailmessage : Невозможно разрешить удаленное имя: 'System.Net.Mail.SmtpClient'
    C:\Users\user\Documents\Безымянный1.ps1:55 знак:5
    +     Send-Mailmessage -To $Addr -From 'user@firma.ru' -Encoding $E ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
        + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage



    • Изменено Trusilya 30 июня 2015 г. 8:04
    30 июня 2015 г. 8:00
  • Тут либо:

    $Encoding = [System.Text.Encoding]::UTF8
    $Subject = $richTextBox1.Text
    $Addr = Get-Content $richTextBox2.Text
    $Body = Get-Content $richTextBox3.Text | Out-String
    $secpasswd = ConvertTo-SecureString 'DfvYtDjqnb' -AsPlainText -Force
     $smtpcredentials = New-Object System.Management.Automation.PSCredential ('user@firma.ru', $secpasswd)
        Send-Mailmessage -Port 587 -UseSSL -To $Addr -From 'user@firma.ru' -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer "smtp.yandex.ru" -credential $smtpcredentials
    }

    Либо:

    $EmailFrom = 'anketa@xxx.ru
    $EmailTo = Get-Content $richTextBox2.Text 
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('user@firma.ru','DfvYtDjqnb'); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)


    • Помечено в качестве ответа Trusilya 30 июня 2015 г. 8:15
    • Изменено KazunEditor 30 июня 2015 г. 8:17
    30 июня 2015 г. 8:10
    Отвечающий
  • Тут либо:

    $Encoding = [System.Text.Encoding]::UTF8
    $Subject = $richTextBox1.Text
    $Addr = Get-Content $richTextBox2.Text
    $Body = Get-Content $richTextBox3.Text | Out-String
    $secpasswd = ConvertTo-SecureString 'DfvYtDjqnb' -AsPlainText -Force
     $smtpcredentials = New-Object System.Management.Automation.PSCredential ('user@firma.ru', $secpasswd)
        Send-Mailmessage -Port 587 -UseSSL -To $Addr -From 'user@firma.ru' -Encoding $Encoding -Subject $Subject -Body $Body -BodyAsHTML -Priority High -DeliveryNotificationOption OnSuccess -SMTPServer "smtp.yandex.ru" -credential $smtpcredentials
    }

    Либо:

    $EmailFrom = 'anketa@firma.com'
    $EmailTo = Get-Content $richTextBox2.Text 
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('user@firma.ru','DfvYtDjqnb'); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

    Спасибо ! Kazun пожалуйста убери публичный адрес отправителя , заранее благодарен !
    • Изменено Trusilya 30 июня 2015 г. 8:22
    30 июня 2015 г. 8:15
  • делаю по первому варианту выходит ошибка :

    Send-Mailmessage : Неправильная последовательность команд. Отклик сервера: 5.5.4 Error: send AUTH command first.


    • Изменено Trusilya 30 июня 2015 г. 8:21
    30 июня 2015 г. 8:20
  • Второй вариант работает ! Спасибо Kazun !
    30 июня 2015 г. 8:25
  • Kazun, не подскажешь почему не работает теперь кнопка отправить ?

    Изменилось только имя файла для запуска

    Function Get-FileName($InitialDirectory,$Title)
    {   
    	$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    	$OpenFileDialog.InitialDirectory = $initialDirectory
    	$OpenFileDialog.Filter = "All files (*.*)| *.*"
    	$OpenFileDialog.Title = $Title
    	$OpenFileDialog.ShowDialog() | Out-Null
    	$OpenFileDialog.Filename
    }
     
    Function Check {
    	$subject = $richTextBox1.Text -match "\w"
    	$addr = Test-Path -LiteralPath $richTextBox2.Text
    	$body = Test-Path -LiteralPath $richTextBox3.Text
    	if ($subject -and $addr -and $body) {
    		$button3.Enabled = $true
    	}
    	else {
    		$button3.Enabled = $false
    	}
    }
     
    Add-Type -Assembly System.Windows.Forms
    Add-Type -Assembly System.Drawing
    #Generated Form Function
    function GenerateForm {
     
    #region Generated Form Objects
    $form1 = New-Object System.Windows.Forms.Form
    $button3 = New-Object System.Windows.Forms.Button
    $button2 = New-Object System.Windows.Forms.Button
    $richTextBox3 = New-Object System.Windows.Forms.RichTextBox
    $button1 = New-Object System.Windows.Forms.Button
    $richTextBox2 = New-Object System.Windows.Forms.RichTextBox
    $label1 = New-Object System.Windows.Forms.Label
    $richTextBox1 = New-Object System.Windows.Forms.RichTextBox
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
    #endregion Generated Form Objects
     
    #----------------------------------------------
    #Generated Event Script Blocks
    #----------------------------------------------
    #Provide Custom Code for events specified in PrimalForms.
    $button3_OnClick= 
    
    {
    $EmailFrom = 'anketa@firma.com'
    $EmailTo = Get-Content $richTextBox2.Text 
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential ('anketa@firma.com','Password'); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
    }
     
    $button1_OnClick= 
    {
    	$richTextBox2.Text = Get-FileName -Title "Файл расслыки адресов в формате txt"
    	Check
    }
     
    $button2_OnClick= 
    {
    	$richTextBox3.Text = Get-FileName -Title "Файл тела письма в формате html"
    	Check
    }
     
    $handler_label1_Click= 
    {
    #TODO: Place custom script here
     
    }
     
    $handler_form1_Load= 
    {
    #TODO: Place custom script here
     
    }
     
    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    	$form1.WindowState = $InitialFormWindowState
    }
     
    #----------------------------------------------
    #region Generated Form Code
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 239
    $System_Drawing_Size.Width = 512
    $form1.ClientSize = $System_Drawing_Size
    $form1.DataBindings.DefaultDataSourceUpdateMode = 0
    $form1.FormBorderStyle = 2
    $form1.Name = "form1"
    $form1.Text = "Cистема рассылки писем"
    $form1.add_Load($handler_form1_Load)
     
     
    $button3.DataBindings.DefaultDataSourceUpdateMode = 0
    $button3.Enabled = $False
    $button3.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,0)
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 184
    $System_Drawing_Point.Y = 194
    $button3.Location = $System_Drawing_Point
    $button3.Name = "button3"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 33
    $System_Drawing_Size.Width = 118
    $button3.Size = $System_Drawing_Size
    $button3.TabIndex = 6
    $button3.Text = "Отправить"
    $button3.UseVisualStyleBackColor = $True
    $button3.add_Click($button3_OnClick)
     
    $form1.Controls.Add($button3)
     
     
    $button2.DataBindings.DefaultDataSourceUpdateMode = 0
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 412
    $System_Drawing_Point.Y = 146
    $button2.Location = $System_Drawing_Point
    $button2.Name = "button2"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 80
    $button2.Size = $System_Drawing_Size
    $button2.TabIndex = 5
    $button2.Text = "Обзор"
    $button2.UseVisualStyleBackColor = $True
    $button2.add_Click($button2_OnClick)
     
    $form1.Controls.Add($button2)
     
    $richTextBox3.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 20
    $System_Drawing_Point.Y = 148
    $richTextBox3.Location = $System_Drawing_Point
    $richTextBox3.Multiline = $False
    $richTextBox3.Name = "richTextBox3"
    $richTextBox3.ReadOnly = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 373
    $richTextBox3.Size = $System_Drawing_Size
    $richTextBox3.TabIndex = 4
    $richTextBox3.Text = "Выберите файл для тела письма в формате html"
     
    $form1.Controls.Add($richTextBox3)
     
     
    $button1.DataBindings.DefaultDataSourceUpdateMode = 0
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 412
    $System_Drawing_Point.Y = 98
    $button1.Location = $System_Drawing_Point
    $button1.Name = "button1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 80
    $button1.Size = $System_Drawing_Size
    $button1.TabIndex = 3
    $button1.Text = "Обзор"
    $button1.UseVisualStyleBackColor = $True
    $button1.add_Click($button1_OnClick)
     
    $form1.Controls.Add($button1)
     
    $richTextBox2.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 20
    $System_Drawing_Point.Y = 98
    $richTextBox2.Location = $System_Drawing_Point
    $richTextBox2.Multiline = $False
    $richTextBox2.Name = "richTextBox2"
    $richTextBox2.ReadOnly = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 373
    $richTextBox2.Size = $System_Drawing_Size
    $richTextBox2.TabIndex = 2
    $richTextBox2.Text = "Выберите файл для рассылки адресов в формате txt"
     
    $form1.Controls.Add($richTextBox2)
     
    $label1.DataBindings.DefaultDataSourceUpdateMode = 0
    $label1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,0)
     
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 184
    $System_Drawing_Point.Y = 9
    $label1.Location = $System_Drawing_Point
    $label1.Name = "label1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 23
    $System_Drawing_Size.Width = 118
    $label1.Size = $System_Drawing_Size
    $label1.TabIndex = 1
    $label1.Text = "Тема"
    $label1.TextAlign = 32
    $label1.add_Click($handler_label1_Click)
     
    $form1.Controls.Add($label1)
     
    $richTextBox1.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 20
    $System_Drawing_Point.Y = 45
    $richTextBox1.Location = $System_Drawing_Point
    $richTextBox1.Multiline = $False
    $richTextBox1.Name = "richTextBox1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Height = 19
    $System_Drawing_Size.Width = 480
    $richTextBox1.Size = $System_Drawing_Size
    $richTextBox1.TabIndex = 0
    $richTextBox1.Text = ""
    $richTextBox1.Add_TextChanged({
    	Check
    })
    $form1.Controls.Add($richTextBox1)
     
    #endregion Generated Form Code
     
    #Save the initial state of the form
    $InitialFormWindowState = $form1.WindowState
    #Init the OnLoad event to correct the initial state of the form
    $form1.add_Load($OnLoadForm_StateCorrection)
    #Show the Form
    $form1.ShowDialog()| Out-Null
     
    } #End Function
     
    #Call the Function
    GenerateForm

    30 июня 2015 г. 11:55
  • Отрабатывает:

    30 июня 2015 г. 12:14
    Отвечающий
  • Отрабатывает:

    А уменя нажимаю Отправить, кнопка остается активной и нечего не происходит =( что не так делаю ? 

    В файле адресов указано 3 почтовых адреса (для теста) 

    • Изменено Trusilya 30 июня 2015 г. 12:32
    30 июня 2015 г. 12:31
  • 1)  Должны идти в столбик

    1@1.ru

    2@2.ru

    2) требуется поправить

    $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxxx.com'
    $EmailTo = Get-Content $richTextBox2.Text 
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.Timeout = 1000
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential('user@firma.ru','DfvYtDjqnb'); 
    $Message = New-Object System.Net.Mail.MailMessage
    $Message.Body = $Body
    $Message.Priority = "High"
    $Message.BodyEncoding = $Encoding 
    $Message.IsBodyHtml = $True
    $Message.Subject = $Subject
    $Message.From = $EmailFrom
    $EmailTo | Where {$_} | Foreach {$Message.To.Add($_)}
    $SMTPClient.Send($Message)


    • Изменено KazunEditor 30 июня 2015 г. 12:42
    • Помечено в качестве ответа Trusilya 30 июня 2015 г. 16:31
    30 июня 2015 г. 12:41
    Отвечающий
  • Kazun , а как сделать чтобы адресат был один а то получается в поле кому указанные все адреса ?

    Заранее благодарен !

    30 июня 2015 г. 16:33
  • Я не понял вопроса. Что из двух имеется ввиду?

    1) В файле адресов указано 3 почтовых адреса (для теста) 

    2) а как сделать чтобы адресат был один а то получается в поле кому указанные все адреса ?

    Если взять первый адрес из файла и отсылать только на него.

    $EmailTo | Where {$_} | Select -First 1 |  Foreach {$Message.To.Add($_)}

    Отвечающий
  • Я не понял вопроса. Что из двух имеется ввиду?

    1) В файле адресов указано 3 почтовых адреса (для теста) 

    2) а как сделать чтобы адресат был один а то получается в поле кому указанные все адреса ?

    Если взять первый адрес из файла и отсылать только на него.

    $EmailTo | Where {$_} | Select -First 1 |  Foreach {$Message.To.Add($_)}

    Выходит ошибка:

    Исключение при вызове "Send" с "1" аргументами: "Время ожидания операции истекло."

    И правильно я понял дальше отправка писем будет идти по порядку вниз по списку ?

    1 июля 2015 г. 10:03
  • Нет только 1 адрес.
    1 июля 2015 г. 10:10
    Отвечающий
  • А можете помочь сделать чтобы отправляло всем по порядку ?
    1 июля 2015 г. 10:22
  • $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxxx.com'
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru" 
    
    	
    Get-Content $richTextBox2.Text | Where {$_ -match "@"} | Foreach 
    {
    	Write-Host "Sending to $_" -ForegroundColor Yellow
    	$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    	$SMTPClient.Timeout = 1000
    	$SMTPClient.EnableSsl = $true 
    	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential('user@firma.ru','DfvYtDjqnb')
    	$Message = New-Object System.Net.Mail.MailMessage
    	$Message.Body = $Body
    	$Message.Priority = "High"
    	$Message.BodyEncoding = $Encoding 
    	$Message.IsBodyHtml = $True
    	$Message.Subject = $Subject
    	$Message.From = $EmailFrom
    	$Message.To.Add($_)
    	$SMTPClient.Send($Message)
    }

    1 июля 2015 г. 10:40
    Отвечающий
  • $button3_OnClick=  
    {
    $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxx.com'
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru"  
    }
    
    Get-Content $richTextBox2.Text | Where {$_ -match "@"} | Foreach
    {
    	Write-Host "Sending to $_" -ForegroundColor Yellow
    	$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    	$SMTPClient.Timeout = 1000
    	$SMTPClient.EnableSsl = $true 
    	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential('anketa@xxx.com','DfvYtDjqnb')
    	$Message = New-Object System.Net.Mail.MailMessage
    	$Message.Body = $Body
    	$Message.Priority = "High"
    	$Message.BodyEncoding = $Encoding 
    	$Message.IsBodyHtml = $True
    	$Message.Subject = $Subject
    	$Message.From = $EmailFrom
    	$Message.To.Add($_)
    	$SMTPClient.Send($Message)
    }

    Выдает ошибку :

    Get-Content : Не удается привязать аргумент к параметру "Path", так как он представляет собой пустую строку.
    + Get-Content $richTextBox2.Text | Where {$_ -match "@"} | Foreach
    +             ~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.GetContentCommand
     
    
        Write-Host "Sending to $_" -ForegroundColor Yellow
        $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
        $SMTPClient.Timeout = 1000
        $SMTPClient.EnableSsl = $true 
        $SMTPClient.Credentials = New-Object System.Net.NetworkCredential('anketa@xxx.com','DfvYtDjqnb')
        $Message = New-Object System.Net.Mail.MailMessage
        $Message.Body = $Body
        $Message.Priority = "High"
        $Message.BodyEncoding = $Encoding 
        $Message.IsBodyHtml = $True
        $Message.Subject = $Subject
        $Message.From = $EmailFrom
        $Message.To.Add($_)
        $SMTPClient.Send($Message)

    Я понимаю что делаю что-то не так можете сказать куда вставить код? заранее благодарен !

    1 июля 2015 г. 10:58
  • $button3_OnClick=  
    {
    $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxx.com'
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru"  
    
    
    Get-Content $richTextBox2.Text | Where {$_ -match "@"} | Foreach {
    	Write-Host "Sending to $_" -ForegroundColor Yellow
    	$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    	$SMTPClient.Timeout = 1000
    	$SMTPClient.EnableSsl = $true 
    	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential('anketa@xxx.com','DfvYtDjqnb')
    	$Message = New-Object System.Net.Mail.MailMessage
    	$Message.Body = $Body
    	$Message.Priority = "High"
    	$Message.BodyEncoding = $Encoding 
    	$Message.IsBodyHtml = $True
    	$Message.Subject = $Subject
    	$Message.From = $EmailFrom
    	$Message.To.Add($_)
    	$SMTPClient.Send($Message)
    }
    }


    • Изменено KazunEditor 1 июля 2015 г. 11:04
    • Помечено в качестве ответа Trusilya 1 июля 2015 г. 11:22
    1 июля 2015 г. 11:04
    Отвечающий
  • $button3_OnClick=  
    {
    $Encoding = [System.Text.Encoding]::UTF8
    $EmailFrom = 'anketa@xxx.com'
    $Subject = $richTextBox1.Text 
    $Body = Get-Content $richTextBox3.Text | Out-String
    $SMTPServer = "smtp.yandex.ru"  
    
    
    Get-Content $richTextBox2.Text | Where {$_ -match "@"} | Foreach {
    	Write-Host "Sending to $_" -ForegroundColor Yellow
    	$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    	$SMTPClient.Timeout = 1000
    	$SMTPClient.EnableSsl = $true 
    	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential('anketa@xxx.com','DfvYtDjqnb')
    	$Message = New-Object System.Net.Mail.MailMessage
    	$Message.Body = $Body
    	$Message.Priority = "High"
    	$Message.BodyEncoding = $Encoding 
    	$Message.IsBodyHtml = $True
    	$Message.Subject = $Subject
    	$Message.From = $EmailFrom
    	$Message.To.Add($_)
    	$SMTPClient.Send($Message)
    }
    }


    Работает но теперь проблема в авторизации :

    Sending to user1@xxx.ru
    Исключение при вызове "Send" с "1" аргументами: "Неправильная последовательность команд. Отклик сервера: 5.5.4 Error: send AUTH command first."
    C:\Users\user\Desktop\ps-mail.ps1:68 знак:2
    +     $SMTPClient.Send($Message)
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SmtpException
     
    Sending to user2@xxx.ru
    Исключение при вызове "Send" с "1" аргументами: "Неправильная последовательность команд. Отклик сервера: 5.5.4 Error: send AUTH command first."
    C:\Users\user\Desktop\ps-mail.ps1:68 знак:2
    +     $SMTPClient.Send($Message)
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SmtpException
     
    Sending to user3@xxx.ru
    Исключение при вызове "Send" с "1" аргументами: "Неправильная последовательность команд. Отклик сервера: 5.5.4 Error: send AUTH command first."
    C:\Users\user\Desktop\ps-mail.ps1:68 знак:2
    +     $SMTPClient.Send($Message)
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SmtpException
     
    Sending to user4@xxx.ru
    Исключение при вызове "Send" с "1" аргументами: "Неправильная последовательность команд. Отклик сервера: 5.5.4 Error: send AUTH command first."
    C:\Users\user\Desktop\ps-mail.ps1:68 знак:2
    +     $SMTPClient.Send($Message)
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SmtpException

    1 июля 2015 г. 11:09
  • Kazun , спасибо все работает !!!

    Каюсь я запятую линию поставил в логине 

    1 июля 2015 г. 11:22