Вопрос или проблема
Мне нужно найти способ отправить 30 людям электронные письма, я не хочу, чтобы они были в CC, я хочу, чтобы каждый из них получил письмо так, чтобы казалось, что это письмо только для него. Я знаю, что могу использовать Outlook и оставить поле “кому” пустым, а электронные адреса указать в BCC. Это хорошее решение, но мне нужно автоматизировать процесс. Я не могу найти способ использовать командлет send-mailmessage в PowerShell для достижения этой же цели. Ближайшее, что я могу сделать, это отправить письмо себе, а затем добавить всех в BCC, или запустить цикл, отправляя по одному письму с аргументом -to. Оба варианта для меня не подходят. Есть ли способ, как это сделать?
Согласен с Дэвидом.
Согласно моему исследованию, параметр -To является обязательным, что может помочь предотвратить превращение в спам-движок. Поэтому для вашего требования в PowerShell вы можете попробовать указать свой собственный адрес электронной почты или что-то вроде “[email protected]” в поле “кому”.
Запрашиваемые действия недоступны с использованием командлета Send-MailMessage, однако вы можете использовать класс .net net.mail
, чтобы достичь желаемого. Пожалуйста, посмотрите ниже, что вы могли бы интегрировать в свой скрипт.
$SMTPserver = "<SMTP Endpoint>"
$fromAddress = "[email protected]"
$subject = "<Тема>"
$emailbody = "<текст электронного письма>"
$bccAddresses = @("[email protected]","[email protected]","[email protected]")
$mailer = new-object Net.Mail.SMTPclient($SMTPserver)
$msg = new-object Net.Mail.MailMessage
Foreach ($emailAddress in $bccAddresses){
$msg.bcc.add($emailAddress)
}
$msg.Subject = $Subject
$msg.Body = $emailbody
$msg.From = $fromAddress
$mailer.send($msg)
.
Ответ или решение
Для автоматической отправки электронной почты с использованием только поля BCC (скрытая копия) в PowerShell, вы можете воспользоваться функциональностью .NET класса System.Net.Mail
. Важно отметить, что стандартная команда Send-MailMessage
в PowerShell требует указания адреса в поле TO, что может создать нежелательное поведение, когда получатели смогут видеть друг друга.
В этом ответе я подробно объясню, как настроить отправку сообщений, используя класс System.Net.Mail
, что позволит вам избежать указания адреса в поле TO и отправить сообщения только в BCC.
Шаги по автоматической отправке писем
-
Настройка SMTP-сервера: Определите SMTP-сервер, который вы будете использовать для отправки электронной почты. Это может быть ваш корпоративный SMTP-сервер или сторонний сервис, такой как Gmail.
-
Подготовка списка получателей: Создайте массив с адресами электронной почты, которые вы хотите добавить в поле BCC.
-
Скрипт PowerShell: Ниже приведен пример скрипта, который отправляет электронное письмо, используя только поле BCC.
# Параметры SMTP-сервера
$SMTPserver = "<SMTP Endpoint>" # Укажите адрес вашего SMTP-сервера
$fromAddress = "<отправитель@вашдомен.com>" # Укажите адрес отправителя
$subject = "<Тема письма>" # Укажите тему письма
$emailbody = "<Текст письма>" # Укажите содержимое письма
# Список адресов, которые будут добавлены в BCC
$bccAddresses = @(
"recipient1@example.com",
"recipient2@example.com",
"recipient3@example.com", # Добавьте остальные адреса по мере необходимости
...
)
# Инициализация SMTP-клиента
$mailer = New-Object Net.Mail.SmtpClient($SMTPserver)
$mailer.Port = 25 # Укажите порт вашего SMTP-сервера
$mailer.Credentials = New-Object Net.NetworkCredential("username", "password") # Укажите учётные данные, если требуется
# Создание нового сообщения
$msg = New-Object Net.Mail.MailMessage
# Добавляем адреса в BCC
Foreach ($emailAddress in $bccAddresses) {
$msg.Bcc.Add($emailAddress)
}
# Установка свойств сообщения
$msg.Subject = $subject
$msg.Body = $emailbody
$msg.From = $fromAddress
# Отправка сообщения
$mailer.Send($msg)
# Освобождение ресурсов
$msg.Dispose()
Важные моменты
- SMTP-сервер: Убедитесь, что вы используете правильный адрес SMTP-сервера и порт. Некоторые провайдеры могут требовать использование порта 587 для отправки через SSL.
- Аутентификация: Если ваш SMTP-сервер требует аутентификацию, не забудьте указать корректные учетные данные.
- Обработка ошибок: Рассмотрите возможность добавления блока try-catch для обработки ошибок, которые могут возникнуть при отправке электронной почты.
Заключение
Используя вышеописанный метод, вы сможете автоматизировать процесс отправки электронной почты без указания адреса в поле TO, что сделает каждое сообщение выглядящим индивидуально для каждого получателя. Это эффективно решает вашу задачу, сохраняет конфиденциальность адресов получателей и минимизирует риск попадания в спам.