У меня есть следующая функция для отправки электронных писем в PowerShell с вложениями:
param
(
[parameter(Mandatory = $false)]
[string]$l
)
function SendMail(){
if($e -ine '')
{
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = $f;
$mail.To.Add($t);
$mail.Subject = $s;
$att = New-Object System.Net.Mail.Attachment –ArgumentList $l
$mail.Attachments.Add($att)
$mail.Body = $b;
$smtp = New-Object System.Net.Mail.SmtpClient($serv);
$smtp.Send($mail);
}
}
Когда я пытаюсь отправить вложение файла .txt, кажется, что из текстового файла вырезается вся информация. Есть предложения относительно того, что происходит не так?
Я в основном использовал ваш тот же код - и большое количество вложений все прошло нормально. Я почти уверен, что ваша проблема не в 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)
}
Вы можете значительно сократить код, используя Send-MailMessage (командлет V2 для электронной почты). Это также может решить вашу проблему по нескольким причинам:
Пример, который использует Send-MailMessage, приведен ниже. В нем создается хэш-таблица параметров, и при использовании символа @ вместо $ перед именем переменной каждый из параметров становится параметром для Send-MailMessage.
Дополнительные примеры см .: Отправка автоматических писем с помощью Send-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" способ делать что-то, и я надеюсь, что он избавит вас от вашей проблемы.
Надеюсь это поможет,
Джеймс
if ($ e -ine '') -ine кажется опечаткой?
вы действительно должны включать значения ... При создании вложения maxybe возникает проблема с путем или именем файла? Попробуйте использовать "FullName" (путь + имя файла) файла.