#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 (созданной специально только для этого), и он работает нормально, принимая ответ.