2015-08-28 2 views
1

У меня это работает на моем локальном компьютере, но когда я пытаюсь использовать его на другом компьютере, который имеет одинаковые файлы в одном и том же месте и т. Д., Он не работает с этой ошибкой.Не удается отправить электронную почту powershell. Вы не можете вызвать метод для выражения с нулевым значением.

function email 
{ 
    $emailSmtpServer = "smtp-mail.outlook.com" 
    $emailSmtpServerPort = "587" 
    $emailSmtpUser = "USERNAME" 
    $emailSmtpPass = "PASSWORD" 
    $attachment = "C:\BackupLog.log" 
    $emailMessage.Attachments.Add($attachment) 
    $emailMessage = New-Object System.Net.Mail.MailMessage 
    $emailMessage.From = "[email protected]" 
    $emailMessage.To.Add("[email protected]") 
    $emailMessage.Subject = "Database Issues" 
    $emailMessage.IsBodyHtml = $true 
    $emailMessage.Body = "Test" 

    $SMTPClient = New-Object System.Net.Mail.SmtpClient($emailSmtpServer ,$emailSmtpServerPort) 
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($emailSmtpUser , $emailSmtpPass); 

    $SMTPClient.Send($emailMessage) 
} 

Это выход

PS C:\Users\XXLOCKRG1> email 
You cannot call a method on a null-valued expression 
At C:\database_backups\powershell scripts\functions\email.ps1:8 char:34 
+ $emailMessage.Attachments.Add <<<< ($attachment) 
+ CategoryInfo   : InvalidOperation: (Add:String) [], RuntimeException 
+ FullyQualifiedErrorId : InvokeMethodOnNull 

ответ

2

У вас есть две строки кода в неправильном порядке:

$emailMessage.Attachments.Add($attachment) # $emailMessage isn't instantiated yet 
$emailMessage = New-Object System.Net.Mail.MailMessage 

Должно быть:

$emailMessage = New-Object System.Net.Mail.MailMessage 
$emailMessage.Attachments.Add($attachment) 

Вам нужно создать экземпляр ваш объект, прежде чем вы сможете ссылаться на его членов.

2

Вы пытаетесь добавить вложение в объект $ emailMessage, прежде чем создавать его.

$emailMessage.Attachments.Add($attachment) #<---This is causing the error 
$emailMessage = New-Object System.Net.Mail.MailMessage 

Просто переставить строки, поместите строку New-Object перед строкой .Attachments.Add().

С учетом сказанного вы пытались использовать командлет Send-MailMessage? Он поставляется с PowerShell 3.0 и намного проще, чем использование старого SMTP-объекта.

Смежные вопросы