none
Кто ни будь может помочь готовым скриптом отправки e-mail через публичный почовик RRS feed

Ответы

  • Подновил скрипт добавив поддержку SSL и указание учетных данных. Спасибо .Net, это заняло лишь несколько строчек Smile

     

    Send-SMTPMail.ps1

    param (

    $Server = $SmtpHostPreference, # SMTP Сервер

    $From = $SmtpFromPreference, # Адрес отправителя

    [string[]]$To, # Получатели

    $Body = "", # Тело сообщения

    $Subject = "", # Тема сообщения

    [System.IO.FileInfo[]]$Attachment=@(), # Вложения

    [switch]$SSL, #Использовать SSL?

    $Credentials = $null #Учетные данные для подключения

    )

    Write-Verbose "Создаем объекты SmtpClient и MailMessage"

    $SmtpClient = New-Object System.Net.Mail.SmtpClient

    $Message = New-Object System.Net.Mail.MailMessage

    Write-Verbose "Устанавливаем свойства этих объектов"

    $SmtpClient.Host = $Server

    $SmtpClient.EnableSsl = $SSL

    if ($Credentials) {$SmtpClient.Credentials = $Credentials.GetNetworkCredential()}

    $Message.Body = $Body

    $Message.Subject = $Subject

    $Message.From = $From

    Write-Verbose "Создаем и добавляем вложения"

    $Attachment | ForEach-Object {

    $a = New-Object System.Net.Mail.Attachment($_.fullname)

    $Message.Attachments.Add($a)

    }

    Write-Verbose "Добавляем получателей"

    $To | ForEach-Object {$Message.To.Add($_)}

    Write-Verbose "Отправляем сообщение"

    $smtpclient.Send($Message)

    Write-Verbose "Удаляем объекты"

    $Message.Dispose()

     

     

     

    С гмейлом работает, проверил:

     

    Code Snippet

    PS> $cred = Get-Credential

    cmdlet Get-Credential at command pipeline position 1
    Supply values for the following parameters:
    Credential
    PS> .\send-smtpmail.ps1 -server smtp.gmail.com -from xaegrr@gmail.com -to xaegr@yandex.ru -body "Тест прошел успешно" -subject "Тест" -ssl -credentials $cred

     

     

    Модератор

Все ответы

  •  

    а скрипт power shell не пойдет?
  • Конечно! Wink

    Модератор
  • Взято отсюда: http://xaegr.wordpress.com/2008/01/24/send-smtpmailps1/

    Send-SmtpMail.ps1

    Code Snippet

     

    param (

    $Server = $SmtpHostPreference, # SMTP Сервер

    $From = $SmtpFromPreference, # Адрес отправителя

    [string[]]$To, # Получатели

    $Body = "", # Тело сообщения

    $Subject = "", # Тема сообщения

    [System.IO.FileInfo[]]$Attachment=@() # Вложения

    )

    Write-Verbose "Создаем объекты SmtpClient и MailMessage"

    $SmtpClient = New-Object System.Net.Mail.SmtpClient

    $Message = New-Object System.Net.Mail.MailMessage

    Write-Verbose "Устанавливаем свойства этих объектов"

    $SmtpClient.Host = $Server

    $Message.Body = $Body

    $Message.Subject = $Subject

    $Message.From = $From

    Write-Verbose "Создаем и добавляем вложения"

    $Attachment | ForEach-Object {

    $a = New-Object System.Net.Mail.Attachment($_.fullname)

    $Message.Attachments.Add($a)

    }

    Write-Verbose "Добавляем получателей"

    $To | ForEach-Object {$Message.To.Add($_)}

    Write-Verbose "Отправляем сообщение"

    $smtpclient.Send($Message)

    Write-Verbose "Удаляем объекты"

    $Message.Dispose()

     

     

    #== Применять скрипт можно например так:

    #== .\Send-SmtpMail.ps1 -to ктото@гдето.ru -server pochtovik -from дядя@гдето.ru -subject test -verbose

    #== Или так:

    #== $SmtpHostPreference = "pochtovik.domain.local"

    #== $SmtpFromPreference = "дядя@гдето.ru"

    #== .\Send-SmtpMail.ps1 -to ктото@гдето.ru -subject test -body "Hello there!" -attachment (dir c:\files\*.txt)

    #== PS: Для работы скрипта, должна быть разрешена анонимная отправка сообщений по SMTP. Хотя можно прикрутить и аутентификацию.

     

    Взято отсюда: http://xaegr.wordpress.com/2008/01/24/send-smtpmailps1/

  • с gmail всё сложнее

    я использовал send-smtpmail

     

    Code Snippet

    PS:29 > Send-SmtpMail -to test@mail.ru -Body "hi" -SmtpHost smtp.gmail.com -From test@gmail.com -Credential (get-credential)

    cmdlet get-credential at command pipeline position 1
    Supply values for the following parameters:
    Credential
    Send-SmtpMail : Серверу SMTP требовалось защищенное соединение, или подлинность клиента не была установлена. Ответ сервера: 5.7.0 Must issue a STARTTLS command
     first. j8sm1722841gvb.1

     

  •  

    может утилитка bmail поможет?
  •  ilgiz® написано:

    Взято отсюда: http://xaegr.wordpress.com/2008/01/24/send-smtpmailps1/

    Send-SmtpMail.ps1

     

    Для работы скрипта, должна быть разрешена анонимная отправка сообщений по SMTP. Хотя можно прикрутить и аутентификацию.

     

    А как аутентификацию прикрутить?

    Модератор
  •  M.S.D. [mdanshin] написано:
     ilgiz® написано:

    Взято отсюда: http://xaegr.wordpress.com/2008/01/24/send-smtpmailps1/

    Send-SmtpMail.ps1

     

    Для работы скрипта, должна быть разрешена анонимная отправка сообщений по SMTP. Хотя можно прикрутить и аутентификацию.

     

    А как аутентификацию прикрутить?

     

    Автор скрипта не я, но наверно следует посмотреть доступные методы и свойства созданного объекта

    $SmtpClient = New-Object System.Net.Mail.SmtpClient

    и туда прикрутить аутентификацию.
  • Эх, в том-то и проблема, что чукча не писатель. Чукча читатель, от того и просил готовый. Wink

    Модератор
  • VBS :

     

    Code Snippet

    iConfig = Server.CreateObject("CDO.Configuration")
    Set iConfig = Server.CreateObject("CDO.Configuration")

    With iConfig.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.server.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing")  = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = "ru"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "user@domain.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "1234567"
        .Update
    End With


    Set cdoMessage = CreateObject("CDO.Message")

    With cdoMessage
        Set .Configuration = iConfig
        .From = "Devil <devil@hell.com>"
        .To = "nobody@sonehost.com"
        .Subject = "Hello, Nobody!"
        .TextBody = "I write from VBS script"
        .Send
    End With

    Set cdoMessage = Nothing

    Set iConfig = Nothing

     

     

    Думаю достаточно прозрачно.
  • Вот кусок на ASPX (правда через System.NetMail, а не через CDO). Спецы помогут перевести это в PowerShell.

     

    Code Snippet

    <% @Page Language="VB" %>
    <% @Import Namespace="System.Net.Mail" %>
    <% @Import Namespace="System.Net" %>
    <%
        Dim smtpMssg AS new MailMessage

        smtpMssg.From = New MailAddress ("devil@hell.com")
        smtpMssg.To.Add ( nobody@somehost.com )
        smtpMssg.Subject = "Message from ASPX"
        smtpMssg.Body = "ASPX Work?"


        Dim SmtpMail As New SmtpClient("smtp.server.com")
        SmtpMail.Credentials = New NetworkCredential(user@domain.com, "1234567")
        SmtpMail.Send(smtpMssg)

       
    %>

     

     

    Т.е. у System.Net.Mail.SmtpClient есть property Credentials. Вот его и надо заполнить в PowerShell скрипте.

    Как? Пока не знаю.

     

  •  ~Asia~ написано:

     

    может утилитка bmail поможет?

     

    Тогда уж, скорее, Blat - http://www.blat.net/

     

  •  КГБ написано:

    VBS :

     

    {...skiped...}

     

    Думаю достаточно прозрачно.

     

    Да, как раз то, что нужно, но не пойму, почему не хочет через gmail работать?

    Модератор
  • я ж тебе писал уже

    скорее всего и не будет с gmail работать, ему ssl нужно

  •  zorion написано:

    я ж тебе писал уже

    скорее всего и не будет с gmail работать, ему ssl нужно

    Ну дык... Задача то решаемая или нет? Есть готовый скрипт или еще никто не написал такого? Если нет, то буду ждать. Wink

    Модератор
  • Подновил скрипт добавив поддержку SSL и указание учетных данных. Спасибо .Net, это заняло лишь несколько строчек Smile

     

    Send-SMTPMail.ps1

    param (

    $Server = $SmtpHostPreference, # SMTP Сервер

    $From = $SmtpFromPreference, # Адрес отправителя

    [string[]]$To, # Получатели

    $Body = "", # Тело сообщения

    $Subject = "", # Тема сообщения

    [System.IO.FileInfo[]]$Attachment=@(), # Вложения

    [switch]$SSL, #Использовать SSL?

    $Credentials = $null #Учетные данные для подключения

    )

    Write-Verbose "Создаем объекты SmtpClient и MailMessage"

    $SmtpClient = New-Object System.Net.Mail.SmtpClient

    $Message = New-Object System.Net.Mail.MailMessage

    Write-Verbose "Устанавливаем свойства этих объектов"

    $SmtpClient.Host = $Server

    $SmtpClient.EnableSsl = $SSL

    if ($Credentials) {$SmtpClient.Credentials = $Credentials.GetNetworkCredential()}

    $Message.Body = $Body

    $Message.Subject = $Subject

    $Message.From = $From

    Write-Verbose "Создаем и добавляем вложения"

    $Attachment | ForEach-Object {

    $a = New-Object System.Net.Mail.Attachment($_.fullname)

    $Message.Attachments.Add($a)

    }

    Write-Verbose "Добавляем получателей"

    $To | ForEach-Object {$Message.To.Add($_)}

    Write-Verbose "Отправляем сообщение"

    $smtpclient.Send($Message)

    Write-Verbose "Удаляем объекты"

    $Message.Dispose()

     

     

     

    С гмейлом работает, проверил:

     

    Code Snippet

    PS> $cred = Get-Credential

    cmdlet Get-Credential at command pipeline position 1
    Supply values for the following parameters:
    Credential
    PS> .\send-smtpmail.ps1 -server smtp.gmail.com -from xaegrr@gmail.com -to xaegr@yandex.ru -body "Тест прошел успешно" -subject "Тест" -ssl -credentials $cred

     

     

    Модератор