Сценарий PowerShell для уведомления по электронной почте

#powershell #email #smtp #smtpclient #filezilla

#powershell #Адрес электронной почты #smtp #smtpclient #файловая система

Вопрос:

Я использую сервер FileZilla в качестве FTP. Я хочу создать сценарий PowerShell, который отправит электронное письмо, как только файл будет загружен.

Я использовал знания, изложенные в этой статье: https://richjenks.com/filezilla-email-notifications /

и ниже приведен код моего файла fn.ps1

 $EmailFrom = "SENDER_EMAIL"
$EmailTo = "RECIPIENT_EMAIL"
$Subject = "New File Uploaded to FileZilla"
$Body = "A new file has been uploaded to the FTP server on FileZilla"

$SMTPServer = "127.0.0.1"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 21)
$SMTPClient.EnableSsl = $true

$SMTPClient.Credentials = New-Object 
System.Net.NetworkCredential("GMAIL_ADDRESS", "GMAIL_PASSWORD");

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
 

Единственная проблема заключается в том, что электронное письмо фактически не отправляется? Я вижу, что PowerShell ненадолго появляется после загрузки файла, поэтому он запускается при загрузке файла, однако на самом деле электронное письмо никуда не отправляется.

Буду признателен за любую помощь.

РЕДАКТИРОВАТЬ: я не совсем уверен, какова связь между «SENDER_EMAIL» и «GMAIL_ADDRESS», я нашел вышеупомянутое решение на другом веб-сайте, и они разные, разве они не должны быть одинаковыми?

Ответ №1:

Убедитесь, что вы понимаете, что сценарий на самом деле не имеет никакого отношения к вашему FTP-серверу. Это просто обычный сценарий PowerShell, который отправляет фиксированное электронное письмо. Итак, все в сценарии связано с вашим почтовым сервером SMTP, а не с вашим FTP-сервером. So…

  • В SmtpClient конструктор отправляется адрес вашего почтового сервера SMTP. Похоже, вы используете адрес своего FTP-сервера.
     $SMTPServer = "127.0.0.1"
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 21)
     

    Проверьте пример, на котором вы основали это. Они используют smtp.gmail.com:587 .

  • Аналогично, SmtpClient.Credentials используются учетные данные для вашего почтового сервера SMTP. Итак, некоторые реальные значения, а не заполнители, подобные этим:
     $SMTPClient.Credentials = New-Object 
    System.Net.NetworkCredential("GMAIL_ADDRESS", "GMAIL_PASSWORD");
     

    Для Gmail это будут ваш адрес Gmail и пароль.

Комментарии:

1. Привет, это имеет смысл, спасибо. Я внес изменения. Таким образом, ‘$EmailFrom =’ — это не то же самое электронное письмо, которое я буду помещать в SmtpClient. Учетные данные ‘?

2. Обычно они будут одинаковыми.

3. Большое спасибо! Все, что оставалось сделать, это разрешить менее безопасный доступ к приложению в учетной записи gmail (созданной специально только для этого), и он работает нормально, принимая ответ.