Сценарий Powershell для отправки электронных писем, теряя текст в почтовом вложении

  1. Не используйте пакет размера 2 000 байтов для тестирования. 2 000 байтов могли быть больше затем MTU некоторых устройств, делающих их фрагмент / пакеты отбрасывания, какая привычка дают Вам четкое представление о потерях при передаче просто из-за ошибки канала.

  2. Для контроля потери пакетов от клиента к серверу в беспроводных сетях с плохой возможностью соединения я иногда просто использую ping. Команда ping Linux дает хорошее реферирование в конце как

    --- www.l.google.com ping statistics ---

    10 packets transmitted, 9 received, 10% packet loss, time 8999ms

    rtt min/avg/max/mdev = 102.921/123.423/144.075/12.673 ms

Таким образом, можно оставить ping, работающий в течение ночи и когда Вы закончите использование ping Ctrl + C затем, Вы сможете видеть процент потери пакетов и т.д.

Это - также не лучший способ, поскольку это мог быть один путь проблема в канале. Таким образом, пакеты могли бы достигнуть места назначения, но по некоторым причинам могли потеряться ответы. В таком выполнении случаев (на месте назначения)

tcpdump -v -i eth0 'icmp'

видеть, достигают ли запросы ping даже места назначения, помогает очистить вещи.

Если по некоторым причинам клиент Linux в не доступная попытка установить cygwin и использовать ping cygwin. Это могло бы быть тем же как ping Linux и должно сказать Вам статистику в конце.

2
задан 11 May 2010 в 04:05
3 ответа

Я в основном использовал Ваш тот же код - и большое множество вложений, через которые все проникли очень хорошо. Я довольно уверен, что Ваша проблема за пределами PowerShell - у Вас есть СПАМ или другая установка фильтра на сервере SMTP, которым Вы связываетесь с? есть ли другой сервер SMTP, с которым можно говорить, который является чистым?

Для ссылки вот пример кода, с которым я настраивал параметры для тестирования:

function SendMail() {
  # create mail message
  $mail = New-Object System.Net.Mail.MailMessage
  $mail.From = "Beuy@serverfault.com"
  $mail.To.Add("Beuy@serverfault.com")
  $mail.Subject = "Here is your attached file"
  $mail.Body = "See attached file"
  # create attachment
  $att = New-Object System.Net.Mail.Attachment "C:\Test.txt"
  $mail.Attachments.Add($att)
  # send email
  $smtp = New-Object System.Net.Mail.SmtpClient("mail.serverfault.com")
  $smtp.Send($mail)
}
2
ответ дан 3 December 2019 в 10:24
  • 1
    Привет Goyuix, You' ре прямо о проблеме, являющейся больше, чем powershell, но это wasn' t связанный с Фильтрацией спама. По некоторым причинам подсоединенный внешний диск (H:) ссылался для местоположения $att вместо it' s все местоположение, для разрешения я добавил следующую строку кода более ранний $logfile = $logfile Пути Твердости, которые решают вопрос. I' ve имел проблемы на этой машине с тем подсоединенным внешним диском прежде, должен был протестировать его на чистой среде. Спасибо за справку. –  Beuy 13 May 2010 в 03:40

если ($e-ine'')-ine, кажется, опечатка?

действительно необходимо включать значения... При создании вложения maxybe существует проблема с путем или именем файла? Попытайтесь использовать "FullName"(path+filename) Файла.

0
ответ дан 3 December 2019 в 10:24
  • 1
    неправильный, -ine эквивалентно -ne - я полагаю, что это существует как подсказка кода, что это нечувствительно к регистру. –  MattB 11 May 2010 в 16:46

Можно значительно сократиться, код при помощи Отправляют-MailMessage (V2 cmdlet для пользования электронной почтой). Это могло бы также решить Вашу проблему из-за нескольких вещей:

  • Детали.NET будут скрыты от Вас, таким образом, Вы не должны будете волноваться о построении объекта неправильно.
  • Намного более вероятно, что cmdlets обработает пути правильно. Очень общая проблема PowerShell, когда взаимодействие в.NET состоит в том, что необходимо обратиться к вещам абсолютным каталогом. В то время как система имеет понятие текущего рабочего каталога, потому что каталог PowerShell мог быть в файловой системе, или мог в реестре, текущий каталог.NET редко находится в синхронизации с текущим каталогом PowerShell.

Пример, который Отправляет-MailMessage использование, ниже. В нем хеш-таблица параметров создается и, при помощи вместо $ перед именем переменной, каждый из параметров становится параметром для Отправки.

Для большего количества примеров см.: Отправка Автоматизированных электронных писем с Отправляет-MailMessage, ConvertTo-HTML и Модуль Планировщика задач Пакета PowerShell

function SendMail($Attachment) { 
    # create mail message 
    $MessageParameters = @{
        From = "Beuy@serverfault.com"
        To = "Beuy@serverfault.com"
        Subject = "Here is your attached file"
        Body = "See attached file"
        Attachments = $Attachment        
        SmtpServer = "mail.serverfault.com"        
    }
    Send-MailMessage @MessageParameters 
}

Я полагаю, что это - намного больше способа "PowerShell" сделать вещи, и я надеюсь, что он избавляется от Вашей проблемы.

Надеюсь, это поможет,

James

2
ответ дан 3 December 2019 в 10:24

Теги

Похожие вопросы